8期間および21期間の移動平均戦略


作成日: 2024-01-17 17:45:45 最終変更日: 2024-01-17 17:45:45
コピー: 2 クリック数: 568
1
フォロー
1617
フォロワー

8期間および21期間の移動平均戦略

概要

この戦略は,2つの移動平均を使用し,それぞれ8周期および21周期の移動平均を使用する. 短期移動平均の上に長期移動平均を着るときは,多めに; 短期移動平均の下に長期移動平均を着るときは,空いてください.

この戦略はまた,トレンドのない区間をフィルターするために,移動平均の斜率指標を導入し,トレンドが顕著であるときにのみ取引シグナルを生成します.

戦略原則

この戦略の核心は,短期移動平均と長期移動平均の交差である.短期移動平均は,価格変化のトレンドをより迅速に捕捉し,長期移動平均は,ノイズに対するよりよいフィルタリング効果を有する.短線上の長線を横断すると,多頭トレンドが形成され,多利得を行う.短線下の長線を横断すると,空頭トレンドが形成され,空頭トレンドが形成され,空頭トレンドを行う.

この戦略はまた,斜率の値を設定している.斜率が正の値より大きい場合にのみ多多信号が生成され,斜率が負の値より小さい場合にのみ空の信号が生成される.これは,明らかな傾向がないいくつかの区間をフィルターして,取引信号の質を高めることができる.

具体的には,この戦略の取引シグナル生成の論理は次のとおりです.

  1. 8周期と21周期の移動平均を計算する
  2. 交差する信号を検知する
  3. 21周期移動平均の斜率を計算する.斜率は正切関数atanで計算する.
  4. 斜率が設定された正の値を超えた場合にのみ,多行信号が生成されます.
  5. 傾斜が設定された負の値以下である場合にのみ空白信号が生成されます.

優位分析

この戦略の利点は以下の通りです.

  1. 戦略はシンプルで,理解し,実行しやすい
  2. 斜率指標を導入し,明らかな傾向のない区間をフィルターして信号の質を向上させる
  3. 双動平均は,それぞれの優位性を発揮し,安定性を高めることができます.
  4. 市場パラメータに応じて調整し,異なる取引品種に適合する
  5. プログラムが簡潔で,二次開発や最適化が容易である

リスクと解決策

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

  1. 市場が急激に波動する区間があり,誤ったシグナルが多く現れる可能性があります.
  2. 双線交差は誤信号を多く発生させる可能性がある.
  3. 遅滞があるため,トレンドの転換をすぐに捉えることはできません.

これらのリスクに対して,以下のように最適化できます.

  1. 移動平均のパラメータを市場の特徴に合わせて調整する
  2. 斜率の値を最適化して,パラメータの粗度性を向上させる
  3. 単一損失を抑えるための止損機構の増強
  4. 他の指標と組み合わせたフィルタリングにより,信号の質が向上します.
  5. 策略をより頑丈にするために,適応パラメータの設定を使用します.

最適化の方向

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

  1. 市場変動に応じてパラメータを調整する適応移動平均を使用する
  2. 取引量の関連分析を増やし,整理時に誤信号を回避する
  3. 波動率指数と組み合わせた信号の質と時効性
  4. 機械学習アルゴリズムを追加し,パラメータの自動最適化を実現する.
  5. より複雑な非線形価格モデルを深層学習技術と組み合わせて探求する

要約する

この双動平均戦略は,全体的にシンプルで実用的で,2周期のパラメータをdiffsで捉え,異なるトレンド特性を融合させ,取引信号を生成する.同時に,斜率の値を導入することで信号の質が向上する.この戦略は,基本戦略として拡張され,大きな最適化スペースと拡張能力がある.

ストラテジーソースコード
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)

ma1= sma(close,8)
ma2= sma(close,21)

angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)

i_lookback   = input(2,     "Angle Period", input.integer, minval = 1)
i_atrPeriod  = input(10,    "ATR Period",   input.integer, minval = 1)
i_angleLevel = input(6,     "Angle Level",  input.integer, minval = 1)
i_maSource   = input(close, "MA Source",    input.source)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)

plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)

crosso=crossover(ma1,ma2) 
crossu=crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)


if(long)
    strategy.entry("Long",strategy.long)
if(short)
    strategy.entry("short",strategy.short)