Tren Rata-rata Bergerak Ganda Mengikuti Strategi

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

Gambaran umum

Strategi ini menggunakan RMA jangka panjang dan crossover EMA jangka pendek untuk menentukan arah tren. Ini mengikuti tertinggi terbaru atau terendah terendah untuk stop loss.

Logika Strategi

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

  2. Ketika harga menembus di atas tertinggi terbaru selama periode tertentu, jejak tertinggi tertinggi sebagai stop loss.

  3. Tetapkan zona no-trade di sekitar RMA. Jangan membuka posisi ketika harga berada di dalam zona untuk menghindari whipsaws. Jangkauan zona didasarkan pada persentase tertentu dari nilai RMA.

  4. Menetapkan harga mengambil keuntungan untuk keluar posisi pada persentase keuntungan setelah masuk.

Keuntungan

  1. Crossover rata-rata bergerak ganda dapat diandalkan menentukan arah tren.

  2. Stop loss mengikuti tren.

  3. No-trade zone menyaring sinyal palsu.

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

Risiko

  1. Penundaan penyeberangan rata-rata bergerak dapat meningkatkan kerugian.

  2. Stop loss yang terlalu dekat dengan harga bisa terhenti oleh kebisingan.

  3. No-trade zone yang terlalu luas dapat kehilangan kesempatan.

  4. Tidak berhenti tepat waktu bisa menyebabkan kerugian lebih lanjut.

Kemungkinan Solusi:

  1. Mengoptimalkan parameter rata-rata bergerak untuk mengurangi keterlambatan.

  2. Meningkatkan stop loss sedikit untuk mencegah sensitivitas berlebihan.

  3. Uji menyesuaikan kisaran zona bebas perdagangan untuk menghindari perdagangan yang hilang.

  4. Tambahkan mekanisme stop loss lainnya untuk membatasi kerugian maksimum.

Arahan Optimasi

  1. Uji kombinasi rata-rata bergerak lainnya untuk lebih cocok.

  2. Tambahkan spread, MACD dll untuk meningkatkan stabilitas.

  3. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara cerdas.

  4. Masukkan kekuatan tren untuk menghindari perdagangan yang bertentangan dengan tren.

  5. Mengoptimalkan manajemen uang untuk tingkat kemenangan yang lebih tinggi.

Ringkasan

Strategi ini menggunakan crossover rata-rata bergerak ganda untuk menentukan arah tren dan menggabungkan trailing stop dan no-trade zone untuk mengunci keuntungan tren. Kerangka kerja ini sederhana dan dapat diperluas.


/*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 banyak