
この戦略は,単純移動平均と加重移動平均の交差をベースに取引信号を生成し,ストップとストップを組み合わせてポジションを管理する. この戦略は,動的要素 ((移動平均の交差) と静的要素 ((固定ストップとストップの比率) を融合し,動的静止の交配の効果を達成する.
核心論理は,2つの異なる周期の移動平均を計算することであり,一つは9日間のシンプル移動平均であり,もう一つは21日間の重力移動平均である. 短い周期の9日間のシンプル移動平均の上に長い周期の21日間の重力移動平均を横断すると,買入シグナルが生成され,短い周期のラインの下に長い周期のラインを横断すると,売出シグナルが生成される.
信号を受信すると,設定されたストップ・ストップ比率に従って注文する.例えば,ストップ比率が5%に設定された場合,ストップ価格は入場価格の95%に設定される.ストップ比率が5%であった場合,ストップ価格は入場価格の105%に設定される.このように動的要素 ((移動平均線交差が入場と出場を決定する時間) と静的要素 ((固定ストップ・ストップ比率) の融合を実現する.
この戦略は,動的技術指標と静的戦略パラメータを組み合わせ,動的システムの優位性を兼ねている.技術指標は,動的に市場の特徴を捉え,トレンドを把握するのに役立ちます.パラメータ設定は,安定したリスクと報酬の制御を提供し,ポジション管理のランダム性を減らすのに役立ちます.
純動的システムと比較して,この戦略はポジション管理においてより堅牢であり,非合理的な決定の影響を減らすことができる.純静的システムと比較して,この戦略の入場選択はより柔軟であり,市場の変化に適応することができる.したがって,この戦略は全体的に安定性と収益性も優れている.
この戦略のリスクは,主に2つの側面からくる。一は,移動平均が誤信号を生じする可能性。市場が震動整理中であるとき,移動平均は頻繁に交差し,戦略を閉じ込めること。二は,固定ストップ・ロッド・ストップが特殊な市場状況に適応できないリスク。突発的な事件が市場の大幅な波動を引き起こすとき,予め設定されたストップ・ロッド・ポジションは突破され,リスクを効果的に制御することができない。
対策”は,重要な時間ノードを回避し,誤信号の確率を減らす. 対策2は,市場の変動率と特殊なイベントに基づいて自主的な止損アルゴリズムを起動し,止損を市場の調整に合わせる.
この戦略は以下の点で最適化できます.
異なるパラメータの組み合わせをテストし,最適なパラメータを探します.
フィルタリング条件を増やして,無効信号を回避する.
市場との関わり合いのための自己適応のストップ・ローズ・アルゴリズムを適用する.
市場を動揺させないために,他の指標と組み合わせて,強弱なトレンドを判断する.
機械学習によるパラメータの自動最適化.
異なるパラメータをテストし,フィルタリング条件を増やし,ストップ・ストップを改善し,トレンド判断などの方法により,戦略の安定性と収益率をさらに向上させることができます.
この戦略は,動的指標と静的パラメータを組み合わせて,柔軟性と安定性を兼ね備えています. 純粋に動的および純粋に静的戦略と比較して,この戦略の全体的なパフォーマンスは優れています. もちろん,パラメータ調整,フィルター条件,自律的な止損,機械学習などの方法により,戦略の効果を優化することができる最適化可能なスペースがあります.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Définition des périodes pour les moyennes mobiles
wmaLength = input.int(9, title="WMA Length")
mmaLength = input.int(21, title="MMA Length")
// Paramètres de Stop Loss et Take Profit en pourcentage
stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100
takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100
// Calcul des moyennes mobiles
wmaValue = ta.wma(close, wmaLength)
mmaValue = ta.sma(close, mmaLength)
// Conditions pour les signaux d'achat et de vente
buySignal = ta.crossover(wmaValue, mmaValue)
sellSignal = ta.crossunder(wmaValue, mmaValue)
// Génération des ordres en fonction des signaux
if buySignal
strategy.entry("Buy", strategy.long)
strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage))
if sellSignal
strategy.entry("Sell", strategy.short)
strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage))
// Affichage des moyennes mobiles sur le graphique
plot(wmaValue, color=color.blue, title="WMA")
plot(mmaValue, color=color.red, title="MMA")
// Affichage des signaux sur le graphique pour référence
plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")