
이 전략은 다중 시간 프레임에 있는 스톱 관리를 구현하기 위한 것이다. 전략은 동시에 비율 스톱과 메인 시간 프레임 이상의 핵심 가격 영역 스톱을 적용하여 보다 정확하고 효과적인 스톱 관리를 구현한다.
이 전략은 먼저 파동 트렌드 지표를 도입하여 지표 금포크에 따라 다중 신호 입구를 한다.
이 전략은 두 가지 방법으로 진행됩니다.
백분율 정지: 입점 가격의 일정한 비율에 따라 여러 개의 정지 가격을 설정한다.
다중 시간 프레임 정지점: 일선과 4시간 선에서 평균선을 그리고, 이 평균선의 가격을 정지점 가격으로 다.
퍼센티지 스톱에 대해, 전략은 4개의 다른 퍼센티지 스톱 가격을 설정한다. 가격이 각각의 스톱 가격을 만지면, 설정된 퍼센티지에 따라 부분적으로 청산된다.
다중 시간 프레임 정지시, 전략은 일선과 4 시간선에서 각각 100일 평균선, 200일 평균선을 그리는 것이다. 이 평균선들의 가격을 정지 가격으로 삼고, 가격이 정지점에 도달했을 때 평소하는 것이다.
또한, 전략은 스톱로스 가격을 설정한다. 가격이 스톱로스 가격보다 낮으면, 모든 포지션은 청산된다.
전체 전략은 백분율 정지 및 다중 시간 프레임 정지 사용의 조합을 통해 더 포괄적이고 세밀한 정지 관리를 실현합니다.
백분율의 정제를 사용하여 고정된 비율에 따라 정제를 하여 조기 정제를 방지하거나 정제를 제대로 하지 않도록 한다.
다중 시간 프레임 분석을 통해 더 정확한 정지 가격을 설정하고, 정지 지점을 더 잘 선택합니다.
다단계 경련을 줄일 수 있는 세트별 경련을 줄일 수 있다.
스톱로스 가격을 설정하여 하향 위험을 효과적으로 제어하십시오.
%제어와 다중 시간 프레임 제어를 조합하여 제어가 더욱 포괄적이고 세밀하게 수행됩니다.
백분율 정지는 파라미터 설정에 의존하며, 만약 파라미터 설정이 잘못되면 정지는 너무 일찍 또는 너무 늦게 발생할 수 있다.
다중 시간 프레임 분석은 평균선 지표에 의존하며, 평균선은 다소 지연성이 있으며, 이탈이 발생할 수 있다.
정지 위치의 잘못된 설정은 불필요한 정지를 초래할 수 있다.
비율 정지 및 다중 시간 프레임 정지가 최적의 매칭을 위해 적절한 최적화 매개 변수가 필요합니다.
더 많은 평균선 지표를 테스트할 수 있고, 더 좋은 평균선을 핵심 중단 가격으로 선택할 수 있다.
모델 예측 방법을 시도할 수 있으며, 가격의 중요한 영역을 스톱 가격으로 예측한다.
더 많은 정지 규칙을 도입할 수 있습니다. 정지 비율을 기대하거나, 정지를 이동하는 등으로 정지를 더 포괄적으로 만들 수 있습니다.
다양한 지분 기간에 최적의 비율을 테스트할 수 있다.
재검토를 통해 제지 변수를 최적화하여 전체적인 위험과 이익의 비율을 높일 수 있다.
이 전략은 백분율 정지 및 다시간 프레임 정지 조합을 통해 유연하고 정확한 정지 관리를 구현한다. 전략은 정지점 선택이 더 우수하고, 정지가 더 포괄적이라는 장점이 있다. 또한 파라미터 설정, 정지 손실 위치 등의 문제가 있다. 후속으로 정지 파라미터를 최적화하고, 더 많은 정지 규칙을 추가하는 등의 측면에서 개선할 수 있어, 전략의 정지 시스템을 더 완성했다.
/*backtest
start: 2023-10-22 00:00:00
end: 2023-10-29 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TrendCrypto2022
//@version=5
// strategy("Take profit Multi timeframe", overlay=true, margin_long=100, margin_short=100)
takepercent = input.bool(title="Take profit %", defval=true ,group="Set up take profit")
takemtf = input.bool(title="Take profit Multi timeframe", defval=false ,group="Set up take profit")
//Paste your strategy at here. This is example strategy. I use WaveTrend indicator
//WaveTrend indicator
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
oblv1 = input(60, "Over Bought Lv 1")
oblv2 = input(53, "Over Bought Lv 2")
oslv1 = input(-60, "Over Sold Lv 1")
oslv2 = input(-53, "Over Sold Lv 2")
ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1,4)
//Strategy
buy = ta.crossover(wt1, wt2) and wt1 < -40
if (buy)
strategy.entry("Long", strategy.long)
//Resistant in time D and 4H
ema_len1 = input.int(title='Ema1', defval=100, group='Take profit Mtf')
ema_len2 = input.int(title='Ema2', defval=200, group='Take profit Mtf')
src = input.source(title='Source', defval=close, group='Take profit Mtf')
tf1 = input.timeframe(title='Time frame 1', defval='240', group='Take profit Mtf')
tf2 = input.timeframe(title='Time frame 2', defval='D', group='Take profit Mtf')
htf_ma1 = ta.ema(src, ema_len1)
htf_ma2 = ta.ema(src, ema_len2)
ema1 = request.security(syminfo.tickerid, tf1, htf_ma1)
ema2 = request.security(syminfo.tickerid, tf1, htf_ma2)
ema3 = request.security(syminfo.tickerid, tf2, htf_ma1)
ema4 = request.security(syminfo.tickerid, tf2, htf_ma2)
//Plot
plotema1 = plot(ema1, color=color.new(color.silver, 0), style=plot.style_line, linewidth=1, offset=0, title='Ema100 4h', display=display.none)
plotema2 = plot(ema2, color=color.new(color.silver, 0), style=plot.style_line, linewidth=1, offset=0, title='Ema200 4h', display=display.none)
plotema3 = plot(ema3, color=color.new(color.orange, 20), style=plot.style_line, linewidth=1, offset=0, title='Ema100 D', display=display.none)
plotema4 = plot(ema4, color=color.new(color.orange, 20), style=plot.style_line, linewidth=1, offset=0, title='Ema200 D', display=display.none)
//Label take profit multitime frame
var label labelema1 = na
label.delete(labelema1)
labelema1 := label.new(x=time + 120, y=ema1, text='\n*****Ema100 4H: ' + str.tostring(math.round(ema1,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labelema2 = na
label.delete(labelema2)
labelema2 := label.new(x=time + 120, y=ema2, text='\n*****Ema200 4H: ' + str.tostring(math.round(ema2,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labelema3 = na
label.delete(labelema3)
labelema3 := label.new(x=time + 120, y=ema3, text='\n*****Ema100 1D: ' + str.tostring(math.round(ema3,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labelema4 = na
label.delete(labelema4)
labelema4 := label.new(x=time + 120, y=ema4, text='\n*****Ema200 1D: ' + str.tostring(math.round(ema4,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
//Set up take profit %
percent(pcnt) =>
strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
TP1=input.float(3, title="TP1 %", step=0.1, group="Take profit %")
TP2=input.float(5, title="TP2 %", step=1, group="Take profit %")
TP3=input.float(6, title="TP3 %", step=1, group="Take profit %")
TP4=input.float(8, title="TP4 %", step=1, group="Take profit %")
SL=input.float(5, title="Stop Loss %", step=1, group="Take profit %")
qty1=input.float(5, title="% Close At TP1", step=1, group="Take profit %")
qty2=input.float(5, title="% Close At TP2", step=1, group="Take profit %")
qty3=input.float(5, title="% Close At TP3", step=1, group="Take profit %")
qty4=input.float(5, title="% Close At TP4", step=1, group="Take profit %")
lossPnt_L = percent(SL)
//Set up take profit multi timeframe
a = array.from((ema1), (ema2), (ema3), (ema4))
tpmtf1 = array.min(a)
tpmtf2 = array.min(a, 2)
tpmtf3 = array.min(a, 3)
tpmtf4 = array.min(a, 4)
//Set up exit
long_sl_level = strategy.position_avg_price - lossPnt_L*syminfo.mintick
if takepercent == true
strategy.exit("TP1%", "Long", qty_percent = qty1, profit = percent(TP1), loss = lossPnt_L)
strategy.exit("TP2%", "Long", qty_percent = qty2, profit = percent(TP2), loss = lossPnt_L)
strategy.exit("TP3%", "Long", qty_percent = qty3, profit = percent(TP3), loss = lossPnt_L)
strategy.exit("TP4%", "Long", qty_percent = qty4, profit = percent(TP3), loss = lossPnt_L)
strategy.close_all(when= ta.crossunder(wt1, wt2) and wt1 > 0, comment="Close All")
if takemtf == true and array.max(a, 1) > strategy.position_avg_price
strategy.exit("TP1Mtf", "Long", qty_percent = qty1, limit = tpmtf1, stop = long_sl_level)
strategy.exit("TP2Mtf", "Long", qty_percent = qty2, limit = tpmtf2, stop = long_sl_level)
strategy.exit("TP3Mtf", "Long", qty_percent = qty3, limit = tpmtf3, stop = long_sl_level)
strategy.close_all(when= ta.crossunder(wt1, wt2) and wt1 > 0, comment="Close All")
// Plot TP & SL
long_tp1_level = strategy.position_avg_price + percent(TP1)*syminfo.mintick
long_tp2_level = strategy.position_avg_price + percent(TP2)*syminfo.mintick
long_tp3_level = strategy.position_avg_price + percent(TP3)*syminfo.mintick
long_tp4_level = strategy.position_avg_price + percent(TP4)*syminfo.mintick
plot(strategy.position_size > 0 ? long_sl_level : na, color=color.red, style=plot.style_linebr, title="SL Long")
plot(strategy.position_size > 0 ? long_tp1_level : na, color=color.lime, style=plot.style_linebr, title="Long TP1%")
plot(strategy.position_size > 0 ? long_tp2_level : na, color=color.lime, style=plot.style_linebr, title="Long TP2%")
plot(strategy.position_size > 0 ? long_tp3_level : na, color=color.lime, style=plot.style_linebr, title="Long TP3%")
plot(strategy.position_size > 0 ? long_tp4_level : na, color=color.lime, style=plot.style_linebr, title="Long TP4%")
plot(strategy.position_size > 0 ? tpmtf1 : na, color=color.orange, style=plot.style_linebr, title="Long TP1Mtf", display = display.none)
plot(strategy.position_size > 0 ? tpmtf2 : na, color=color.orange, style=plot.style_linebr, title="Long TP2Mtf", display = display.none)
plot(strategy.position_size > 0 ? tpmtf3 : na, color=color.orange, style=plot.style_linebr, title="Long TP3Mtf", display = display.none)
//Label TP
if strategy.position_size > 0
var label labellongtp1 = na
label.delete(labellongtp1)
labellongtp1 := label.new(x=time + 120, y=long_tp1_level, text='\nTP1: ' + str.tostring(math.round(long_tp1_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labellongtp2 = na
label.delete(labellongtp2)
labellongtp2 := label.new(x=time + 120, y=long_tp2_level, text='\nTP2: ' + str.tostring(math.round(long_tp2_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labellongtp3 = na
label.delete(labellongtp3)
labellongtp3 := label.new(x=time + 120, y=long_tp3_level, text='\nTP3: ' + str.tostring(math.round(long_tp3_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)
var label labellongtp4 = na
label.delete(labellongtp4)
labellongtp4 := label.new(x=time + 120, y=long_tp4_level, text='\nTP4: ' + str.tostring(math.round(long_tp4_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)