2つの移動平均のクロスオーバー取引戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月7日 16:39:01
タグ:

概要

この戦略は,トレンドを決定し,買い・売りシグナルを生成するために,二重移動平均の黄金十字と死亡十字を使用する. 急速移動平均が下からゆっくり移動平均を超えると,黄金十字が発生し,買い信号が生成される. 急速移動平均が上からゆっくり移動平均を下に越えると,死亡十字が発生し,販売信号が生成される.

戦略の論理

戦略は以下の要素で構成されています.

  1. 価格のオシレーター値をパーセント形式で計算する.オシレーター値は価格のパーセントマイナス中位値である.中位値は例20日間の最高値と最低値の平均値として計算される.

  2. 20日間のハル移動平均のような振動値の移動平均を計算する.

  3. 移動平均値の遅延値を計算します 例えば12日遅延です

  4. 移動平均値が遅れている移動平均値の上または下を横切るかどうかを決定し,黄金十字または死十字信号を生成します.

  5. 購入・販売のシグナルを発行する

具体的には,この戦略はまず価格の振動値,次に振動子の移動平均値,そして移動平均値の遅れ値を計算します.

オシレーターの移動平均が遅れている移動平均を上回ると,ロングに行くためのゴールデンクロス信号が生成される.オシレーターの移動平均が遅れている移動平均を下回ると,ショートに行くためのデスクロス信号が生成される.

二重移動平均値の交差を判断することで,取引方向が決定されます.

利点分析

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

  1. 二重移動平均を用いることで 誤った信号をフィルターし 信号の信頼性を向上させます

  2. 急速な移動平均と遅い移動平均を組み合わせると,中期トレンドが把握される.高速MAは価格変化に敏感で,遅いMAは質が遅い.両方を組み合わせると,中期トレンド逆転を捕捉しながら,短期的なノイズをフィルタリングする.

  3. オスイレーターはブレイクポイントを強調し,より明確な取引信号を生成します.

  4. 調整可能なMAアルゴリズムとパラメータは,異なる市場環境に適しています.

  5. シンプルで明快な戦略論理 分かりやすく実行し 初心者向けです

リスク分析

この戦略のリスクは以下のとおりです.

  1. 信号が遅いため 最良のエントリーポイントが欠けている

  2. 範囲の市場では誤った信号を受けやすい

  3. トレンド強さを判定できず 牛市中に早退するリスクがあります

  4. 調整可能なパラメータが多すぎて 最適なパラメータ組み合わせを最適化するのは難しい

  5. ストップ・ロスのメカニズムがないし 単一の取引損失を制御できない

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. MAの種類とパラメータを最適化し,異なる市場で安定性をテストします

  2. ADX のようなトレンドを決定する指標を追加して,間違った信号から不必要な取引を避ける.

  3. トレーリングストップや百分比ストップのようなストップ・ロスのメカニズムを追加して単一のトレード損失を制御します.

  4. 信号の質を向上させるため 音量やRSIなどの他の指標を組み込む

  5. 機械学習を使用して パーマータを自動最適化して より堅牢な設定をします

  6. 入場条件を少し緩和して 失敗した取引を減らすことにしましょう

概要

この二重移動平均クロスオーバー戦略は,短期間の市場ノイズをフィルタリングする,高速および遅い移動平均を組み合わせて中期トレンド逆転点を捕捉します. シンプルで,理解しやすく,初心者向けにフレンドリーであるという利点があります. しかし,間違った信号を生成し,トレンド強度を決定できないなどの欠点もあります. MAパラメータを最適化し,トレンドフィルターを追加し,ストップ損失条件を設定し,さまざまな市場環境に合わせて改善することができます. 全体的に,二重MA戦略は,最適化とライブテストを通じて検証に値する実践的な技術指標ベースの戦略です.


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

もっと