Strategi Impulse Penembusan Rentang Rata-rata dan Kereta Api Atas

Penulis:ChaoZhang, Tarikh: 2023-11-13 11:52:22
Tag:

img

Ringkasan

Strategi ini menggunakan isyarat silang garis cepat dan garis perlahan MACD, digabungkan dengan penghakiman berdasarkan pelbagai penunjuk lain, untuk menangkap isyarat terobosan garis indeks purata bergerak dengan cara yang tepat dan membuat keputusan membeli atau menjual.

Logika Strategi

  1. Gunakan persilangan garis pantas dan garis perlahan MACD sebagai isyarat perdagangan utama. Apabila garis pantas melintasi di atas garis perlahan, ambil kedudukan panjang. Apabila garis pantas melintasi di bawah garis perlahan, ambil kedudukan pendek.

  2. Masukkan penunjuk RSI untuk menentukan keadaan overbought dan oversold. Di bawah garis tengah menunjukkan panjang, sementara di atas menunjukkan pendek.

  3. Bandingkan harga penutupan semasa dengan garis SMA dalam tempoh tertentu.

  4. Mengira tahap 0.5 Fibonacci nilai tertinggi untuk tempoh tertentu sebagai rintangan untuk panjang. Mengira tahap 0.5 Fibonacci nilai terendah untuk tempoh tertentu sebagai sokongan untuk pendek.

  5. Ambil panjang apabila garisan pantas melintasi di atas dan harga di bawah sokongan. Ambil pendek apabila garisan pantas melintasi di bawah dan harga di atas rintangan.

  6. Menggunakan mekanisme stop loss trailing. Stop loss ditetapkan pada peratusan tertentu daripada harga masuk pada mulanya. Apabila kerugian mencapai tahap tertentu, beralih ke stop loss trailing secara beransur-ansur.

Kelebihan

  1. Strategi ini menggunakan sepenuhnya isyarat silang MACD, yang merupakan isyarat perdagangan penunjuk teknikal klasik dan berkesan.

  2. Menggabungkan pengesahan dari pelbagai penunjuk seperti RSI dan SMA dapat menapis isyarat palsu dan meningkatkan kebolehpercayaan.

  3. Mengira tahap sokongan dan rintangan dinamik untuk perdagangan pecah boleh menangkap trend yang lebih besar.

  4. Hentikan kerugian boleh mengunci kebanyakan keuntungan sambil mengawal risiko.

  5. Logik strategi adalah jelas dan mudah, mudah difahami dan dikuasai untuk pemula.

Risiko

  1. Indikator MACD mempunyai masalah yang tertinggal dan mungkin terlepas titik masuk dan keluar yang optimum.

  2. Menggabungkan beberapa penunjuk meningkatkan kerumitan dan risiko isyarat yang bertentangan.

  3. Terdapat risiko pecah yang salah apabila mengira sokongan dan rintangan secara dinamik.

  4. Penghentian kerugian boleh keluar lebih awal dalam trend yang kuat, gagal untuk menunggang trend.

  5. Parameter memerlukan ujian dan pengoptimuman berulang, parameter yang tidak betul memberi kesan negatif terhadap prestasi.

Arahan pengoptimuman

  1. Uji kombinasi parameter yang berbeza untuk mengoptimumkan tempoh MACD.

  2. Memperkenalkan lebih banyak penunjuk seperti Bollinger Bands, KDJ untuk analisis pelbagai dimensi.

  3. Sertakan lebih banyak faktor untuk menilai munasabah sokongan dan rintangan.

  4. Penyelidikan mekanisme stop loss yang lebih maju seperti berhenti berdasarkan masa atau turun naik.

  5. Tambah modul pengoptimuman automatik untuk pengoptimuman parameter automatik.

Ringkasan

