この戦略は,移動平均とハル曲線を組み合わせて,市場の傾向の方向性を特定し,傾向を追跡します.
主な論理は
マッキンリー・ダイナミック・MAは,全体的なトレンド方向を判断する
シグナル検証のためのオプションの確認指標
ストップ・ロスの原則と収益の原則によるリスク管理
ハルフ曲線が逆転すると ポジションを閉じる
戦略は,個々の主観的な影響を最小限に抑え,傾向を機械的に体系化することを目的としています.
MAは全体的な方向性を判断し,柔軟な確認
ルールに基づくリスク管理は 間違いを最小限に抑える
パラメータ調節とフィルターは最適化が必要です
トレンドの正確さは不確実性がある
船体曲線が遅い信号に敏感である
この戦略は,市場リズムに合わせて,トレンドを伴う取引を体系化することを目指している.しかし,パラメータの最適化と指標の制限は安定性のために注意を要する.
/*backtest start: 2023-08-14 00:00:00 end: 2023-09-13 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Milleman //@version=4 strategy("Millebot", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.04) // Risk management settings Spacer2 = input(false, title="=== Risk management settings ===") Risk = input(1.0, title="% Risk")/100 RRR = input(2,title="Risk Reward Ratio",step=0.1,minval=0,maxval=20) SL = input(5,title="StopLoss %",step=0.25)/100 // Baseline : McGinley Dynamic Spacer3 = input(false, title="=== Baseline - Switch L/S ===") McG_Source = input(close, title="McGinley source") McG_length = input(50, title=" McG length", minval=1) McG_LS_Switch = 0.0 McG_LS_Switch := na(McG_LS_Switch[1]) ? ema(McG_Source, McG_length) : McG_LS_Switch[1] + (McG_Source - McG_LS_Switch[1]) / (McG_length * pow(McG_Source/McG_LS_Switch[1], 4)) // Confirmation indicator Spacer4 = input(false, title="=== Confirmation indicator ===") C1_Act = input(false, title=" Confirmation indicator Activation") C1_src = input(ohlc4, title="Source") C1_len = input(5,title="Length") C1 = sma(C1_src,C1_len) // Entry indicator : Hull Moving Average Spacer5 = input(false, title="=== Entry indicator configuration ===") src = input(ohlc4, title="Source") length = input(50,title="Length HMA") HMA = ema(wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))),1) //VARIABLES MANAGEMENT TriggerPrice = 0.0, TriggerPrice := TriggerPrice[1] TriggerxATR = 0.0, TriggerxATR := TriggerxATR[1] SLPrice = 0.0, SLPrice := SLPrice[1], TPPrice = 0.0, TPPrice := TPPrice[1] isLong = false, isLong := isLong[1], isShort = false, isShort := isShort[1] //LOGIC GoLong = crossover(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] > 1) and (not C1_Act or C1>C1[1]) GoShort = crossunder(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] < 1) and (not C1_Act or C1<C1[1]) //FRAMEWORK //Long if GoLong and not GoLong[1] isLong := true, TriggerPrice := close TPPrice := TriggerPrice * (1 + (SL * RRR)) SLPrice := TriggerPrice * (1-SL) Entry_Contracts = strategy.equity * Risk / ((TriggerPrice-SLPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts strategy.entry("Long", strategy.long, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts) strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice, qty_percent = 100) if isLong and crossunder(HMA[0],HMA[1]) strategy.close_all(comment="TrendChange") isLong := false //Short if GoShort and not GoShort[1] isShort := true, TriggerPrice := close TPPrice := TriggerPrice * (1 - (SL * RRR)) SLPrice := TriggerPrice * (1 + SL) Entry_Contracts = strategy.equity * Risk / ((SLPrice-TriggerPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts strategy.entry("Short", strategy.short, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts) strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)//, qty_percent = 100) if isShort and crossover(HMA[0],HMA[1]) strategy.close_all(comment="TrendChange") isShort := false //VISUALISATION plot(McG_LS_Switch,color=color.blue,title="Baseline") plot(C1_Act?C1:na,color=color.white,title="confirmation Indicator") plot(HMA, color=(HMA[0]>HMA[1]? color.green : color.red), linewidth=4, transp=40, title="Entry Indicator") plot(isLong or isShort ? TPPrice : na, title="TakeProfit", color=color.green, style=plot.style_linebr) plot(isLong or isShort ? SLPrice : na, title="StopLoss", color=color.red, style=plot.style_linebr) bgcolor(isLong[1] and cross(low,SLPrice) and low[1] > SLPrice ? color.yellow : na, transp=75, title="SL Long") bgcolor(isShort[1] and cross(high,SLPrice) and high[1] < SLPrice ? color.yellow : na, transp=75, title="SL Short")