Skip to content

Commit e8046e8

Browse files
author
pseudocode88
committed
Add position size suggestion based on risk
1 parent bff5d16 commit e8046e8

File tree

4 files changed

+112
-41
lines changed

4 files changed

+112
-41
lines changed

calc.js

Lines changed: 82 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ const $ = require('jquery');
22
var DS = require('nedb');
33

44
var el = {
5+
psBuilder: {},
56
accountSettings: {}
67
};
78

89
var data = {
10+
psBuilder: {},
911
accountSettings: {
1012
capital: 0,
1113
minRisk: 0,
@@ -18,9 +20,17 @@ var data = {
1820
var db = {};
1921

2022
function cacheSelectors() {
23+
cachePSBuilderSelectors();
2124
cacheAccountSettingsSelectors();
2225
}
2326

27+
function cachePSBuilderSelectors() {
28+
el.psBuilder.sl = $('#txt-sl');
29+
el.psBuilder.tp = $('#txt-tp');
30+
el.psBuilder.lev = $('#txt-lev');
31+
32+
}
33+
2434
function cacheAccountSettingsSelectors() {
2535
el.accountSettings.editButton = $('#button-edit-account-settings');
2636
el.accountSettings.form = $('#form-account-settings');
@@ -30,9 +40,66 @@ function cacheAccountSettingsSelectors() {
3040
}
3141

3242
function eventBindings() {
43+
eventBindingsForPSBuilder();
3344
eventBindingsForAccountSettings();
3445
}
3546

47+
function eventBindingsForPSBuilder() {
48+
el.psBuilder.sl.on("keyup", calc);
49+
el.psBuilder.tp.on("keyup", calc);
50+
}
51+
52+
function calc() {
53+
data.psBuilder.sl = el.psBuilder.sl.val();
54+
data.psBuilder.tp = el.psBuilder.tp.val();
55+
56+
var riskLevels = {
57+
l: Math.floor(data.accountSettings.capital * ((data.accountSettings.minRisk - 1) / 100)),
58+
m: Math.floor(data.accountSettings.capital * (data.accountSettings.minRisk / 100)),
59+
h: Math.floor(data.accountSettings.capital * (((parseFloat(data.accountSettings.minRisk) + parseFloat(data.accountSettings.maxRisk)) / 2) / 100)),
60+
xh: Math.floor(data.accountSettings.capital * (data.accountSettings.maxRisk / 100))
61+
}
62+
63+
var suggestions = [];
64+
65+
var r = 0,
66+
m = 0,
67+
ps = 0,
68+
sl = data.psBuilder.sl || 1,
69+
tp = data.psBuilder.tp || 1,
70+
g = 0,
71+
l = 0,
72+
id = '';
73+
74+
Object.keys(riskLevels).forEach((key) => {
75+
id = key;
76+
r = riskLevels[key];
77+
m = r + 1;
78+
l = Math.floor(r / (m * (sl / 100)));
79+
ps = Math.floor(m * l);
80+
g = Math.floor((l * m) * (tp / 100));
81+
82+
suggestions.push({
83+
id: id,
84+
r: r,
85+
m: m,
86+
l: l,
87+
g: g,
88+
ps: ps
89+
});
90+
});
91+
92+
var prefix = '';
93+
suggestions.forEach((sug) => {
94+
prefix = '#' + sug.id + '-'
95+
$(prefix + "size").html(sug.ps);
96+
$(prefix + "loss").html(sug.r);
97+
$(prefix + "gain").html(sug.g);
98+
$(prefix + "lev").html(sug.l);
99+
$(prefix + "margin").html(sug.m);
100+
})
101+
}
102+
36103
function eventBindingsForAccountSettings() {
37104
el.accountSettings.editButton.click(() => { toggleAccountSettingsForm(true) });
38105
el.accountSettings.cancel.click(() => { toggleAccountSettingsForm(false) });
@@ -65,22 +132,22 @@ function updateAccountSettingsData() {
65132
if (!docs) {
66133
db.accountSettings.insert({
67134
exchange: 'default',
68-
capital: data.accountSettings.capital,
69-
minRisk: data.accountSettings.minRisk,
70-
maxRisk: data.accountSettings.maxRisk,
71-
makerFee: data.accountSettings.makerFee,
72-
takerFee: data.accountSettings.takerFee
135+
capital: parseFloat(data.accountSettings.capital),
136+
minRisk: parseFloat(data.accountSettings.minRisk),
137+
maxRisk: parseFloat(data.accountSettings.maxRisk),
138+
makerFee: parseFloat(data.accountSettings.makerFee),
139+
takerFee: parseFloat(data.accountSettings.takerFee)
73140
})
74141
} else {
75142
db.accountSettings.update({
76143
exchange: 'default'
77144
}, {
78145
exchange: 'default',
79-
capital: data.accountSettings.capital,
80-
minRisk: data.accountSettings.minRisk,
81-
maxRisk: data.accountSettings.maxRisk,
82-
makerFee: data.accountSettings.makerFee,
83-
takerFee: data.accountSettings.takerFee
146+
capital: parseFloat(data.accountSettings.capital),
147+
minRisk: parseFloat(data.accountSettings.minRisk),
148+
maxRisk: parseFloat(data.accountSettings.maxRisk),
149+
makerFee: parseFloat(data.accountSettings.makerFee),
150+
takerFee: parseFloat(data.accountSettings.takerFee)
84151
})
85152
}
86153
})
@@ -112,12 +179,11 @@ $(window).on('load', () => {
112179

113180
db.accountSettings.findOne({ exchange: 'default' }, (err, docs) => {
114181
if (docs) {
115-
console.log(docs);
116-
data.accountSettings.capital = docs.capital;
117-
data.accountSettings.minRisk = docs.minRisk;
118-
data.accountSettings.maxRisk = docs.maxRisk;
119-
data.accountSettings.makerFee = docs.makerFee;
120-
data.accountSettings.takerFee = docs.takerFee;
182+
data.accountSettings.capital = parseFloat(docs.capital);
183+
data.accountSettings.minRisk = parseFloat(docs.minRisk);
184+
data.accountSettings.maxRisk = parseFloat(docs.maxRisk);
185+
data.accountSettings.makerFee = parseFloat(docs.makerFee);
186+
data.accountSettings.takerFee = parseFloat(docs.takerFee);
121187
}
122188

123189
renderAccountSettingsData();

index.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ p {
9494
}
9595

9696
main {
97-
max-width: 500px;
97+
max-width: 520px;
9898
padding: 32px;
9999
margin: auto;
100100
box-sizing: border-box;
@@ -221,7 +221,7 @@ input[type=text]:focus {
221221
}
222222

223223
.RList-Title p {
224-
width: 25%;
224+
width: 16%;
225225
font-size: 12px;
226226
font-weight: 500;
227227
}
@@ -242,7 +242,7 @@ input[type=text]:focus {
242242
}
243243

244244
.RList-Item p {
245-
width: 25%;
245+
width: 16%;
246246
font-size: 12px;
247247
color: var(--content-primary);
248248
font-weight: 500;

index.html

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,57 +23,62 @@ <h2>Position Size Builder</h2>
2323
</div>
2424

2525
<div class="fr f-wrap-24">
26-
<div>
26+
<div class="strech">
2727
<label>Stop Loss %</label>
2828
<input type="text" id="txt-sl" value="1" />
2929
</div>
3030

31-
<div>
31+
<div class="strech">
3232
<label>Take Profit %</label>
3333
<input type="text" id="txt-tp" value="1" />
3434
</div>
3535

36-
<div>
36+
<!-- <div>
3737
<label>Leverage</label>
3838
<input type="text" id="txt-lev" value="1" />
39-
</div>
39+
</div> -->
4040
</div>
4141

4242
<div class="RList">
4343
<div class="fr RList-Title">
44-
<p>Cap Risk</p>
44+
<p>Risk</p>
4545
<p class="RList-Label-right">Size</p>
4646
<p class="RList-Label-right">Loss</p>
4747
<p class="RList-Label-right">Gain</p>
4848
<p class="RList-Label-right">Lev</p>
49+
<p class="RList-Label-right">Margin</p>
4950
</div>
5051
<div class="fr RList-Item">
5152
<p class="clr-info">Low</p>
52-
<p class="RList-Label-right">1000</p>
53-
<p class="RList-Label-right">2</p>
54-
<p class="RList-Label-right">2</p>
55-
<p class="RList-Label-right">175</p>
53+
<p id="l-size" class="RList-Label-right">0</p>
54+
<p id="l-loss" class="RList-Label-right">0</p>
55+
<p id="l-gain" class="RList-Label-right">0</p>
56+
<p id="l-lev" class="RList-Label-right">0</p>
57+
<p id="l-margin" class="RList-Label-right">0</p>
5658
</div>
5759
<div class="fr RList-Item">
5860
<p class="clr-success">Medium</p>
59-
<p class="RList-Label-right">1000</p>
60-
<p class="RList-Label-right">3</p>
61-
<p class="RList-Label-right">3</p>
62-
<p class="RList-Label-right">175</p>
61+
<p id="m-size" class="RList-Label-right">0</p>
62+
<p id="m-loss" class="RList-Label-right">0</p>
63+
<p id="m-gain" class="RList-Label-right">0</p>
64+
<p id="m-lev" class="RList-Label-right">0</p>
65+
<p id="m-margin" class="RList-Label-right">0</p>
6366
</div>
6467
<div class="fr RList-Item">
6568
<p class="clr-warning">High</p>
66-
<p class="RList-Label-right">1000</p>
67-
<p class="RList-Label-right">4</p>
68-
<p class="RList-Label-right">4</p>
69-
<p class="RList-Label-right">175</p>
69+
<p id="h-size" class="RList-Label-right">0</p>
70+
<p id="h-loss" class="RList-Label-right">0</p>
71+
<p id="h-gain" class="RList-Label-right">0</p>
72+
<p id="h-lev" class="RList-Label-right">0</p>
73+
<p id="h-margin" class="RList-Label-right">0</p>
7074
</div>
7175
<div class="fr RList-Item">
7276
<p class="clr-danger">x High</p>
73-
<p class="RList-Label-right">1000</p>
74-
<p class="RList-Label-right">5</p>
75-
<p class="RList-Label-right">5</p>
76-
<p class="RList-Label-right">175</p>
77+
<p id="xh-size" class="RList-Label-right">0</p>
78+
<p id="xh-loss" class="RList-Label-right">0</p>
79+
<p id="xh-gain" class="RList-Label-right">0</p>
80+
<p id="xh-lev" class="RList-Label-right">0</p>
81+
<p id="xh-margin" class="RList-Label-right">0</p>
7782
</div>
7883
</div>
7984

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { app, BrowserWindow } = require('electron');
22

33
const createWindow = () => {
44
const win = new BrowserWindow({
5-
width: 500,
5+
width: 520,
66
height: 768,
77
webPreferences: {
88
nodeIntegration: true,

0 commit comments

Comments
 (0)