Chiến lược này dựa trên chỉ số MACD để xác định hướng xu hướng và kết hợp với chỉ số Stoch để thực hiện giao dịch mua bán cụ thể. Chiến lược sử dụng MACD có chu kỳ dài để xác định xu hướng lớn và Stoch có chu kỳ ngắn để đưa ra thị trường.
Sử dụng chỉ số MACD để đánh giá xu hướng
Tính toán đường EMA ngắn, đường chậm và đường MACD
So sánh sự thay đổi của MACD trong các giai đoạn khác nhau để đánh giá xu hướng
Sử dụng chỉ số Stoch để xác định điểm mua và bán cụ thể
Tính toán % K và % D
Stoch xuất hiện ở khu vực bán lẻ bán lẻ và quay trở lại, như là một tín hiệu mua bán
Kết hợp hướng xu hướng và tín hiệu Stoch để thực hiện giao dịch mua và bán
Khi MACD chu kỳ lớn tăng lên, Stoch mua tín hiệu xuất hiện, làm nhiều hơn
Khi MACD chu kỳ lớn giảm, Stoch bán tín hiệu xuất hiện, tháo lỗ
Thiết lập Stop Loss Stop, tối ưu hóa quản lý tiền
Chiến lược này kết hợp theo dõi xu hướng và chỉ số bán tháo để có thể nắm bắt hiệu quả xu hướng đường dài và đường trung.
MACD định hướng lớn, Stoch chi tiết giao dịch, có thể kiểm soát rủi ro hiệu quả
Tận dụng sự kết hợp giữa các chỉ số để hình thành chiến lược chỉ số
Thiết lập hệ thống chặn lỗ, quản lý rủi ro giao dịch
Các tham số chiến lược có thể được tối ưu hóa cho các môi trường thị trường khác nhau
Có thể có sự sai lầm trong việc đánh giá xu hướng đường dài và đường trung, dẫn đến thua lỗ trong giao dịch ngược
Chỉ số Stoch tạo ra tín hiệu sai khiến lợi nhuận thấp hoặc thua lỗ
Khi xu hướng thay đổi, điểm dừng có thể bị phá vỡ, mở rộng tổn thất
Mục tiêu lợi nhuận quá lớn hoặc quá nhỏ sẽ ảnh hưởng đến hiệu quả chiến lược
Các tham số không phù hợp và không thích ứng với môi trường thị trường thay đổi có thể dẫn đến chiến lược không hiệu quả
Có thể giảm rủi ro bằng cách tối ưu hóa phương pháp phán đoán xu hướng, xác nhận tín hiệu Stoch, điều chỉnh vị trí dừng lỗ
Tối ưu hóa các tham số MACD để đánh giá chính xác các xu hướng
Cân nhắc các chỉ số Stoch với nhiều chu kỳ thời gian để tránh tín hiệu giả
Động lực điều chỉnh tỷ lệ dừng lỗ để thích ứng với biến động thị trường
Verifies kết hợp với các tín hiệu chỉ số khác để tăng hiệu quả tín hiệu
Các tham số được tối ưu hóa theo các đặc điểm khác nhau của giống và thời gian giao dịch
Thêm các thuật toán học máy để hỗ trợ định hướng xu hướng
Chỉ số năng lượng kết hợp, tránh không đủ hoặc quá theo dõi đà giảm
Chiến lược này tích hợp lợi thế của hai chỉ số MACD và Stoch để nắm bắt xu hướng đường dài và đường dài trong khi kiểm soát rủi ro. Hiệu quả của chiến lược được tăng cường thông qua các phương thức tối ưu hóa tham số, thiết lập dừng lỗ và xác minh tín hiệu. Nó có thể thích ứng với nhiều môi trường thị trường và có giá trị giao dịch thực tế.
/*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 ="做空盈利")