Strategi silang purata bergerak berganda dengan purata bergerak pelbagai jenis

Penulis:ChaoZhang, Tarikh: 2023-09-19 21:27:31
Tag:

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dengan mengira persilangan pelbagai jenis purata bergerak, melaksanakan persilangan MA panjang dan pendek.

Logika Strategi

  1. Mengira dua MA: MA1 dan MA2, yang boleh memilih dari SMA, EMA, VWMA dll. Panjang boleh disesuaikan.

  2. Menentukan persilangan MA: pergi panjang apabila MA1 melintasi atas MA2, kedudukan dekat apabila MA1 melintasi di bawah MA2.

  3. (Pilihan) Hitung MA ketiga - MA3, biasanya dengan tempoh yang lebih lama seperti 50. Di atas MA3 adalah trend menaik, di bawah adalah trend menurun. Hanya berdagang apabila harga memecahkan MA3.

  4. Gabungkan peraturan dengan jangka masa backtest untuk menjana isyarat perdagangan.

  5. Isi warna di kawasan silang untuk bantuan visual.

Strategi ini menggabungkan trend berikut MA dan crossover panjang / pendek, dengan MA ketiga untuk kawalan risiko.

Analisis Kelebihan

  1. Crossover MA berganda secara berkesan mengikuti trend.

  2. Sokong pelbagai kombinasi jenis MA, boleh dioptimumkan untuk tempoh yang berbeza.

  3. MA ketiga mengawal risiko dan mengurangkan kerugian yang tidak perlu.

  4. Bantuan visual meningkatkan pengalaman perdagangan carta.

  5. Parameter yang boleh diselaraskan boleh dioptimumkan untuk kitaran yang berbeza.

  6. Logik yang mudah dan jelas, mudah difahami dan diikuti.

Analisis Risiko

  1. Dual MA bergelut dengan senario yang terikat dengan julat dan pembalikan trend.

  2. MA berganda boleh menghasilkan isyarat palsu atau tindak balas berlebihan kadang-kadang.

  3. MA ketiga mungkin terlepas peluang yang kuat trend. boleh menguji memendekkan tempohnya untuk menangkap lebih banyak keuntungan.

  4. Tidak dapat menjamin kemenangan untuk setiap perdagangan, memerlukan pengurusan stop loss yang betul.

Arahan pengoptimuman

  1. Uji pelbagai jenis dan tempoh MA untuk pasangan parameter terbaik.

  2. Mengoptimumkan tempoh MA ketiga untuk menyeimbangkan kawalan risiko dan penangkapan keuntungan.

  3. Tambah strategi stop loss untuk mengawal jumlah kerugian perdagangan tunggal.

  4. Pertimbangkan algoritma pembelajaran mesin untuk mencari parameter optimum berdasarkan data besar.

  5. Gabungkan dengan penunjuk lain seperti KD, MACD untuk penapisan isyarat dan pengesahan.

Ringkasan

Strategi crossover purata bergerak berganda ini dengan MAs pelbagai jenis menggabungkan trend berikut, kawalan risiko, pengoptimuman parameter, bantuan visual dan banyak lagi. Dengan ujian dan pengoptimuman berterusan, memperkenalkan penunjuk lain atau pembelajaran mesin dan lain-lain, ia boleh menyesuaikan diri dengan lebih baik dengan pasaran dan mempunyai nilai praktikal yang besar. Ringkasnya, ini adalah strategi yang mudah, praktikal dan mudah dioptimumkan, menjadikannya titik permulaan yang baik untuk perdagangan algoritma.


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





Lebih lanjut