マルチタイプ移動平均取引戦略


作成日: 2023-09-19 21:27:31 最終変更日: 2023-09-19 21:27:31
コピー: 0 クリック数: 713
1
フォロー
1617
フォロワー

概要

この戦略は,複数の種類の移動平均を計算して,双均線の交差多行と交差空行を実現し,トレンド追跡戦略の属である.同時に,戦略は,第3条の移動平均をトレンド判断として導入し,リスクを制御する.

戦略原則

  1. 2つの平均線:MA1とMA2を計算し,それぞれSMA,EMA,VWMAなどの多くのタイプを選択できます.長さはカスタマイズできます.

  2. MA1とMA2の交差を判断する:MA1でMA2を打つとき,多めにする.MA1の下でMA2を打つとき,平仓する.

  3. (選択可能) 計算三条平均線MA3で,長さは通常より長い周期を取ります.例えば50。MA3の上の部分は多頭,下の部分は空頭。価格がMA3を突破したときにのみポジションを開きます。

  4. この規則は,反測期間の組み合わせで,戦略的取引信号の生成を完了します.

  5. 交差点の空白区域を多めに塗り,視覚的補助を形成する.

この戦略は,移動平均のトレンドトラッキングと交差多空の思想を融合し,第三の均線を導入してリスク管理を行い,パラメータを調整することで異なる市場周期に柔軟に適応することができる.

優位分析

  1. 双均線交差を用いてトレンドの方向を判断し,トレンドを効果的に追跡することができる.

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

  3. 第3条均線を導入してリスク管理を行うことで,不必要な損失を減らすことができます.

  4. 視覚化されたクロスコーリングは,取引の体験を向上させます.

  5. パラメータは調整可能で,異なる周期に対して最適化できます.

  6. 規則はシンプルで明快で,理解し実行しやすい.

リスク分析

  1. 双均線戦略は,震動の状況やトレンドの逆転のシナリオで損失を生じやすい.パラメータの最適化によってリスクを減らすことができます.

  2. 双均線は時として誤信号または超前反応を生じます.均線周期または最適化パラメータを適切に延長することができます.

  3. 三条均線は,より強い勢いのチャンスを逃す可能性がある。3条均線を適切に縮小して,見逃した利益の機会を減らすためにテストすることができる。

  4. 取引の利潤を保証できないので, リスク管理を徹底する必要があります.

最適化の方向

  1. 異なる種類の平均線と異なる周期パラメータの組み合わせをテストし,最適なパラメータペアを探します.

  2. 3条均線の周期パラメータを最適化し,リスク管理と収益キャプチャのバランスをとる.

  3. 単一損失を抑えるために Stop Loss 戦略に加入する.

  4. 機械学習のアルゴリズムを組み込み,ビッグデータ訓練を利用して最適なパラメータを探し出すことも考えられます.

  5. KD,MACDなどの他の指標と組み合わせた信号のフィルタリングと検証を行う.

要約する

この双均線多型移動平均線交差戦略は,トレンド追跡,リスク管理,パラメータ最適化,視覚支援などの複数の機能を統合し,非常に古典的で実用的なトレンド戦略である.パラメータの継続的なテストと最適化,他の指標の適切な導入や機械学習などの手段の組み合わせにより,この戦略の市場への適応性が向上し,強力な実戦価値を持つことができる.全体的に,この戦略はシンプルで,実用的で,最適化が容易であり,量化取引の良い出発点である.

ストラテジーソースコード
/*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()