-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.js
124 lines (106 loc) · 5.54 KB
/
popup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
const languageSelect = document.querySelector('#languageSelect');
languageSelect.addEventListener('change', () => {
updateLanguage(languageSelect.value);
});
function updateLanguage(lang) {
loadTranslations(lang);
localStorage.setItem('language', lang);
}
function applyTranslations(translations) {
for (const key in translations) {
const element = document.getElementById(key);
if (element) {
if (element.tagName === 'OPTION') {
element.value = translations[key].message;
} else {
element.textContent = translations[key].message;
}
}
}
}
function loadTranslations(language) {
const url = `_locales/${language}/messages.json`;
fetch(url)
.then((response) => response.json())
.then((translations) => applyTranslations(translations))
.catch((error) => console.error(`Error loading translations for ${language}: ${error}`));
}
document.getElementById("languageSelect").addEventListener("change", (event) => {
const selectedLanguage = event.target.value;
updateLanguage(selectedLanguage);
});
// Load user inputs and translations
const savedLanguage = localStorage.getItem("language") || "en";
document.getElementById("languageSelect").value = savedLanguage;
updateLanguage(savedLanguage);
document.getElementById('calculate').addEventListener('click', () => {
const walletBalance = parseFloat(document.getElementById('walletBalance').value);
const tradeType = document.getElementById('selectedTradeType').value;
const entryPrice = parseFloat(document.getElementById('entryPrice').value);
const stopLossPrice = parseFloat(document.getElementById('stopLossPrice').value);
const takeProfitPrice = parseFloat(document.getElementById('takeProfitPrice').value);
const results = calculateTrade(walletBalance, tradeType, entryPrice, stopLossPrice, takeProfitPrice);
document.getElementById('positionSizeUnits').textContent = results.positionSizeUnits.toFixed(8);
document.getElementById('positionSizeUSD').textContent = results.positionSizeUSD.toFixed(2);
document.getElementById('riskRewardRatio').textContent = results.riskRewardRatio.toFixed(2);
document.getElementById('rewardUSD').textContent = results.rewardUSD.toFixed(2);
// Save user inputs
localStorage.setItem('walletBalance', walletBalance);
localStorage.setItem('tradeType', tradeType);
localStorage.setItem('swingRiskType', document.getElementById('swingRiskType').value);
localStorage.setItem('swingRiskPerTrade', document.getElementById('swingRiskPerTrade').value);
localStorage.setItem('intradayRiskType', document.getElementById('intradayRiskType').value);
localStorage.setItem('intradayRiskPerTrade', document.getElementById('intradayRiskPerTrade').value);
localStorage.setItem('scalpRiskType', document.getElementById('scalpRiskType').value);
localStorage.setItem('scalpRiskPerTrade', document.getElementById('scalpRiskPerTrade').value);
localStorage.setItem('entryPrice', entryPrice);
localStorage.setItem('stopLossPrice', stopLossPrice);
localStorage.setItem('takeProfitPrice', takeProfitPrice);
});
function calculateTrade(walletBalance, tradeType, entryPrice, stopLossPrice, takeProfitPrice) {
let riskType, riskPerTrade;
switch (tradeType) {
case 'swing':
riskType = document.getElementById('swingRiskType').value;
riskPerTrade = parseFloat(document.getElementById('swingRiskPerTrade').value);
break;
case 'intraday':
riskType = document.getElementById('intradayRiskType').value;
riskPerTrade = parseFloat(document.getElementById('intradayRiskPerTrade').value);
break;
case 'scalp':
riskType = document.getElementById('scalpRiskType').value;
riskPerTrade = parseFloat(document.getElementById('scalpRiskPerTrade').value);
break;
default:
throw new Error('Invalid trade type');
}
let riskAmount;
if (riskType === 'percentage') {
riskAmount = walletBalance * (riskPerTrade / 100);
} else {
riskAmount = riskPerTrade;
}
const positionSizeUnits = riskAmount / Math.abs(entryPrice - stopLossPrice);
const positionSizeUSD = positionSizeUnits * entryPrice;
const riskRewardRatio = Math.abs((takeProfitPrice - entryPrice) / (entryPrice - stopLossPrice));
const rewardUSD = riskRewardRatio * riskAmount;
return {
positionSizeUnits,
positionSizeUSD,
riskRewardRatio,
rewardUSD
};
}
// Load user inputs
document.getElementById('walletBalance').value = localStorage.getItem('walletBalance') || '';
document.getElementById('selectedTradeType').value = localStorage.getItem('tradeType') || 'swing';
document.getElementById('swingRiskType').value = localStorage.getItem('swingRiskType') || 'percentage';
document.getElementById('swingRiskPerTrade').value = localStorage.getItem('swingRiskPerTrade') || '';
document.getElementById('intradayRiskType').value = localStorage.getItem('intradayRiskType') || 'usd';
document.getElementById('intradayRiskPerTrade').value = localStorage.getItem('intradayRiskPerTrade') || '';
document.getElementById('scalpRiskType').value = localStorage.getItem('scalpRiskType') || 'percentage';
document.getElementById('scalpRiskPerTrade').value = localStorage.getItem('scalpRiskPerTrade') || '';
document.getElementById('entryPrice').value = localStorage.getItem('entryPrice') || '';
document.getElementById('stopLossPrice').value = localStorage.getItem('stopLossPrice') || '';
document.getElementById('takeProfitPrice').value = localStorage.getItem('takeProfitPrice') || '';