Calculator Tools Calculator Tools
Create

Investor Risk Profile Calculator

Mar 21, 2024

About this app

Investor Risk Profile Calculator for determining portfolio allocation based on a guided questionnaire.

Investor Risk Profile Calculator Next Your Risk Profile

Related apps

Put this on your site

Source

                    <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Investor Risk Profile Calculator for determining portfolio allocation based on a guided questionnaire.">
<meta name="keywords" content="Risk Profile, Investor Calculator, Portfolio Allocation, Behavioral Finance">
<title>Investor Risk Profile Calculator</title>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Roboto', sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
margin: 0;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.container {
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
max-width: 600px;
width: 100%;
}
.question {
margin-bottom: 20px;
}
.question-header {
font-size: 20px;
margin-bottom: 10px;
}
.options {
margin: 0;
padding: 0;
list-style-type: none;
}
.options li {
margin-bottom: 10px;
}
.button {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
text-align: center;
border-radius: 5px;
cursor: pointer;
}
.button:disabled {
background-color: #ccc;
}
.progress-bar {
background-color: #f1f1f1;
border-radius: 20px;
margin-bottom: 20px;
}
.progress {
height: 20px;
border-radius: 20px;
background-color: #007bff;
width: 0%;
}
.result {
display: none;
}
</style>
</head>
<body>
<div class="container">
<div id="questionnaire">
<div class="progress-bar">
<div class="progress" id="progress"></div>
</div>
<div id="questions"></div>
<button class="button" id="nextBtn" onclick="nextQuestion()">Next</button>
</div>
<div class="result" id="result">
<h2>Your Risk Profile</h2>
<p id="profile"></p>
<p id="allocation"></p>
</div>
</div>

<script>
const questions = [
{ question: "What is your investment experience?", options: ["Beginner", "Intermediate", "Experienced"], values: [2, 4, 6] },
{ question: "How do you react to a market downturn?", options: ["Sell everything", "Wait and see", "Buy more"], values: [2, 4, 6] },
{ question: "What is your investment time horizon?", options: ["< 3 years", "3-10 years", "> 10 years"], values: [2, 4, 6] },
{ question: "What percentage of your investment can you afford to lose without impacting your lifestyle?", options: ["< 10%", "10%-30%", "> 30%"], values: [2, 4, 6] },
{ question: "When making investment decisions, do you rely on research or gut feeling?", options: ["Gut feeling", "A mix of both", "Research"], values: [2, 4, 6] },
{ question: "What is your main financial goal?", options: ["Capital preservation", "Balanced growth", "High growth"], values: [2, 4, 6] },
{ question: "How important is liquidity to you?", options: ["Very important", "Somewhat important", "Not important"], values: [2, 4, 6] },
{ question: "How do you prefer to handle investment losses?", options: ["Avoid at all costs", "Tolerate short-term losses", "Focus on long-term gains"], values: [2, 4, 6] },
{ question: "How much do you prioritize investments over other expenses?", options: ["Low priority", "Medium priority", "High priority"], values: [2, 4, 6] },
{ question: "How do you view risk in investments?", options: ["Necessary evil", "Manageable element", "Opportunity for gains"], values: [2, 4, 6] }
];
let currentQuestionIndex = 0;
let totalRisk = 0;

function setupQuestionnaire() {
questions.forEach((q, index) => {
const questionDiv = document.createElement('div');
questionDiv.className = 'question';
questionDiv.innerHTML = `
<div class="question-header">${q.question}</div>
<ul class="options">${q.options.map((option, i) => `<li><button class="button option" data-value="${q.values[i]}" onclick="selectOption(${index}, ${q.values[i]})">${option}</button></li>`).join('')}</ul>
`;
questionDiv.style.display = 'none';
document.getElementById('questions').appendChild(questionDiv);
});
document.getElementsByClassName('question')[0].style.display = 'block';
updateProgressBar();
}

function selectOption(questionIndex, value) {
if(questionIndex === currentQuestionIndex) {
totalRisk += value;
nextQuestion();
}
}

function nextQuestion() {
if(currentQuestionIndex < questions.length - 1) {
document.getElementsByClassName('question')[currentQuestionIndex].style.display = 'none';
currentQuestionIndex++;
document.getElementsByClassName('question')[currentQuestionIndex].style.display = 'block';
if(currentQuestionIndex === questions.length - 1) {
document.getElementById('nextBtn').innerHTML = 'Submit';
}
updateProgressBar();
} else {
calculateResult();
}
}

function updateProgressBar() {
const progressPercentage = ((currentQuestionIndex + 1) / questions.length) * 100;
document.getElementById('progress').style.width = `${progressPercentage}%`;
}

function calculateResult() {
document.getElementById('questionnaire').style.display = 'none';
document.getElementById('result').style.display = 'block';

let profile = "";
let allocation = "";
if(totalRisk <= 20) {
profile = "Conservative";
allocation = "Recommended allocation: 70% bonds, 30% stocks.";
} else if(totalRisk <= 40) {
profile = "Balanced";
allocation = "Recommended allocation: 50% bonds, 50% stocks.";
} else if(totalRisk <= 60) {
profile = "Growth";
allocation = "Recommended allocation: 30% bonds, 70% stocks.";
} else {
profile = "Aggressive";
allocation = "Recommended allocation: 10% bonds, 90% stocks.";
}

document.getElementById('profile').innerText = `Based on your responses, your risk profile is: ${profile}.`;
document.getElementById('allocation').innerText = allocation;
}

setupQuestionnaire();
</script>
</body>
</html>