多期動的移動平均の戦略

作者: リン・ハーンチャオチャン開催日:2023年10月27日 16:07:16
タグ:

img

この戦略は,複数のタイムフレームで動平均を動的に選択し,取引信号を生成します.

戦略の論理

この戦略は,SMA,EMA,TEMA,WMA,HMAの移動平均値から選択し,カスタマイズ可能な期間の長さを選択することができます. 選択に基づいて異なるタイプの移動平均値が動的にプロットされます. 閉値が移動平均値を超えるとロングになり,閉値が以下になるとショートになります.

具体的には,戦略は最初に入力パラメータに基づいてバックテスト期間を定義します.その後,5種類の移動平均を計算します.

  • SMA 単純な移動平均値
  • EMA 指数関数移動平均
  • TEMA トリプル指数関数移動平均
  • WMA 重度の移動平均値
  • HMA Hull 移動平均

対応する移動平均値は選択に基づいてグラフ化されます.閉じる価格が移動平均値を超える場合,ロングになり,以下になるとショートになります.

異なる種類の移動平均を組み合わせることで,戦略は価格データを滑らかにし,より信頼性の高い取引信号を生成するために市場のノイズをフィルタリングすることができます. 調整可能な期間の長さは,タイムフレーム間で異なるトレンドを取引することができます.

利点

  • より高い信頼性のために複数の移動平均を組み合わせます
  • 調整可能な期間が異なる取引時間枠に適合する
  • 平均値のダイナミックスイッチングにより,柔軟な最適化が可能
  • シンプルで直感的なトレンドフォロー 初心者向け

リスク

  • 移動平均値の遅れは,トレンドターニングポイントを逃す可能性があります.
  • 固定パラメータの過剰配合,ライブ取引の低パフォーマンス
  • 積極的な長/短信号は資本利用効率に影響を与える

リスクは以下によって軽減できます.

  • 記入をより正確に決定するために他の指標を追加する
  • 異なる市場体制のためのパラメータのリアル・トレード最適化
  • 口座規模とリスク管理に基づいてポジションのサイズを最適化

増進 の 機会

この戦略はいくつかの点で改善できる.

  1. より安定した信号のために他のフィルターを追加する

    容量確認なしの誤ったブレイクを避けるため,例えば容量指標.

  2. 入口と出口ロジックを最適化

    価格チャネルを設定し,不必要な損失を減らすために損失を止めます.

  3. 動的移動平均期

    堅調なトレンドで長期間, konsolidationで短期間を使用する.

  4. 資金管理を改善する

    引き下げと利益の取扱いに基づいて ポジションのサイズを調整する

結論

この戦略は,時間枠にわたる様々な移動平均を組み合わせて,比較的安定したトレンドフォロー効果を生成する.入口,出口,パラメータおよびマネーマネジメントの最適化に十分な余地があるため,より良い実世界のパフォーマンスのために改善することができます.


/*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 )


    
  









もっと