この戦略は,単純な移動平均と重度の移動平均のクロスオーバーに基づいて取引信号を生成し,ストップ損失と利益を引き取り合ってポジションを管理する.この戦略は,動的要素 (移動平均クロスオーバー) と静的要素 (固定ストップ損失と利益を引き取り比) を統合し,動的要素と静的要素の交織効果を達成する.
基本論理は,異なる期間の移動平均を2つ計算することです. 1つは9日間のシンプル移動平均,もう1つは21日間の加重移動平均です. 短期間の9日間のSMAが長期間の21日間のWMAを越えると,購入信号が生成されます. 短期間の線が長期間の線を下に越えると,販売信号が生成されます.
シグナルを受け取った後,設定されたストップ損失と収益率に従ってオーダーが配置される.例えば,ストップ損失比が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")