Strategi Pelanggaran Momentum Berdasarkan Penghakiman Kitaran dengan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-01-23 14:51:27
Tag:

img

Ringkasan

Strategi ini mengira garis EMA dari tempoh yang berbeza untuk menentukan peringkat kitaran semasa pasaran, dan menggunakan ATR untuk menjana isyarat pecah momentum untuk perdagangan yang mengikuti trend dengan kebarangkalian tinggi.

Logika Strategi

  1. Mengira 3 garis EMA - 5 hari, 20 hari dan 40 hari
  2. Bandingkan garis EMA untuk menentukan mana daripada 6 peringkat kitaran pasaran kini di
    • 5 hari > 20 hari > 40 hari ialah kitaran 1
    • 20 hari > 5 hari > 40 hari ialah kitaran 2 ...
  3. Selepas penentuan kitaran, mengira penunjuk ATR dan menetapkan kelipatan ATR sebagai kriteria pecah
  4. Isyarat beli dihasilkan apabila harga memecahkan di atas hentian ATR bar sebelumnya
  5. Isyarat jual dihasilkan apabila harga jatuh di bawah hentian ATR bar sebelumnya
  6. Melalui gabungan pertimbangan ini, perdagangan yang mengikuti trend dengan kebarangkalian tinggi dapat dicapai

Kelebihan

  1. Penghakiman kitaran meningkatkan kebolehpercayaan isyarat

    Dengan menilai kedudukan relatif garis EMA yang berbeza, tahap kitaran semasa pasaran dapat ditentukan dengan berkesan, mengelakkan isyarat yang salah dalam kitaran yang tidak sesuai.

  2. Penarikan ATR menapis isyarat palsu

    ATR boleh secara berkesan menyatakan turun naik pasaran. Menetapkan kelipatan ATR sebagai kriteria pecah boleh menapis banyak isyarat pecah palsu.

  3. Penghakiman gabungan membentuk peluang perdagangan yang sangat mungkin

    Gabungan organik pertimbangan kitaran dan pecah ATR mewujudkan isyarat dengan kebarangkalian yang jauh lebih tinggi, dengan itu juga meningkatkan keuntungan perdagangan.

Risiko

  1. Pengoptimuman parameter yang sukar

    Dengan pelbagai parameter, kesukaran pengoptimuman adalah tinggi. Tetapan parameter yang tidak betul boleh menjejaskan prestasi strategi.

  2. Lagging wujud

    Dalam pasaran yang berubah dengan cepat, kedua-dua EMA dan ATR mempunyai tahap ketinggalan tertentu, yang boleh menghasilkan isyarat yang salah atau kehilangan peluang.

  3. Keperluan Stop Loss yang ketat

    Tidak ada penunjuk teknikal yang dapat mengelakkan isyarat yang salah.

Arahan pengoptimuman

  1. Pengoptimuman parameter lanjut

    Cari kombinasi parameter yang optimum melalui data sejarah yang lebih luas.

  2. Meningkatkan daya adaptasi

    Mempertimbangkan penyesuaian parameter ATR secara automatik berdasarkan turun naik pasaran untuk meningkatkan daya adaptasi.

  3. Menggabungkan penunjuk lain

    Cuba memasukkan penunjuk lain seperti turun naik dan jumlah untuk membantu penilaian dan meningkatkan kualiti isyarat.

Kesimpulan

Strategi ini menentukan kitaran dengan EMA dan menetapkan kriteria momentum dengan ATR untuk mencapai perdagangan yang mengikuti trend dengan kebarangkalian tinggi. Ia mempunyai kelebihan seperti penghakiman kitaran, penapisan isyarat palsu dan peningkatan kualiti isyarat. Tetapi risiko seperti pengoptimuman parameter yang sukar dan kelewatan wujud. Pengoptimuman lebih lanjut pada parameter, adaptiviti dll.


/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 15m
basePeriod: 5m
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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy",overlay = true)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

Lebih lanjut