複数期間の動的移動平均戦略


作成日: 2023-10-27 16:07:16 最終変更日: 2023-10-27 16:07:16
コピー: 1 クリック数: 647
1
フォロー
1617
フォロワー

複数期間の動的移動平均戦略

この戦略は,異なるタイプの移動平均を動的に選択し,複数の時間周期を組み合わせることで,取引信号の生成を実現します.

戦略原則

この戦略は,SMA,EMA,TEMA,WMA,HMAの5つの移動平均指標を選択し,均線の周期長さを設定します.戦略は,選択した動態に応じて,異なる種類の均線を描きます.

具体的には,戦略は,入力パラメータに基づいて,まず反測周期を定義し,それから5つの平均線指標を計算する.

  • 移動平均線は
  • EMA指数移動平均線
  • TEMA 三指数移動平均
  • WMA重力移動平均
  • HMA ハル移動平均

選択に応じて,対応する平均線を描きます. 閉じる価格が平均線より高いときは,多めにします. 閉じる価格が平均線より低い場合は,空いてください.

この戦略は,異なるタイプの平均線を使用することで,価格データを平らにし,市場のノイズをフィルターし,より信頼性の高い取引シグナルを生成します. 平均線周期の長さをカスタマイズし,異なる周期のトレンドに対して取引することができます.

戦略的優位性

  • 多種平均線指標の組み合わせにより,信頼性が高い
  • 異なる周期操作に対応するカスタマイズ可能な均線周期
  • ダイナミック・スイッチ・均線型,最適化パラメータの柔軟性
  • シンプルで直感的なトレンド追跡戦略で,簡単に実行できます.

戦略リスク

  • 平均線が遅れ,トレンドの転換点を逃す可能性
  • 固定パラメータは過適合し,リッドディスク効果は反測より弱くなる
  • 多頭期には積極的な多頭期,空頭期には積極的な空頭期,資金使用効率に影響しやすい

リスクの軽減には,次のことを最適化することが必要です.

  • 他の指標とトレンドを組み合わせて,より正確な入学時期を決定します.
  • 固体ディスクの最適化パラメータ,異なる市場環境に適した均線周期の調整
  • ポジション管理の最適化,資金規模とリスク管理に応じてポジションの適切な調整

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 他の指標のフィルターを追加し,より安定した取引信号を作成します.

例えば,量能指数を加え,取引量が大きくなった場合にのみ取引信号を生成し,偽の突破をフィルターすることができます.

  1. エキサイトロジックを最適化

通路を設定し,価格が通路を突破したときにのみ入場する. 止損線を設定し,価格が止損線に触れた後に平仓する. これは不要な損失を減らすことができます.

  1. 動的調整均線周期

市場状況の動向に応じて平均線周期を調整し,トレンドがより顕著なときに長期周期平均線を使用し,収束時に短期周期平均線を使用することができる.

  1. 資金管理戦略の最適化

撤回状況に応じてポジションの大きさを調整し,撤回時にポジションを小さくし,収益時にポジションを適度に増やすことができます.

要約する

この戦略は,複数の時間周期と組み合わせた複数の均線指標を組み合わせて,比較的安定したトレンド追跡効果を形成する.戦略の最適化スペースは大きい.入場フィルタリング,出場方法,パラメータ最適化などの面で改善することができ,戦略は実盤でより良い効果を得ることができる.

ストラテジーソースコード
/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )