二重移動平均ゴールデンクロスとデッドクロス取引戦略


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

概要

この戦略は,双動平均の金叉死叉を用いてトレンドを判断し,買入と売却のシグナルを発する. 急速な移動平均が,下からゆっくりとした移動平均を貫くとき,金叉が生み出し,買入のシグナルが生じる. 急速な移動が,上から下からゆっくりとした移動平均を貫くとき,死叉が生み出し,売却のシグナルが生じる.

戦略原則

戦略は以下の部分から構成されています.

  1. 価格のパーセント形式の振動器の値を計算する.振動器の値は,価格から平均値の1パーセントを引いたものです.平均値は,例えば20日間の最高値と最低値の平均値から計算されます.

  2. 振動器値の移動平均を計算する.例えば20日間のhull移動平均.

  3. 移動平均の遅延値を計算する.例えば,12日遅延.

  4. 移動平均が上穿か下穿かを判断する 遅延移動平均,金叉か死叉の信号が出る.

  5. 買入・売却のシグナルを発信する.

具体的には,戦略は,まず価格の振動器値を計算し,次に振動器の移動平均を計算し,次に移動平均の遅延値を計算する.

振動器が移動平均線上を通過すると遅延移動平均線を突破すると金叉信号が発生し,多行する.振動器が移動平均線下を通過すると遅延移動平均線を突破すると死叉信号が発生し,空空する.

双動平均の交差を判断して,取引の方向を決定する.

優位分析

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

  1. 偽信号をフィルタリングする双動平均を用いて信号の信頼性を高めます.

  2. 急速平均線は価格変化に敏感で,遅い平均線は遅滞性があり,短期的なノイズを除しながら,中間トレンドの逆転を捕捉することができる.

  3. 振動器の利用は,より明確な取引シグナルを生成するために,突破点を突出します.

  4. 移動平均アルゴリズムとパラメータをカスタマイズし,異なる市場環境に対応する.

  5. 戦略の論理はシンプルで明快で,理解し,実行しやすく,初心者向けに適しています.

リスク分析

この戦略には以下のリスクもあります.

  1. 双移動平均の交差は信号遅延を生じ,最適なエントリーポイントを逃す可能性がある.

  2. 双動平均は市場を整合する際に誤信号を発生させる傾向がある.

  3. 牛市で早退するかもしれない.

  4. PARAMETERS 調整可能なパラメータが多すぎて,最適のパラメータの組み合わせを見つけるのに最適化が困難である.

  5. 単一損失をコントロールできない.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 移動平均の種類とパラメータを最適化し,異なる市場における異なる組合せの安定性をテストする.

  2. ADXのようなトレンド判断指標を追加し,誤ったシグナルで不必要な取引を避ける.

  3. 移動ストップやパーセンテージストップのようなストップ戦略を追加し,単一損失を制御します.

  4. 取引量エネルギー,RSIなどの他の指標と組み合わせて,取引信号の質を向上させる.

  5. 機械学習によるパラメータの自動最適化により,より安定したパラメータ設定が得られます.

  6. 入学条件の適切な緩和を考慮して,入学券の漏れを減らす.

要約する

この双動平均金叉死叉戦略は,快速と遅速の均線の組み合わせをマッチングして,短期市場のノイズを除しながら,価格の中期トレンドの転換点を捕捉して取引信号を生成する.この戦略の優点は,実行が簡単で,理解が容易で,新手にとって友好的なものである.しかし,誤信号を生成し,トレンドの強さを判断できないなどの欠点もある.移動平均のパラメータを最適化して,トレンド判断指標を追加し,ストップ損失条件を設定することで,この戦略を改良して,異なる市場環境に適したものにすることができる.全体的に,双動平均線戦略は実用的な技術指標戦略であり,それに対応して最適化調整後に実況テストを行うべきである.

ストラテジーソースコード
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 4h
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/
// © EvoCrypto

//@version=4
strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy")

// INPUTS {
na_1                =   input(false,    title="────────────{ Oscillator }──────────────")

// Osc_Src             =   input(close,    title="Oscillator Source                                ")

Example_Length      =   input(20,       title="Example Length", minval=1)
Osc_Src             =   (highest(Example_Length) + lowest(Example_Length)) / 2

// Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example

Osc_Format          =   input("Percent",title="Oscillator Format",              options=["Percent", "Currency"]) 

na_2                =   input(false,    title="─────────────{ Average }──────────────")
Average_Type        =   input("Hull",   title="Average Type",                   options=["Hull", "Sma", "Ema", "Wma"])
Length              =   input(50,       title="Average Length", minval=1)
Lagg                =   input(12,       title="Average Lagg",   minval=1)
Display_MA          =   input(true,     title="Display Average")
// }

// SETTINGS {
Osc_Sum             =   
 Osc_Format == "Percent"  ? (close - Osc_Src) / close * 100 :
 Osc_Format == "Currency" ? (close - Osc_Src)               : na

Osc_MA              =   Display_MA == false ? na:
 Average_Type == "Hull"? hma(Osc_Sum, Length)   :
 Average_Type == "Sma" ? sma(Osc_Sum, Length)   :
 Average_Type == "Ema" ? ema(Osc_Sum, Length)   :
 Average_Type == "Wma" ? wma(Osc_Sum, Length)   : na
Osc_MA_1            =   Osc_MA[Lagg]

Cross_Up            =   crossover( Osc_MA, Osc_MA_1)
Cross_Down          =   crossunder(Osc_MA, Osc_MA_1)

Osc_Color           =   Osc_Sum > 0         ? color.new(#bbdefb, 70)  : Osc_Sum < 0          ? color.new(#000000, 70)  : na
Average_Color       =   Osc_MA  > Osc_MA_1  ? color.new(#311b92, 100) : Osc_MA  < Osc_MA_1   ? color.new(#b71c1c, 100) : na
// }

// PLOT {
plot(Osc_Sum,                           title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2)

Plot_0              =   plot(Osc_MA,    title="Osc Average",color=#b71c1c, linewidth=2)
Plot_1              =   plot(Osc_MA_1,  title="Osc Average",color=#311b92, linewidth=2)
fill(Plot_0, Plot_1,                    title="Average",    color=Average_Color)

plotshape(Cross_Up   ? Osc_MA_1 : na,   title="Cross Up",   color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle)
plotshape(Cross_Down ? Osc_MA_1 : na,   title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle)
// }

// STRATEGY {
if (Cross_Up)
    strategy.entry("Long", strategy.long)
if (Cross_Down)
    strategy.entry("Short", strategy.short)
// }