-
Notifications
You must be signed in to change notification settings - Fork 0
/
scalping-money-management.pine
179 lines (151 loc) · 8.25 KB
/
scalping-money-management.pine
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Author: Anton Stupenkov
// Email: stupean@gmail.com
// Screener: https://t.me/LazyScalp
// ©stupean
//@version=5
indicator("Scalping money management 1.0.0", overlay = true)
// risk management
var string riskManagementGroup = "risk management"
float deposit = input.float(defval = 1000, title = "Deposit", group = riskManagementGroup)
float lossPerTrade = input.float(defval = 1, title = "Maximum risk per trade, %", group = riskManagementGroup)
float commission = input.float(defval= 0.1, title = "Commission and other, %", tooltip = "Add to stoploss", group = riskManagementGroup)
// panel
var string infoPanelSettingsGroup = "info panel settings"
string position = input.string(defval = position.bottom_right, options = [position.bottom_right, position.bottom_center, position.bottom_left, position.top_right, position.top_center, position.top_left], group = infoPanelSettingsGroup)
color tableBgColor = input.color(defval = color.new(#363636, 50) , title = "Background color", group = infoPanelSettingsGroup)
color tableTextColor = input.color(defval = color.white, title = "Text color", group = infoPanelSettingsGroup)
bool showTableTitle = input.bool(defval = true, title = "Show titles", group = infoPanelSettingsGroup)
bool showPips = input.bool(defval = true, title = "Show stop loss in pips", group = infoPanelSettingsGroup)
// ATR SL
bool showAtrSL = input.bool(defval = true, title = "Show ATR stop loss", group = "Stop loss by ATR")
string timeframeSL = input.timeframe(defval = "1", title = "ATR timeframe", group = "Stop loss by ATR")
int lengthSL = input.int(defval = 200, title = "Stop less length", group = "Stop loss by ATR")
color colorAtrSL = input.color(defval = color.yellow, title = "ATR stop loss color", group = "Stop loss by ATR")
bool showStopLoss1 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l1")
float stopLoss1 = input.float(defval = 0.1, title = "Stop loss, %", group = "Stoploss", inline = "l1")
bool showStopLoss2 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l2")
float stopLoss2 = input.float(defval = 0.2, title = "Stop loss, %", group = "Stoploss", inline = "l2")
bool showStopLoss3 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l3")
float stopLoss3 = input.float(defval = 0.3, title = "Stop loss, %", group = "Stoploss", inline = "l3")
bool showStopLoss4 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l4")
float stopLoss4 = input.float(defval = 0.4, title = "Stop loss, %", group = "Stoploss", inline = "l4")
bool showStopLoss5 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l5")
float stopLoss5 = input.float(defval = 0.5, title = "Stop loss, %", group = "Stoploss", inline = "l5")
bool showStopLoss6 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l6")
float stopLoss6 = input.float(defval = 0.6, title = "Stop loss, %", group = "Stoploss", inline = "l6")
bool showStopLoss7 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l7")
float stopLoss7 = input.float(defval = 0.7, title = "Stop loss, %", group = "Stoploss", inline = "l7")
bool showStopLoss8 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l8")
float stopLoss8 = input.float(defval = 0.8, title = "Stop loss, %", group = "Stoploss", inline = "l8")
bool showStopLoss9 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l9")
float stopLoss9 = input.float(defval = 0.9, title = "Stop loss, %", group = "Stoploss", inline = "l9")
bool showStopLoss10 = input.bool(defval = true, title = "", group = "Stoploss", inline = "l10")
float stopLoss10 = input.float(defval = 1, title = "Stop loss, %", group = "Stoploss", inline = "l10")
// Money to lots
var string volumeToLotsGroup = "Money to lots"
bool showMoneyLevel1 = input.bool(defval = true, title = "", group = volumeToLotsGroup, inline = "moneyLevel1")
int moneyLevel1 = input.int(defval = 100000, title = "Volume in money 1", group = volumeToLotsGroup, inline = "moneyLevel1")
bool showMoneyLevel2 = input.bool(defval = true, title = "", group = volumeToLotsGroup, inline = "moneyLevel2")
int moneyLevel2 = input.int(defval = 500000, title = "Volume in money 2", group = volumeToLotsGroup, inline = "moneyLevel2")
string moneyToLotsPanelPosition = input.string(
title = "Panel position",
defval = position.bottom_center,
options = [position.bottom_right, position.bottom_center, position.bottom_left, position.middle_right, position.middle_center, position.middle_left, position.top_right, position.top_center, position.top_left],
group = volumeToLotsGroup)
type modelType
float sl
float money
int pips
color textColor
bool isShow
createModel(float stopLoss, bool isShow, color textColor = na) =>
modelType.new(
sl = stopLoss,
money = (deposit * lossPerTrade) / (stopLoss + commission),
pips = math.round(stopLoss / 100 * close / syminfo.mintick),
isShow = isShow,
textColor = na(textColor) ? tableTextColor : textColor)
float atrSL = (request.security(syminfo.ticker, timeframeSL, ta.atr(lengthSL)) / close) * 100
array<modelType> models = array.new<modelType>()
models.push(createModel(atrSL, showAtrSL, colorAtrSL))
models.push(createModel(stopLoss1, showStopLoss1))
models.push(createModel(stopLoss2, showStopLoss2))
models.push(createModel(stopLoss3, showStopLoss3))
models.push(createModel(stopLoss4, showStopLoss4))
models.push(createModel(stopLoss5, showStopLoss5))
models.push(createModel(stopLoss6, showStopLoss6))
models.push(createModel(stopLoss7, showStopLoss7))
models.push(createModel(stopLoss8, showStopLoss8))
models.push(createModel(stopLoss9, showStopLoss9))
models.push(createModel(stopLoss10, showStopLoss10))
var table indicatorPanel = table.new(
position = position,
columns = 3,
rows = 15)
//#region Stoploss size
if barstate.islast
if showTableTitle
table.cell(table_id = indicatorPanel, column = 0, row = 0, text = "SL", bgcolor = tableBgColor, text_color = tableTextColor, tooltip = "Stop loss in %")
if showPips
table.cell(table_id = indicatorPanel, column = 1, row = 0, text = "Pips", bgcolor = tableBgColor, text_color = tableTextColor, tooltip = "Stop loss in pips")
table.cell(table_id = indicatorPanel, column = 2, row = 0, text = "Money", bgcolor = tableBgColor, text_color = tableTextColor, tooltip = "money")
for i = 0 to models.size() - 1
modelType model = models.get(i)
if not model.isShow
continue
table.cell(
table_id = indicatorPanel,
column = 0,
row = i + 1,
text = str.tostring(math.round(model.sl, 2)) + "%",
bgcolor = tableBgColor,
text_color = model.textColor,
tooltip = "Stop loss")
if showPips
table.cell(
table_id = indicatorPanel,
column = 1,
row = i + 1,
text = str.tostring(model.pips),
bgcolor = tableBgColor,
text_color = model.textColor,
tooltip = "pips")
table.cell(
table_id = indicatorPanel,
column = 2,
row = i + 1,
text = "💵" + str.tostring(math.round(model.money)),
bgcolor = tableBgColor,
text_color = model.textColor,
tooltip = "money",
text_halign = text.align_left)
//#endregion
//#region Money to lots
moneyToLots(int money) =>
money / close
var table moneyToLotsPanel = table.new(
position = moneyToLotsPanelPosition,
columns = 3,
rows = 15)
if barstate.islast
if showMoneyLevel1
int lotsLevel1 = math.round(moneyToLots(moneyLevel1))
table.cell(
table_id = moneyToLotsPanel,
column = 0,
row = 0,
text = str.format("💵{0,number} = {1,number} Lots", moneyLevel1, lotsLevel1),
bgcolor = tableBgColor,
text_color = tableTextColor,
tooltip = "")
if showMoneyLevel2
int lotsLevel2 = math.round(moneyToLots(moneyLevel2))
table.cell(
table_id = moneyToLotsPanel,
column = 0,
row = 1,
text = str.format("💵{0,number} = {1,number} Lots", moneyLevel2, lotsLevel2),
bgcolor = tableBgColor,
text_color = tableTextColor,
tooltip = "")
//#endregion