Trend purata bergerak berganda mengikut strategi

Penulis:ChaoZhang, Tarikh: 2023-09-24 13:14:08
Tag:

Ringkasan

Strategi ini menggunakan RMA jangka panjang dan persilangan EMA jangka pendek untuk menentukan arah trend. Ia mengikuti tertinggi tertinggi atau terendah terendah baru-baru ini untuk menghentikan kerugian.

Logika Strategi

  1. Gunakan RMA jangka panjang dan EMA jangka pendek untuk menentukan trend. EMA pendek yang melintasi di bawah RMA panjang menandakan downtrend. Melintasi di atas menandakan uptrend.

  2. Apabila harga melanggar di atas tertinggi terkini dalam tempoh tertentu, jejak tertinggi tertinggi sebagai stop loss. Apabila harga melanggar di bawah rendah terkini, jejak rendah terendah sebagai stop loss.

  3. Tetapkan zon tidak berdagang di sekitar RMA. Jangan membuka kedudukan apabila harga berada di dalam zon untuk mengelakkan whipsaws. Julat zon berdasarkan peratusan tertentu daripada nilai RMA.

  4. Tetapkan harga mengambil keuntungan untuk keluar kedudukan pada peratusan keuntungan selepas kemasukan.

Kelebihan

  1. Perpindahan purata bergerak berganda menentukan arah trend dengan boleh dipercayai.

  2. Penghentian kehilangan bergerak dengan trend.

  3. Zona tidak berdagang menyaring isyarat pelarian palsu.

  4. Ambil keuntungan membolehkan strategi untuk secara aktif menutup perdagangan yang menguntungkan.

Risiko

  1. Kelewatan dalam persilangan purata bergerak boleh meningkatkan kerugian.

  2. Stop loss terlalu dekat dengan harga boleh dihentikan oleh bunyi bising.

  3. Zon tanpa perdagangan yang terlalu luas boleh kehilangan peluang.

  4. Jika tidak berhenti tepat pada masanya boleh menyebabkan kerugian lebih lanjut.

Kemungkinan Penyelesaian:

  1. Mengoptimumkan parameter purata bergerak untuk mengurangkan kelewatan.

  2. Luaskan sedikit stop loss untuk mengelakkan sensitiviti berlebihan.

  3. Uji menyesuaikan julat zon tidak perdagangan untuk mengelakkan perdagangan yang hilang.

  4. Tambahkan mekanisme stop loss lain untuk mengehadkan kerugian maksimum.

Arahan pengoptimuman

  1. Uji kombinasi purata bergerak lain untuk kecocokan yang lebih baik.

  2. Tambah spread, MACD dan lain-lain untuk meningkatkan kestabilan.

  3. Gunakan pembelajaran mesin untuk mengoptimumkan parameter dengan bijak.

  4. Menggabungkan kekuatan trend untuk mengelakkan perdagangan yang bertentangan dengan trend.

  5. Mengoptimumkan pengurusan wang untuk kadar kemenangan yang lebih tinggi.

Ringkasan

Strategi ini menggunakan persilangan purata bergerak berganda untuk menentukan arah trend dan menggabungkan hentian dan zon tidak perdagangan untuk mengunci keuntungan trend. Rangka kerja ini mudah dan boleh diperluaskan. Ia boleh dipertingkatkan dengan menyesuaikan julat parameter, mengoptimumkan keluar, dan menggabungkan penapis dan isyarat tambahan untuk menjadikannya kukuh di seluruh pasaran yang berbeza.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
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/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0

Lebih lanjut