
이 전략의 이름은 DayLight Hunter 양방향 포지션 개시 무작위 중단 손실 이익 수량화 전략이다. 이 전략의 주요 아이디어는 Stochastic 지표를 사용하여 구매 및 판매 신호를 생성하고, SMA 평행선과 결합하여 필터링하여 양방향 포지션을 개시하고, 무작위 중단 손실 중지 포인트를 설정하여 이익을 얻습니다.
이 전략은 5 일 줄의 Stochastic 지표의 %K 라인과%D 라인을 교차하여 거래 신호를 생성한다. %K 라인이 아래에서 위로 %D 라인을 건너면 구매 신호를 생성한다. %K 라인이 위에서 아래로 %D 라인을 건너면 판매 신호를 생성한다. 가짜 신호를 필터링하기 위해 전략은 50 길이의 SMA 평균선을 도입했으며, 상장 가격이 SMA 하위점보다 낮을 때만 구매 신호를 생성하고, 상장 가격이 SMA 하위점보다 높을 때만 판매 신호를 생성한다.
구매 신호를 수신할 때, 전략은 고정된 수량으로 더 많은 위치를 열고; 판매 신호를 수신할 때, 단방 거래 모드 인 경우, 포지션 이전에 여러 번 다시 공명권을 열고; 위조 모드 인 경우, 공명권을 직접 추가하여 보호한다. 각 거래 단위에 대해, 전략은 무작위적인 중지 손실 지점을 설정한다. 구체적으로, 현재 가격에 따라 일정 비율의 수익을 중지 지점으로, 일정 비율의 손실을 중지 지점으로 설정한다. 이렇게 수익을 잠금 할 수 있으며 위험을 제어 할 수 있습니다.
이 전략의 가장 큰 장점은 Stochastic 지표의 신호와 SMA 파동을 이용한 양방향 거래가 낮은 잘못된 보고율을 달성한다는 것입니다. 이것은 이익을 얻는 데 더 큰 기회를 제공합니다. 또한, 전략의 무작위 중지 중지 손실 메커니즘은 수익이 발생 한 후 신속하게 중지하여 수익이 완전히 0으로 돌아가는 것을 방지 할 수 있습니다.
이 전략의 주요 위험은 스토카스틱 지표가 가짜 신호를 만들어 불필요한 손실을 초래할 수 있다는 것입니다. 또한, 무작위로 설정된 스톱 스톱 손실이 너무 급진적으로 발생하여 스톱 스톱 손실이 너무 일찍 또는 너무 늦게 발생하여 수익에 영향을 미칠 수 있습니다. 마지막으로, 헤지 트레이딩에서 시간 내에 중단되지 않는 손실은 손실을 증가시킬 수 있습니다.
위험을 줄이기 위해, SMA 평균선의 파라미터를 최적화하고, 더 많은 가짜 신호를 필터링하는 것이 좋습니다. 또한, 다른 지표와 결합하여 시장 추세를 판단하고, 역전 거래를 피하는 것을 고려할 수 있습니다. 마지막으로, 합리적으로 스톱 스레인지를 설정하고, 헤지 유닛에 대해 독립적인 스톱 스레인지를 설정하여 위험을 제어하십시오.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
스토카스틱 지표의 변수를 최적화하여 잘못된 신호를 줄이기 위해 최적의 변수 조합을 찾습니다.
다른 기술 지표를 최적화하거나 추가하여 스토카스틱 지표 판단 트렌드를 보조한다. 예를 들어 MACD, KD 등이다.
기계 학습과 같은 방법을 사용하여 다양한 파라미터 아래의 Stochastic 신호의 정확도, 승률과 같은 지표를 연구하여 최적의 파라미터 공간을 찾습니다.
무작위 중지 중지 손실 알고리즘을 최적화하여 더 지능적이고 동적으로 만듭니다. 예를 들어, 모바일 중지, 잔액 관리와 같은 아이디어를 결합합니다.
포지션 컨트롤 모듈을 추가하여 전략 성과, 시장 환경 등의 요인에 따라 포지션을 동적으로 조정할 수 있습니다.
다이 라이트 헌터 쌍방향 포지션 개시 무작위 상쇄 수익률 수치화 전략은 스토카스틱 지표의 교차 신호, SMA 파동 원리, 쌍방향 포지션 개시 사고방식 및 무작위 상쇄 상쇄 방법을 종합적으로 사용합니다. 그것은 신호의 상대적 정확성, 쌍방향 거래 기회의 많은, 상쇄 상쇄 손실의 유연성 등의 장점을 가지고 있으며, 위험 또한 통제 가능한 범위 내에 있습니다. 추가로 최적화된 매개 변수 설정, 지표 포지션 및 위험 제어 모듈을 통해 이 전략은 더 안정적이고 뛰어난 성능을 얻을 수 있습니다.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
var int slippage = 0
strategy("X48 - DayLight Hunter | Strategy | V.01.01", overlay=true, calc_on_order_fills = true, initial_capital = 50,default_qty_type = strategy.fixed, default_qty_value = 1, commission_type = strategy.commission.percent, commission_value = 0, currency = currency.USD, slippage = 0)
var bool hedge_mode = false
var int sto_buy = 0
var int sto_sell = 0
Trade_Mode = input.string(defval = "Hedge", title = "⚖️ Mode For Trade [Oneway / Hedge]", options = ["Oneway", "Hedge"], group = "Mode Trade", tooltip = "Oneway = Switching Position Type With Signal\nHedge Mode = Not Switching Position Type Unitl TP or SL")
Risk_Mode = input.string(defval = "Low Risk", title = "⚖️ Risk Signal Mode [Low / Medium / High]", options = ["Low Risk", "Medium Risk", "High Risk"], group = "Mode Trade", tooltip = "[[Signal Form Stochastic]]\nLow Risk is >= 80 and <= 20\nMedium Risk is >= 70 and <= 30\nHigh Risk is >= 50 and <=50")
if Trade_Mode == "Oneway"
hedge_mode := false
else
hedge_mode := true
if Risk_Mode == "Low Risk"
sto_buy := 20
sto_sell := 80
else if Risk_Mode == "Medium Risk"
sto_buy := 30
sto_sell := 70
else if Risk_Mode == "High Risk"
sto_buy := 50
sto_sell := 50
periodK = input.int(15, title="%K Length", minval=1, group = "Stochastic Setting", inline = "Sto0")
smoothK = input.int(3, title="%K Smoothing", minval=1, group = "Stochastic Setting", inline = "Sto0")
periodD = input.int(3, title="%D Smoothing", minval=1, group = "Stochastic Setting", inline = "Sto0")
SMA_Mode = input.bool(defval = true, title = "SMA High and Low Filter Mode", group = "SMA Filter Mode", tooltip = "Sell Signal With Open >= SMA High\nBuy Signal With Close <= SMA Low")
SMA_High = input.int(defval = 50, title = "SMA High", group = "SMA Filter Mode", inline = "SMA1")
SMA_Low = input.int(defval = 50, title = "SMA Low", group = "SMA Filter Mode", inline = "SMA1")
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
high_line = ta.sma(high, SMA_High)
low_line = ta.sma(low, SMA_Low)
plot(SMA_Mode ? high_line : na, "H-Line", color = color.yellow, linewidth = 2)
plot(SMA_Mode ? low_line : na, "L-Line", color = color.blue, linewidth = 2)
entrybuyprice = strategy.position_avg_price
var bool longcondition = na
var bool shortcondition = na
if SMA_Mode == true
longcondition := ta.crossover(k,d) and d <= sto_buy and close < low_line and open < low_line// or ta.crossover(k, 20)// and close <= low_line
shortcondition := ta.crossunder(k,d) and d >= sto_sell and close > high_line and open > high_line// or ta.crossunder(k, 80)// and close >= high_line
else
longcondition := ta.crossover(k,d) and d <= sto_buy
shortcondition := ta.crossunder(k,d) and d >= sto_sell
//longcondition_double = ta.crossover(d,20) and close < low_line// and strategy.position_size > 0
//shortcondition_double = ta.crossunder(d,80) and close > high_line// and strategy.position_size < 0
//=============== TAKE PROFIT and STOP LOSS by % =================
tpsl(percent) =>
strategy.position_avg_price * percent / 100 / syminfo.mintick
GR4 = "=====🆘🆘🆘 TAKE PROFIT & STOP LOSS BY [%] 🆘🆘🆘====="
mode= input.bool(title="🆘 Take Profit & Stop Loss By Percent (%)", defval=true, group=GR4, tooltip = "Take Profit & Stop Loss by % Change\n0 = Disable")
tp_l = tpsl(input.float(0, title='🆘 TP [LONG] % >> [Oneway Only]', group=GR4, tooltip = "0 = Disable"))
tp_s = tpsl(input.float(0, title='🆘 TP [SHORT] % >> [Oneway Only]', group=GR4, tooltip = "0 = Disable"))
sl = tpsl(input.float(0, title='🆘 Stop Loss %', group=GR4, tooltip = "0 = Disable"))
tp_pnl = input.float(defval = 1, title = "🆘 TP by PNL $ eg. (0.1 = 0.1$)", group = GR4)
spread_size = input.float(defval = 0.350, title = "🆘 Spread Point Size(Eg. 35 Point or 350 Point From Your Broker Digits)", tooltip = "Spread Point Form Your Broker \nEg. 1920.124 - 1920.135 or 1920.12 - 1920.13\nPlease Check From Your Broker", group = GR4)
GR5 = "===💮💮💮 Hedge Mode 💮💮💮==="
//hedge_mode = input.bool(defval = true, title = "⚖️ Hedge Mode", group = GR5)
hedge_point = input.int(defval = 500, title = "💯 Hedge Point Range", group = GR5, tooltip = "After Entry Last Position And Current Price More Than Point Range Are Open New Hedge Position")
hedge_gale = input.float(defval = 2.0, title = "✳️ Martingale For Hedge Multiply [default = 2]", tooltip = "Martingale For Multiply Hedge Order", group = GR5)
hedge_point_size = hedge_point/100
calcStopLossPrice(OffsetPts) =>
if strategy.position_size > 0
strategy.position_avg_price - OffsetPts * syminfo.mintick
else if strategy.position_size < 0
strategy.position_avg_price + OffsetPts * syminfo.mintick
else
na
calcStopLossL_AlertPrice(OffsetPts) =>
strategy.position_avg_price - OffsetPts * syminfo.mintick
calcStopLossS_AlertPrice(OffsetPts) =>
strategy.position_avg_price + OffsetPts * syminfo.mintick
calcTakeProfitPrice(OffsetPts) =>
if strategy.position_size > 0
strategy.position_avg_price + OffsetPts * syminfo.mintick
else if strategy.position_size < 0
strategy.position_avg_price - OffsetPts * syminfo.mintick
else
na
calcTakeProfitL_AlertPrice(OffsetPts) =>
strategy.position_avg_price + OffsetPts * syminfo.mintick
calcTakeProfitS_AlertPrice(OffsetPts) =>
strategy.position_avg_price - OffsetPts * syminfo.mintick
var stoploss = 0.
var stoploss_l = 0.
var stoploss_s = 0.
var takeprofit = 0.
var takeprofit_l = 0.
var takeprofit_s = 0.
var takeprofit_ll = 0.
var takeprofit_ss = 0.
if mode == true
if (strategy.position_size > 0)
if sl > 0
stoploss := calcStopLossPrice(sl)
stoploss_l := stoploss
else if sl <= 0
stoploss := na
if tp_l > 0
takeprofit := tp_l
takeprofit_ll := close + ((close/100)*tp_l)
//takeprofit_s := na
else if tp_l <= 0
takeprofit := na
if (strategy.position_size < 0)
if sl > 0
stoploss := calcStopLossPrice(sl)
stoploss_s := stoploss
else if sl <= 0
stoploss := na
if tp_s > 0
takeprofit := tp_s
takeprofit_ss := close - ((close/100)*tp_s)
//takeprofit_l := na
else if tp_s <= 0
takeprofit := na
else if strategy.position_size == 0
stoploss := na
takeprofit := na
//takeprofit_l := calcTakeProfitL_AlertPrice(tp_l)
//takeprofit_s := calcTakeProfitS_AlertPrice(tp_s)
//stoploss_l := calcStopLossL_AlertPrice(sl)
//stoploss_s := calcStopLossS_AlertPrice(sl)
//////////// INPUT BACKTEST RANGE ////////////////////////////////////////////////////
var string BTR1 = '════════⌚⌚ INPUT BACKTEST TIME RANGE ⌚⌚════════'
i_startTime = input(defval = timestamp("01 Jan 1945 00:00 +0000"), title = "Start", inline="timestart", group=BTR1, tooltip = 'Start Backtest YYYY/MM/DD')
i_endTime = input(defval = timestamp("01 Jan 2074 23:59 +0000"), title = "End", inline="timeend", group=BTR1, tooltip = 'End Backtest YYYY/MM/DD')
//////////////// Strategy Alert For X4815162342 BOT //////////////////////
Text_Alert_Future = '{{strategy.order.alert_message}}'
copy_Fu = input( defval= Text_Alert_Future , title="Alert Message for BOT", inline = '00' ,group = '═ Bot Setting ═ \n >> If You Dont Use Bot Just Pass It' ,tooltip = 'Alert For X48-BOT > Copy and Paste To Alert Function')
TimeFrame_input = input(defval= 'Input Your TimeFrame [1m, 15m, 1h, 4h, 1d ,1w]' , title="TimeFrame Text Alert", inline = '00' ,group = '═ Bot Setting ═ \n >> If You Dont Use Bot Just Pass It')
string Alert_EntryL = '🪙 Asset : {{ticker}} \n💱 Status : {{strategy.market_position}}\n🕛 TimeFrame : '+str.tostring(TimeFrame_input)+'\n💸 Price : {{strategy.order.price}} $\n✅ TP : '+str.tostring(takeprofit_ll)+' $\n❌ SL : '+str.tostring(stoploss_l)+' $\n⏰ Time : {{timenow}}'
string Alert_EntryS = '🪙 Asset : {{ticker}} \n💱 Status : {{strategy.market_position}}\n🕛 TimeFrame : '+str.tostring(TimeFrame_input)+'\n💸 Price : {{strategy.order.price}} $\n✅ TP : '+str.tostring(takeprofit_ss)+' $\n❌ SL : '+str.tostring(stoploss_s)+' $\n⏰ Time : {{timenow}}'
string Alert_TPSL = '🪙 Asset : {{ticker}}\n🕛 TimeFrame : '+str.tostring(TimeFrame_input)+'\n💹 {{strategy.order.comment}}\n💸 Price : {{strategy.order.price}} $\n⏰ Time : {{timenow}}'
if true
if longcondition
strategy.entry("Long", strategy.long, comment = "🌙", alert_message = Alert_EntryL)
//if longcondition_double
// //strategy.cancel_all()
// strategy.entry("Long2", strategy.long, comment = "🌙🌙")
// //strategy.exit("Exit",'Long', qty_percent = 100 , profit = takeprofit, stop = stoploss, comment_profit = "TP💚L", comment_loss = "SL💚L")
if shortcondition
strategy.entry("Short", strategy.short, comment = "👻", alert_message = Alert_EntryS)
//strategy.exit("Exit",'Short', qty_percent = 100, profit = takeprofit, stop = stoploss, comment_profit = "TP❤️️S", comment_loss = "SL❤️️S")
//if shortcondition_double
// //strategy.cancel_all()
// strategy.entry("Short2", strategy.short, comment = "👻👻")
if strategy.position_size > 0 and strategy.opentrades >= 1 and hedge_mode == true
entrypricel = strategy.opentrades.entry_price(strategy.opentrades - 1)
callpointsize = entrypricel - close
lastsize = strategy.position_size
if callpointsize >= hedge_point_size and longcondition
strategy.order("Long2", strategy.long, qty = lastsize * hedge_gale, comment = "🌙⌛", alert_message = Alert_EntryL)
else if strategy.position_size < 0 and strategy.opentrades >= 1 and hedge_mode == true
entryprices = strategy.opentrades.entry_price(strategy.opentrades - 1)
callpointsize = (entryprices - close)* -1
lastsize = (strategy.position_size) * -1
if callpointsize >= hedge_point_size and shortcondition
strategy.order("Short2", strategy.short, qty = lastsize * hedge_gale, comment = "👻⌛", alert_message = Alert_EntryS)
last_price_l = (strategy.opentrades.entry_price(strategy.opentrades - 1) + (strategy.opentrades.entry_price(strategy.opentrades - 1)/100) * takeprofit) + spread_size
last_price_s = (strategy.opentrades.entry_price(strategy.opentrades - 1) - (strategy.opentrades.entry_price(strategy.opentrades - 1)/100) * takeprofit) - spread_size
current_price = request.security(syminfo.tickerid, "1", close)
current_pricel = request.security(syminfo.tickerid, "1", close) + spread_size
current_prices = request.security(syminfo.tickerid, "1", close) - spread_size
//if mode == true
if strategy.position_size > 0 and strategy.openprofit >= tp_pnl and mode == true and hedge_mode == true
lastsize = strategy.position_size
lastprofitorder = strategy.openprofit
//if lastprofitorder >= 0.07
//strategy.close('Long', qty = lastsize, comment = "TP💚L", alert_message = Alert_TPSL, immediately = true)
strategy.cancel_all()
strategy.close_all(comment = "TP💚PNL", alert_message = Alert_TPSL, immediately = true)
//strategy.close_all(comment = "TP💚LH", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Long2', qty_percent = 100, profit = last_price_l, stop = stoploss, comment_profit = "TP💚LH", comment_loss = "SL💚LH", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Long', qty_percent = 100, profit = last_price_l, stop = stoploss, comment_profit = "TP💚L", comment_loss = "SL💚L", alert_message = Alert_TPSL)
else if strategy.position_size > 0 and strategy.openprofit < tp_pnl and mode == true and hedge_mode == true
strategy.exit("Exit",'Long', qty_percent = 100, stop = stoploss, comment_loss = "SL💚%L", alert_message = Alert_TPSL)
if strategy.position_size > 0 and mode == true and hedge_mode == false
//strategy.close_all(comment = "TP💚LH", alert_message = Alert_TPSL, immediately = true)
strategy.exit("Exit",'Long', qty_percent = 100, profit = takeprofit, stop = stoploss, comment_profit = "TP💚%L", comment_loss = "SL💚%L", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Long', qty_percent = 100, profit = takeprofit, stop = stoploss, comment_profit = "TP💚LL", comment_loss = "SL💚L", alert_message = Alert_TPSL)
//else if strategy.position_size > 0 and strategy.opentrades > 1
// lastsize = strategy.position_size
// lastprofitorder = strategy.openprofit
// if lastprofitorder >= 0.07
// strategy.close_all(comment = "TP💚LL", alert_message = Alert_TPSL)
if strategy.position_size < 0 and strategy.openprofit >= tp_pnl and mode == true and hedge_mode == true
lastsize = (strategy.position_size) * -1
lastprofitorder = strategy.openprofit
//if lastprofitorder >= 0.07
//strategy.close('Short', qty = lastsize, comment = "TP❤️️S", alert_message = Alert_TPSL, immediately = true)
strategy.cancel_all()
strategy.close_all(comment = "TP❤️️PNL", alert_message = Alert_TPSL, immediately = true)
//strategy.close_all(comment = "TP❤️️SH", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Short2', qty_percent = 100, profit = last_price_s, stop = stoploss, comment_profit = "TP❤️️SH", comment_loss = "SL❤️️SH", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Short', qty_percent = 100, profit = last_price_s, stop = stoploss, comment_profit = "TP❤️️S", comment_loss = "SL❤️️S", alert_message = Alert_TPSL)
else if strategy.position_size < 0 and strategy.openprofit < tp_pnl and mode == true and hedge_mode == true
strategy.exit("Exit",'Short', qty_percent = 100, stop = stoploss, comment_loss = "SL❤️️%S", alert_message = Alert_TPSL)
if strategy.position_size < 0 and mode == true and hedge_mode == false
//strategy.close_all(comment = "TP❤️️SH", alert_message = Alert_TPSL, immediately = true)
strategy.exit("Exit",'Short', qty_percent = 100, profit = takeprofit, stop = stoploss, comment_profit = "TP❤️️%S", comment_loss = "SL❤️️%S", alert_message = Alert_TPSL)
//strategy.exit("Exit",'Short', qty_percent = 100, profit = takeprofit, stop = stoploss, comment_profit = "TP❤️️S", comment_loss = "SL❤️️S", alert_message = Alert_TPSL)
//else if strategy.position_size < 0 and strategy.opentrades > 1
// lastsize = (strategy.position_size) * -1
// lastprofitorder = strategy.openprofit
// if lastprofitorder >= 0.07
// strategy.close_all(comment = "TP❤️️SS", alert_message = Alert_TPSL)
//===================== เรียกใช้ library =========================
import X4815162342/X48_LibaryStrategyStatus/2 as fuLi
//แสดงผล Backtest
show_Net = input.bool(true,'Monitor Profit&Loss', inline = 'Lnet', group = '= PNL MONITOR SETTING =')
position_ = input.string('bottom_center','Position', options = ['top_right','middle_right','bottom_right','top_center','middle_center','bottom_center','middle_left','bottom_left'] , inline = 'Lnet')
size_i = input.string('auto','size', options = ['auto','tiny','small','normal'] , inline = 'Lnet')
color_Net = input.color(color.blue,"" , inline = 'Lnet')
// fuLi.NetProfit_Show(show_Net , position_ , size_i, color_Net )