この戦略は,主に移動平均の黄金十字と死十字,および移動平均のキャンドルスタイク突破を使用して,長期と短期間の決定を行う.短期間移動平均が長期間移動平均を横切ると長期間移動平均が横切ると短期間移動平均が長期間移動平均を下回ると短期間になります.キャンドルスタイク閉値が移動平均を突破するとエントリー信号としても使用されます.
異なる期間の EMA1 と EMA2 の 2 つの移動平均を計算します. EMA1 は短い期間の EMA2 は長い期間の EMA2 です.
EMA1が EMA2を横切るか判断します.もしそうなら,ロングします.
EMA1が EMA2を下回るかどうかを判断します.もしそうなら,ショートします.
閉じる価格がEMA1を突破するかどうかを入力信号として決定する.
出口メカニズム:固定ストップ損失を設定するか,ドンチアンチャネルを使用してストップ損失を設定します.
主な用途:
シンプルな論理で 分かりやすく実行できます
移動平均値の傾向を追跡する特性を有効に活用する.
カンデスタイク閉値突破を組み合わせることで 偽の突破を避けるのに役立ちます
異なる移動平均の組み合わせを柔軟に使用し,異なる期間に適応できます.
ストップ損失メカニズムはリスクを制御します
市場の整合中に頻繁に黄金十字と死十字が起こると 混乱が起こります
固定ストップ・ロスは,市場の変化に基づいて調整するには,あまりにも固いかもしれません.
移動平均値は遅れており,ターニングポイントで逆転信号を見逃す可能性があります.
誤った突破をフィルタリングするために必要な移動平均傾斜の正確な判断です
パラメータの選択は注意が必要で,不適切な頻度や遅延は戦略のパフォーマンスに影響を与える可能性があります.
MACDのゼロラインクロスオーバーは,トレンドとフィルター統合を決定するのに役立ちます.
固定ストップ損失を改善するために動的ストップ損失ラインのためにドンチアンチャネルを追加します.
市場統合中に非効率な取引を避けるため,強い傾向や弱い傾向を判断するためにボリンジャー帯を追加します.
移動平均パラメータの組み合わせを最適化し,異なる期間の戦略の実際のパフォーマンスをテストします.
遅延を減らすために固定移動平均を追加することを検討します
この戦略の全体的な論理は単純で明確で,クラシックな移動平均クロスオーバー取引技術を活用し,誤ったシグナルを効果的にフィルターするためにエントリーのためのキャンドルスタイクブレイクを組み合わせます.最適化スペースには,トレンド強度,ダイナミックストップなどの他の指標の使用が含まれます.一般的に,移動平均に基づいたトレンドフォロー戦略はクラシックで直感的で,最適化のための貴重な探索スペースがあります.
/*backtest start: 2023-09-01 00:00:00 end: 2023-10-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD) //Candle body resistance Channel-----------------------------// len = 34 src = input(close, title="Candle body resistance Channel") out = sma(src, len) last8h = highest(close, 13) lastl8 = lowest(close, 13) bearish = cross(close,out) == 1 and falling(close, 1) bullish = cross(close,out) == 1 and rising(close, 1) channel2=input(false, title="Bar Channel On/Off") ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0) ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0) //fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel") //-----------------Support and Resistance RST = input(title='Support / Resistance length:', defval=10) RSTT = valuewhen(high >= highest(high, RST), high, 0) RSTB = valuewhen(low <= lowest(low, RST), low, 0) RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0) RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0) //--------------------Trend colour ema------------------------------------------------// src0 = close, len0 = input(13, minval=1, title="EMA 1") ema0 = ema(src0, len0) direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0 plot_color = direction > 0 ? lime: direction < 0 ? red : na plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color) //-------------------- ema 2------------------------------------------------// src02 = close, len02 = input(21, minval=1, title="EMA 2") ema02 = ema(src02, len02) direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0 plot_color2 = direction2 > 0 ? lime: direction2 < 0 ? red : na plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2) //=============Hull MA// show_hma = input(false, title="Display Hull MA Set:") hma_src = input(close, title="Hull MA's Source:") hma_base_length = input(8, minval=1, title="Hull MA's Base Length:") hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:") hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))) plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA") //============ signal Generator ==================================// period = input('720') ch1 = request.security(syminfo.tickerid, period, open) ch2 = request.security(syminfo.tickerid, period, close) longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open)) if (longCondition) strategy.entry("BUY", strategy.long) shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open)) if (shortCondition) strategy.entry("SELL", strategy.short) ///////////////////////////////////////////////////////////////////////////////////////////