Strategi ini didasarkan pada MACD untuk menentukan arah tren, dan digabungkan dengan indikator Stoch untuk melakukan operasi jual beli yang spesifik. Strategi ini menggunakan MACD dengan periode yang lebih panjang untuk menentukan tren besar, dan Stoch dengan periode yang lebih pendek untuk masuk ke pasar.
Menggunakan indikator MACD untuk menentukan arah tren besar
Perhitungan EMA periode panjang garis cepat, garis lambat dan MACD kolom
Perbandingan perubahan MACD periode yang berbeda untuk menentukan arah tren
Menggunakan indikator Stoch untuk menentukan titik jual beli
Perhitungan % K dan % D
Stoch muncul di dekat zona overbought dan overbought, dan mengangkat kembali, sebagai sinyal buy and sell
Kombinasi arah tren dan sinyal Stoch untuk melakukan operasi jual beli
Ketika MACD periode besar naik, Stoch membeli sinyal muncul, melakukan lebih banyak
Ketika MACD periode besar turun, Stoch menjual sinyal muncul, shorting
Pengaturan Stop Loss Stop Stop dan Pengelolaan Uang Optimal
Strategi ini menggabungkan pelacakan tren dengan indikator overbought dan oversold untuk secara efektif menangkap tren lini tengah dan panjang.
MACD menentukan arah besar, Stoch melakukan rincian perdagangan, dapat mengontrol risiko secara efektif
Memanfaatkan kombinasi antara indikator untuk membentuk strategi indikator
Menetapkan Stop Loss Barrier dan Mengelola Risiko Perdagangan
Parameter strategi dapat dioptimalkan untuk lingkungan pasar yang berbeda
Perhitungan tren garis tengah dan panjang mungkin salah, menyebabkan kerugian perdagangan yang berlawanan
Indeks Stoch menghasilkan sinyal palsu yang menyebabkan keuntungan rendah atau kerugian
Jika tren berubah, stop loss dapat ditembus, memperluas kerugian
Terlalu besar atau terlalu kecil target pendapatan akan mempengaruhi efektivitas strategi.
Parameter yang tidak tepat dan tidak beradaptasi dengan perubahan lingkungan pasar dapat menyebabkan kegagalan strategi
Risiko dapat dikurangi dengan cara mengoptimalkan metode penilaian tren, memverifikasi sinyal Stoch, dan menyesuaikan posisi stop loss
Mengoptimalkan kombinasi parameter MACD untuk meningkatkan akurasi penilaian tren
Pertimbangkan indikator Stoch dengan periode waktu yang berbeda untuk menghindari sinyal palsu
Dinamiskan Stop Loss Stop Loss Ratio untuk Beradaptasi dengan Fluktuasi Pasar
Verifies digabungkan dengan sinyal indikator lainnya untuk meningkatkan efektivitas sinyal
Parameter dioptimalkan sesuai dengan karakteristik varietas dan periode perdagangan yang berbeda
Menambahkan algoritma pembelajaran mesin untuk membantu menentukan arah tren
Indikator kuantitatif gabungan untuk menghindari penurunan yang tidak memadai atau terlalu tinggi
Strategi ini mengintegrasikan keuntungan dari kedua indikator MACD dan Stoch, dengan asumsi pengendalian risiko, untuk menangkap tren garis tengah dan panjang untuk berdagang. Efek strategi diperkuat dengan cara optimasi parameter, pengaturan stop loss, dan verifikasi sinyal, dapat beradaptasi dengan berbagai lingkungan pasar, dan memiliki nilai perdagangan nyata.
/*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 ="做空盈利")