Strategi dagangan mengikut arah aliran berdasarkan penunjuk MACD


Tarikh penciptaan: 2023-09-27 16:46:38 Akhirnya diubah suai: 2023-09-27 16:46:38
Salin: 1 Bilangan klik: 651
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini berdasarkan MACD untuk menentukan arah trend, dan digabungkan dengan petunjuk Stoch untuk melakukan operasi jual beli yang spesifik. Strategi ini menggunakan MACD yang lebih panjang untuk menentukan trend besar, dan Stoch yang lebih pendek untuk memasuki pasaran.

Prinsip Strategi

  1. Menggunakan Indeks MACD untuk Mengesan Arah Trend Besar

    • Hitung EMA jangka panjang, garis laju, dan garis MACD

    • Bandingkan perubahan MACD dari tempoh yang berbeza untuk menentukan arah trend

  2. Menggunakan Indeks Stoch untuk menentukan titik jual beli

    • Hitung % K dan % D

    • Stoch muncul berpatah balik berhampiran kawasan overbought dan overbought, sebagai isyarat untuk membeli dan menjual

  3. Menggabungkan arah trend dan isyarat Stoch, untuk membeli dan menjual

    • Apabila MACD berkisar besar naik, Stoch membeli isyarat muncul, melakukan lebih

    • Apabila MACD kitaran besar turun, Stoch menjual isyarat muncul, melakukan shorting

  4. Tetapkan Stop Loss Stop Stop dan Optimumkan Pengurusan Wang

Analisis kelebihan

  • Strategi ini digabungkan dengan trend tracking dan overbought oversold indicator untuk menangkap trend dalam garis tengah dan panjang.

  • MACD menentukan arah besar, Stoch melakukan perincian perdagangan, dapat mengawal risiko dengan berkesan

  • Mengambil kesempatan daripada gabungan antara indikator untuk membentuk strategi indikator

  • Menetapkan mekanisme penangguhan kerugian dan menguruskan risiko perdagangan

  • Parameter strategi boleh dioptimumkan untuk persekitaran pasaran yang berbeza

Analisis risiko

  • Kesilapan dalam penilaian trend garis tengah dan panjang boleh menyebabkan kerugian perdagangan yang berlawanan

  • Indeks Stoch menghasilkan isyarat palsu yang menyebabkan keuntungan rendah atau kerugian

  • Apabila trend berubah, titik berhenti boleh ditembusi, meningkatkan kerugian

  • Target keuntungan yang terlalu besar atau terlalu kecil boleh menjejaskan kesan strategi

  • Parameter yang tidak betul dan tidak menyesuaikan diri dengan perubahan keadaan pasaran boleh menyebabkan strategi gagal

  • Risiko boleh dikurangkan dengan mengoptimumkan kaedah penghakiman trend, mengesahkan isyarat Stoch, dan menyesuaikan kedudukan hentian hentian

Arah pengoptimuman

  • Mengoptimumkan set parameter MACD untuk meningkatkan ketepatan penghakiman trend

  • Pertimbangkan indikator Stoch dalam pelbagai kitaran masa untuk mengelakkan isyarat palsu

  • Dinamika penyesuaian Stop Loss Stop Loss Ratio untuk menyesuaikan diri dengan turun naik pasaran

  • Verifies untuk meningkatkan keberkesanan isyarat dengan menggunakan isyarat lain

  • Parameter dioptimumkan mengikut ciri-ciri pelbagai jenis dan tempoh dagangan

  • Menambah algoritma pembelajaran mesin untuk membantu menentukan arah trend

  • Indeks Kuantiti Kuantiti, mengelakkan tidak mencukupi atau terlalu banyak kenaikan

ringkaskan

Strategi ini mengintegrasikan kelebihan kedua-dua penunjuk MACD dan Stoch, dengan mengendali risiko, untuk menangkap trend garis tengah dan panjang untuk berdagang. Mengukuhkan kesan strategi melalui pengoptimuman parameter, penetapan stop loss, pengesahan isyarat dan sebagainya, dapat disesuaikan dengan pelbagai keadaan pasaran, dengan nilai perdagangan sebenar.

Kod sumber strategi
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// strategy(title="自用策略v0.2",calc_on_order_fills=false,calc_on_every_tick =false, initial_capital=10000,commission_type=strategy.commission.percent, commission_value=0.00,overlay = true,default_qty_type = strategy.cash, default_qty_value = 10000)



