この戦略の目的は,資産の短期的な下落のトレンドの終点を識別し,その時点で一定額の固定投資を資産を購入することです.そうすれば,資産の反転が始まると,より低いコスト価格で固定投資をすることができます.
この戦略は月間時間枠で動作する.毎月240の1時間K線があり,トレンドの逆転のタイミングを判断する.
具体的には,この戦略は,EMAの速線とEMAの遅線の差値の計算によるEMAです._CDとEMA_CDの信号線は,快線で信号線を穿越すると,短期下落トレンドの終了を判断し,買い信号を発する.
購入シグナルを発信した後に,戦略は,その月の終わりに平定する. そして,次の月にこのプロセスを繰り返して,定期的に購入し,一ヶ月間保持する.
短期的な下落の終わりに,低吸入して,固定投注をすることが可能になる.
この戦略の最大の利点は,変動をフィルターして,トレンドの転換点でのみ買い,有利な価格で固定投資を行うことです.
さらに,EMAによるトレンドの逆転の判断は,単にK線逆転によって判断するよりも,より安定して正確である.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)