定期的な投資に基づくゴールデントレンド追跡戦略

作者: リン・ハーンチャオチャン開催日:2023年10月31日15時09分22秒
タグ:

img

概要

この戦略は,市場傾向の方向性を決定するために移動平均モデルを使用します.上昇傾向が特定された場合,それは定期的に固定金額のロングポジションを開いて,市場の上昇傾向を追跡します.

戦略の論理

この戦略は主に以下の技術的原則に基づいています.

  1. 市場傾向の方向性を決定するためにEMAラインを使用します.速いEMAラインがスローEMAラインを横切ると,上昇傾向と判断され,ロングポジションに入る準備をします.

  2. MACD インディケーターを組み合わせてエントリータイミングを決定します.MACD が正から負に変わると,購買力が弱くなり始めることを示します.それでは,ロングポジションに入る時間です.

  3. 入場額は毎月1回だけ設定できます.

  4. バックテスト期間を制限するために開始日と終了日を設定します. バックテストが終了すると,戦略はすべてのポジションを閉じます.

戦略は,まず,高速EMAラインと遅いEMAラインを計算し,それらの間の黄金のクロスを検出し,市場のトレンドを決定します.同時に,特定のエントリーポイントを決定するためにMACD指標を計算します.両方の基準を満たすと,ロング信号が生成されます.月1回だけエントリーするルールに従って,実際のエントリーオーダーが決定されます.各エントリの資本額は事前に設定できます.バックテストが終了すると,戦略はすべてのポジションを積極的に閉鎖します.

利点

これはシンプルで直接的な傾向であり,次の利点があります.

  1. EMA線を用いて主要トレンドを決定することは単純で実用的です.EMAは価格変動に平滑効果を持ち,市場の騒音を効果的にフィルタリングすることができます.

  2. MACDインジケーターは 購買力が低下し始めた時の転換点を 比較的正確に特定し,エントリをより安全にします

  3. 上昇傾向を追求することを 制限することで 高い値を追求し 牛市での上昇傾向を 阻止することができます

  4. 毎月入金額をカスタマイズすることは,ポジションのサイズに柔軟性を与えます.

  5. バックテストは,スタート日と終了日を設定することで戦略のパフォーマンスを評価するために使用できます.

  6. バックテストが終わったら 自動的にすべてのポジションを閉じるので 余ったポジションが不快になります

リスクと緩和策

この戦略にはいくつかの潜在的なリスクがあります.

  1. 移動平均値によるトレンド決定は,一時的な引き下がりの際に機会を逃すか,トレンド逆転にゆっくり反応する可能性があります. 期間が短縮されるか,より多くの指標を追加することができます.

  2. 月1回だけエントリーすると より良いエントリー機会を逃す可能性があります. 最近の高値を突破するときに頻度を緩めたり,別のエントリーを追加することを検討してください.

  3. カーブフィッティングの危険性がある.より多くのパラメータ調整スペースを許可し,市場や時間帯にわたって強度をテストする必要があります.

  4. 勢いを追求し,買い過ぎするリスクがある.月額入場額は,過剰なポジションを避けるために制御されるべきである.

増進 の 機会

この戦略に従う定期的な投資傾向は,次の側面からさらに拡大し強化することができます.

  1. 停止損失ロジックを追加して,下落逆転パターンが出現したときに積極的に損失を削減します.

  2. MACDヒストグラムが上昇傾向の差を示したときに別の買い物を追加することを検討します.

  3. 今月の新高と前月の新高を比較して 勢力の強さを評価します

  4. ポジションサイズロジックを追加します.月額エントリ金額は固定値ではなくパーセントに基づいて適応できます.

  5. 異なるMA組み合わせとMACDパラメータの影響を評価し,最適なパラメータセットを見つけます.

  6. 新しい高値に達した後,一定の距離で価格を追うストップロスを追加し,利益が実行できるようにします.

概要

この戦略は,定期的な投資と移動平均を用いたシンプルでクリーンなトレンドフォローアプローチを表しています.理解し,実装しやすく,アルゴリズム取引を学ぶための良い出発点として機能しています. しかし,ライブ取引では,ポジションサイズを慎重に制御する必要があります. 戦略は複雑な市場状況に適応するためにさらに強化されるべきです.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © runescapeyttanic

//@version=4
// strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0)

//INPUTS##################################################################################################################

maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000)
emalength = input(title="EMA Length", type=input.integer,defval=200)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2020, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=12, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=02, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)

endDate1=endDate-1
//starttag
//startmonat
//MACD########################################################################################################################

fast_length=12
slow_length=26
src=close
col_macd=#0094ff
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma

//EMA Distance CALC########################################################################################################

ma1 =ema(close,emalength)
distFromMean = close - ma1

inDateRange = true

longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange)
longnow=false

if(longCondition and strategy.position_size == 0)
    strategy.entry("My Long Entry Id", strategy.long)
    longnow:=true

if(longCondition and strategy.position_size > 0)
    longnow:=true
    

if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange)
    strategy.entry("My Long Entry Id", strategy.long)

plotchar(minute, "Minuten", "", location = location.top)

plotchar(hour, "Stunden", "", location = location.top)    

plotchar(dayofmonth, "Tage", "", location = location.top)

plotchar(month, "Monat", "", location = location.top)

plotchar(year, "Jahr", "", location = location.top)

plotchar(strategy.position_size, "Positionen", "", location = location.top)

plotchar(longCondition, "Long Condition", "", location = location.top)

if true
    strategy.close_all()

//#########################################################################################################################

plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0)
    1
else
    0
    
plotarrow(series=plotArrow)



もっと