//STOCH
periodD = input(3, title="%D Smoothing", minval=1)
periodK = input(14, title="%K Length", minval=1)
periodK2 = input(42, title="%K2 Length", minval=1)
periodK3 = input(126, title="%K3 Length", minval=1)
periodK4 = input(378, title="%K4 Length", minval=1)
periodK5 = input(14, title="%K5 Length", minval=1)
periodK6 = input(30, title="%K6 Length", minval=1)
smoothK = input(1, title="%K Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
k2 = sma(stoch(close, high, low, periodK2), smoothK*3)
k3 = sma(stoch(close, high, low, periodK3), smoothK*3*3)
k4 = sma(stoch(close, high, low, periodK4), smoothK*3*3*3)
d = sma(k, periodD)
all = (k+k2*3+k3*9+k4*18)/31
allp = sma(all, periodK6)



buffer = input(title="buffer", type=input.float, defval=0.3, minval = 0, step = 0.1)
b1 = close[1]* (1+buffer/100)
b2 = close[1]* (1-buffer/100)

//MACD
fast_length = input(title="Fast Length", defval=144)
slow_length = input(title="Slow Length", defval=312)

src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 200, defval = 108)
sma_source = input(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
MACDCHA = input(title="MACDCHA步长", defval=30)
MACDCHA2 = input(title="MACDCHA步长2", defval=20)
MACDCHA3 = input(title="MACDCHA步长3", defval=10)
MACDCHA4 = input(title="MACDCHA步长4", defval=5)
MACDCHA5 = input(title="MACDCHA步长5", defval=3)
MACDCHA6 = input(title="MACDCHA步长6", defval=1)
HISTCHA = input(title="hist步长", defval=50)
macdcha = hist - hist[MACDCHA]
macdcha2 = hist - hist[MACDCHA2]
macdcha3 = hist - hist[MACDCHA3]
macdcha4 = hist - hist[MACDCHA4]
macdcha5 = hist - hist[MACDCHA5]
macdcha6 = hist - hist[MACDCHA6]
histcha = hist[HISTCHA]
var true2 = 0
var true2_1 = 0
var true2_2 = 0
var true2_3 = 0
var true2_4 = 0//延伸
var fangxiang =0
//确认方向
if(macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0)
    fangxiang := 1
    true2_2 := 0
if(macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0)
    fangxiang :=-1
    true2_1 := 1
//k3min = min(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
//k3max = max(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
allpmax = max(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
allpmin = min(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
if(histcha < 0 and macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0 and d < 20 and volume > volume[1] and true2_1 == 1 and allp>allp[1] and allp <80)//and k3max < 80  //and k3min < 30 and k3 >20 and k2<50
    strategy.entry("开多", true, comment = "开多") // and close > close[1] and cci1> MEA1
    true2_1 :=0
if(d >80)
    strategy.close( "开多", comment = "平多")
    true2_1 :=1

stop_loss=input(4, "做多止损 %", minval = 1, step = 1)
sl = strategy.position_avg_price * (1-stop_loss/100)
close_Stop = close < sl
if(close_Stop or(allp<20 and allp[1]>20))
    strategy.close( "开多", comment = "做多止损")
    true2_1 :=1
Target_profit=input(10, "做多止盈 %", minval = 1, step = 1)
tp = strategy.position_avg_price * (1+Target_profit/100)
close_Target = close > tp
strategy.close("开多", when = close_Target, comment ="做多盈利")


//空
if(histcha > 0 and macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0 and d > 80 and volume > volume[1] and true2_2 == 1 and allp<allp[1] and allp >20) // and k3max>70 and k3<80
    //strategy.entry("开空", comment = "开空") 
    strategy.entry("开空", strategy.short,comment ="开空")
    true2_2 := 0
if( d <20)
   // strategy.close(  comment = "平空")
    strategy.close("开空",  comment = "平空")
    true2_2 := 1

stop_loss2=input(4, "做空止损 %", minval = 1, step = 1)
sl2 = strategy.position_avg_price * (1+stop_loss2/100)
close_Stop2 = close > sl2
if(close_Stop2 or(allp>80 and allp[1]<80))
    strategy.close( "开空", comment = "做空止损")
    true2_2 == 1
Target_profit2=input(10, "做空止盈 %", minval = 1, step = 1)
tp2 = strategy.position_avg_price * (1-Target_profit2/100)
close_Target2 = close < tp2
strategy.close("开空", when = close_Target2, comment ="做空盈利")