この戦略の目的は,資産の短期下落傾向の逆転点を特定し,それらのポイントに固定金額を投資することです.これは,上昇傾向の開始後に比較的低い価格で固定ドルコスト平均 (DCA) を可能にします.
この戦略は月間時間枠で動作します.毎月240つの1時間バーがあり,トレンド逆転のタイミングを決定するために使用されます.
戦略は,EMA_CDのシグナルラインと,EMA_CDのシグナルラインの違いを計算する.シグナルラインを突破すると,短期ダウントレンドの終了を決定し,買い信号を誘発する.
購入信号の後,戦略は月の終わりにすべてのポジションを閉じる.その後,このプロセスは次の月に繰り返され,定期的な購入と保持が1ヶ月間固定されます.
短期的な下落の終わりに底を掘り出すことができ 固定された間隔でドルコスト平均を把握できます
この戦略の最大の利点は,範囲限定市場をフィルタリングし,トレンド逆転点でのみ購入でき,したがってドルコストを比較的良い価格で平均化することです.
また,逆転点を決定するためにEMAを使用することは,キャンドルスタイク逆転だけを見るよりもより安定して正確である.EMAは,エントリータイミングに影響する短期的な市場騒音を平滑化することができます.
最後に,毎月のストップロスは毎月の投資のパフォーマンスを固定し,毎月の最大損失を制限します.
この戦略の最大のリスクは,価格が購入後も下がり続け,月末にストップ損失につながるということです.これは通常,逆転の誤った識別によって引き起こされます.
EMAのパラメータを最適化して 識別を改善したり RSIのような他の指標を組み合わせて 逆転信号を確認したりできます
ストップ・ロスのレベルはまたリスクである. ストップ・ロスは短期間変動によって簡単に停止される. ストップ・ロスは幅が広いので損失を制限できない. 最適なパラメータは,異なるストップ・ロスのレベルをテストすることによって発見する必要がある.
この戦略は以下の分野において改善可能である.
EMA 期間を最適化して,逆転を特定するための最適なパラメータの組み合わせを見つけます.
逆転信号を確認するために RSI のような他のフィルターを追加します
ストップ・ロスの異なるレベルをテストして ストップ・ロスの予防を最大限にできる 最適なポイントを見つけます
ストップ・ロスの上にトライリング・ストップを追加して ストップレベルを価格に基づいて動的に調整することを検討します
この戦略に最も効果があるかを確認するために 日々や週ごとに異なる時間枠をテストします
この戦略の全体的な考え方は,短期のトレンド逆転と,月間逆転点でのドルコスト平均を特定するためにEMAを使用することで,シンプルで明確です.それは,不安定な市場を効果的にフィルタリングし,比較的低い価格で投資することができます.最適化スペースは主にパラメータチューニングとストップ損失技術にあります.全体的にこれは,さらなるテストと強化に値する固定資産配分のための優れた戦略コンセプトです.
/*backtest start: 2023-09-07 00:00:00 end: 2023-10-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BHD_Trade_Bot // @version=5 // strategy( // shorttitle = 'DCA After Downtrend', // title = 'DCA After Downtrend (by BHD_Trade_Bot)', // overlay = true, // calc_on_every_tick = true, // calc_on_order_fills = true, // use_bar_magnifier = true, // pyramiding = 100, // initial_capital = 0, // default_qty_type = strategy.cash, // default_qty_value = 1000, // commission_type = strategy.commission.percent, // commission_value = 0.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2017) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) window() => true // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 20) hist = emacd - emacd_signal // Count n candles after x long entries var int nPastCandles = 0 var int entryNumber = 0 nPastCandles := nPastCandles + 1 // ENTRY CONDITIONS // 8 hours per day => 240 hours per month entry_condition1 = nPastCandles > entryNumber * 240 // End of downtrend entry_condition2 = ta.crossover(emacd, emacd_signal) ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS and window() entryNumber := entryNumber + 1 entryId = 'Long ' + str.tostring(entryNumber) strategy.entry(entryId, strategy.long) // CLOSE CONDITIONS // Last bar CLOSE_CONDITIONS = barstate.islast if CLOSE_CONDITIONS strategy.close_all() // Draw plot(ema50, color=color.orange, linewidth=3) plot(ema200, color=entry_condition1 ? color.green : color.red, linewidth=3)