複数のタイプの移動平均値と二重移動平均値のクロスオーバー戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-19 21:27:31
タグ:

概要

この戦略は,複数のタイプの移動平均値のクロスオーバーを計算し,長期と短期の両方のMAクロスオーバーを実装することによって取引信号を生成する.また,リスク制御のためのトレンド識別のための3番目のMAラインを導入する.

戦略の論理

  1. 2つのMAsを計算します:MA1とMA2, SMA,EMA,VWMAなどから選択できます.長さはカスタマイズできます.

  2. MAのクロスオーバーを決定する:MA1がMA2をクロスしたとき,Longに移動し,MA1がMA2を下回ると,Closeに移動する.

  3. (オプション) 3番目のMA - MA3を計算します.通常は50のような長い期間です.MA3の上の値は上昇傾向,下の値は下落傾向です.価格がMA3を突破したときのみ取引します.

  4. ルールとバックテストタイムフレームを組み合わせて取引信号を生成します

  5. 視覚的支援のために交差した領域に色を入れます.

この戦略は,市場動向とクロスオーバー・ロング/ショートとのトレンドフォローを組み合わせ,リスク管理のための第三の市場動向を組み合わせます.パラメータは,異なる市場サイクルに柔軟に調整できます.

利点分析

  1. 二重MAのクロスオーバーは,この傾向を効果的に追っている.

  2. 複数の MA タイプの組み合わせをサポートし,異なる期間に最適化できます.

  3. 第3次MAはリスクを制御し,不必要な損失を減らす.

  4. 視覚的支援はチャート取引の体験を向上させます

  5. 調整可能なパラメータは,異なるサイクルに最適化できます.

  6. シンプルで明快な論理で 分かりやすく実行できます

リスク分析

  1. デュアルMAは,範囲限定およびトレンド逆転シナリオと闘います.パラメータ最適化によって改善できます.

  2. 双 MA は誤った信号や過剰反応を生むこともあり,MA 期間を延長したり,パラメータを最適化したりできる.

  3. 3番目のMAは,強いトレンドの機会を逃す可能性があります.より多くの利益を得るために,その期間を短縮するテストすることができます.

  4. 適切なストップ・ロスト管理が必要です ストップ・ロスト管理は

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

  1. 最適なパラメータペアのために異なるMAタイプと期間をテストする.

  2. リスク管理と利益獲得をバランスさせるため,第三次投資支援期間を最適化する.

  3. ストップロスの戦略を追加して,単一の取引損失額を制御します.

  4. 機械学習アルゴリズムを考慮して ビッグデータに基づく最適なパラメータを見つけましょう

  5. KD,MACDなどの他の指標と組み合わせてシグナルフィルタリングと確認します

概要

このマルチタイプMAsの二重移動平均クロスオーバー戦略は,トレンドフォロー,リスク制御,パラメータ最適化,視覚支援などを含んでいます.継続的なテストと最適化,他の指標または機械学習などの導入により,市場により良く適応し,大きな実践的な価値があります.要約すると,これはシンプルで実践的で簡単に最適化可能な戦略であり,アルゴリズム取引のための素晴らしい出発点です.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





もっと