Sistem Dagangan Ichimoku Keltner Bersepadu Berdasarkan Strategi Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-12-20 13:40:08
Tag:

img

Ringkasan

Strategi ini mengintegrasikan strategi purata bergerak, carta awan Ichimoku dan penunjuk teknikal saluran Keltner untuk mencapai perdagangan trend berikut dan kejayaan, yang sesuai untuk perdagangan algoritma frekuensi tinggi.

Prinsip Strategi

  1. Gunakan saluran Keltner untuk menilai sama ada harga saham melebihi rel atas dan bawah saluran sebagai isyarat untuk membuka kedudukan
  2. Carta awan Ichimoku menilai arah trend dan menggunakan saluran Keltner
  3. Strategi purata bergerak menghantar isyarat penutupan

Analisis Kelebihan

  1. Mengintegrasikan pelbagai penunjuk teknikal untuk penilaian komprehensif untuk meningkatkan ketepatan keputusan
  2. Channel Keltner menilai keadaan overbought dan oversold untuk mengelakkan mengejar tinggi dan membunuh rendah apabila membuka kedudukan
  3. Carta awan Ichimoku menilai trend utama untuk mengelakkan perdagangan terhadap trend
  4. Strategi purata bergerak menapis kejutan dan mencegah sensitiviti yang berlebihan

Analisis Risiko

  1. Integrasi pelbagai penunjuk menjadikan tetapan parameter lebih kompleks dan memerlukan ujian yang teliti
  2. Penyeberangan garis penukaran dan garis asas carta awan tidak selalu isyarat perdagangan yang boleh dipercayai
  3. Saluran Keltner perlu menyesuaikan parameter untuk menyesuaikan diri dengan ciri-ciri stok yang berbeza

Arahan pengoptimuman

  1. Menilai prestasi pelayan dan memendekkan kitaran purata bergerak dengan sewajarnya untuk meningkatkan kekerapan perdagangan
  2. Uji kepekaan stok yang berbeza kepada parameter dan tetapkan parameter penyesuaian
  3. Meningkatkan strategi stop loss untuk mengurangkan kerugian tunggal

Ringkasan

Strategi ini mengintegrasikan carta awan Ichimoku, saluran Keltner dan strategi purata bergerak dengan pelbagai penunjuk teknikal untuk mencapai penjejakan trend dan perdagangan terobosan yang cekap. Berbanding dengan satu penunjuk, penilaian strategi ini lebih komprehensif dan tepat, mengelakkan isyarat palsu tertentu. Pada masa yang sama, terdapat juga masalah bahawa tetapan parameter lebih kompleks dan perlu dioptimumkan untuk saham individu. Secara umum, strategi ini sesuai untuk perdagangan algoritma frekuensi tinggi dengan kesan yang signifikan.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < lower

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))

Lebih lanjut