二重移動平均ゴールデンクロスとデスクロス戦略に基づく


作成日: 2024-02-27 16:21:02 最終変更日: 2024-02-27 16:21:02
コピー: 0 クリック数: 365
1
フォロー
1219
フォロワー

二重移動平均ゴールデンクロスとデスクロス戦略に基づく

概要

この戦略は,典型的な移動平均線交差戦略であり,同時に2つの均線,一組の快均線,一組の遅均線を使用する. 快均線上をゆっくり均線を横切ると買いの信号が生じる; 快均線下をゆっくり均線を横切ると売りの信号が生じる. この戦略は,同時にEMAとSMAの2つの均線を使用し,2つの快緩均線を構成し,快均線はEMAを計算し,遅均線はSMAを計算する. 多組の均線を確認することで,いくつかの偽信号をフィルターして,信号の信頼性を高めることができる.

戦略原則

この戦略の主な論理は,2組の快速平均線の交差を基に,入場と出場のタイミングを判断することである.

まず,平均線を2つに分け算出します.

  • 最初のラピッドEMAは8日間続きます
  • 2回目 急速EMA 21日間
  • 最初のSMAは50日間
  • ゆっくりとしたSMAの第2群は200日

速度のEMAが金叉か死叉か遅いSMAか判断する.

  • 50日SMAを通過すると,金叉の信号になります.
  • ダウン8日EMAは50日SMAを通過すると,

偽信号をフィルターするために,EMAとSMAの確認の2つ目のグループが追加されました.

  • 取引信号は,21日EMAが50日SMAを上下しているときにのみ発信されます.

このように,2組の快速均線確認によって,多くの偽信号をフィルターでき,信号の信頼性を高めることができる.

判断が買入シグナルを生じるときは,多入場する.判断が売り出場シグナルを生じるときは,空き入場する.

さらに,この戦略は,ストップ・ストップ・ロズ論理を設定している. ポジションを保有するときは,設定された損益率に基づいてストップ・ストップ・価格を追跡する.

優位分析

この戦略には以下の利点があります.

  1. 双均線組合せを使用し,偽信号を効果的にフィルターし,信号の正確性を向上させる
  2. EMAとSMAの組み合わせで,最新の価格変動に対するEMAの感受性とSMAの平滑性
  3. ストップ・ストップ・損失を設定し,利益をロックし,リスクを制御します.
  4. シンプルで明快な原理で 簡単に理解し 修正できます
  5. 異なる市場環境に対応するカスタマイズ可能なパラメータ

リスク分析

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

  1. 平均線戦略は,小利益と小損失の波動を多く生み出します.
  2. 市場が急激に変化する時には,大きな損失が生じる可能性があります.
  3. パラメータの設定が不適切である場合,収益性の低下が起こります.

危険を抑えるために,以下のことをお勧めします.

  1. 異なる市場環境に対応するためにパラメータの組み合わせを適切に調整する
  2. 戦略をターゲット市場に適応させるため,反省結果に基づく最適化パラメータ
  3. 単一の損失の大きさを制御するストップを設定します.

最適化の方向

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

  1. より多くの快速平均線配列をテストし,最適のパラメータ配列を探します.
  2. 機械学習や遺伝子アルゴリズムによる 優位性パラメータの自動検索
  3. トレンド判断の指標を増やし,逆転取引を避ける
  4. 移動ストップまたは移動ストップを増加させ,利潤をよりよくロックします.
  5. 取引量または波動性指標と組み合わせた信号の信頼性強化
  6. 多策略/多品種組合せ,非関連性の分散リスク

要約する

全体として,この双均線金叉死叉戦略は,快慢均線の交差によって取引信号を形成し,ストップ・ストップ・損失制御のリスクを設定し,シンプルで直感的で,容易に実行できるという特徴がある.この戦略は,市場と需要に応じてパラメータを最適化することができ,他の技術指標または戦略の組み合わせでも使用でき,量化取引において優れた実用性がある.

ストラテジーソースコード
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 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/
// © JMLSlop

//@version=4

src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)

// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len) 

//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)

//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)

//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)

// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01


plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")

// Orders config
takeProfitPrice =
     (strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na

longStopPrice  = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)

longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
    strategy.entry("Enter L", strategy.long)

shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
    strategy.entry("Enter S", strategy.short)


if (strategy.position_size > 0)
    strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)