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.
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
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
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
Tetapkan Stop Loss Stop Stop dan Optimumkan Pengurusan Wang
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
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
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
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.
/*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 ="做空盈利")