Strategi ini menggabungkan MACD, RSI, SMA dan penunjuk lain untuk menangkap isyarat kejayaan purata bergerak secara oportunistik. Ia termasuk dalam strategi perdagangan pecah jangka pendek biasa. Terdapat beberapa kelewatan dalam penjanaan isyaratnya, tetapi ketepatan dapat ditingkatkan melalui pengoptimuman parameter. Secara keseluruhan, ini adalah strategi dengan logik yang mudah dan jelas, mudah dipahami oleh kebanyakan, dan bernilai pengujian dan pengoptimuman lanjut.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 23: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/
// © onurenginogutcu

//@version=4
strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 ,  process_orders_on_close=true )



sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL") 
timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution ,  defval="60")

adxlen = input(14, title="ADX Smoothing" , group = "ADX")
dilen = input(14, title="ADX DI Length", group = "ADX")
adxemalenght = input(30, title="ADX EMA", group = "ADX")
adxconstant = input(19, title="ADX CONSTANT", group = "ADX")

fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA")
smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA")
MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA")
MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA")

trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01

lsl = input(title="Max Long Stop Loss (%)",
     minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01
     
ssl = input(title="Max Short Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01
     
longtp = input(title="Long Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
shorttp = input(title="Short Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
capperc = input(title="Capital Percentage to Invest (%)",
     minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01
     

symClose = security(sym, timeFrame, close)
symHigh = security(sym, timeFrame, high)
symLow = security(sym, timeFrame, low)

atr = atr (14) 

/////////adx code

dirmov(len) =>
	up = change(symHigh)
	down = -change(symLow)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
emasig = ema (sig , adxemalenght )


////////adx code over



i = ema (symClose , MACDFast) - ema (symClose , MACDSlow) 
r = ema (i , MACDSmooth)

sapust = highest (i , MACDLookback) * 0.729 
sapalt = lowest (i , MACDLookback) * 0.729  


simRSI = rsi (symClose , 50 ) 




fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)





cond1 = 0
cond2 = 0
cond3 = 0
cond4 = 0


longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom 
shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and  symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop 


//////////////////////probability long/short
if (crossover(i, r) and i < sapalt)
    cond1 := 35
else if (crossunder(i, r) and i > sapust)
    cond1 := -35
else
    cond1 := 0
    
if (symClose < sma (symClose , smaLookback))
    cond2 := 30
else if (symClose > sma (symClose , smaLookback))
    cond2 := -30
else
    cond2 := 0
    
if (simRSI < sma (simRSI , 50))
    cond3 := 25
else if (simRSI > sma (simRSI , 50))
    cond3 := -25
else
    cond3 := 0
    
if (symClose < fibbottom)
    cond4 := 10
else if (symClose > fibbottom)
    cond4 := -10
else
    cond4 := 0
    
probab = cond1 + cond2 + cond3 + cond4
////////////////////////////////////////////////////////////////

///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////
var startTrail = 0
var trailingLongPrice = 0.0
var trailingShortPrice = 0.0

if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close )

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close )
    
    
if (strategy.position_size == 0)    
    trailingShortPrice := 0.0
    trailingLongPrice := 0.0  
    startTrail := 0
/////////////////////////////////strategy exit

if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart))
    startTrail := 1

if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart))
    startTrail := -1
    



trailingLongPrice := if strategy.position_size > 0 and startTrail == 1
    stopMeasure = close * (1 - trailingStopLong)
    max (stopMeasure , trailingLongPrice [1])
else if strategy.position_size > 0 and startTrail == 0
    strategy.position_avg_price * (1 - lsl)


trailingShortPrice := if strategy.position_size < 0 and startTrail == -1
    stopMeasure = close * (1 + trailingStopShort)
    min (stopMeasure , trailingShortPrice [1])
else if strategy.position_size < 0 and startTrail == 0
    strategy.position_avg_price * (1 + ssl)




if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp))
 

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp))


////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)

plot (trailingLongPrice , color = color.green) ///long price trailing stop
plot (trailingShortPrice , color = color.red) /// short price trailing stop
plot (startTrail , color = color.yellow)
plot (probab , color = color.white) ////probability


Lebih lanjut