Chiến lược này xác định hướng xu hướng dựa trên chỉ số MACD và đưa ra các quyết định mua và bán cụ thể bằng chỉ số Stoch.
Đánh giá hướng xu hướng chính bằng chỉ số MACD
Tính toán EMA nhanh, EMA chậm và biểu đồ MACD
So sánh các biến động MACD trong các chu kỳ khác nhau để xác định xu hướng
Xác định các điểm mua và bán cụ thể bằng chỉ số Stoch
Tính toán đường %K và đường %D
Sự khác biệt gần khu vực mua quá mức hoặc bán quá mức, với Stoch bật trở lại như tín hiệu giao dịch
Ra quyết định mua và bán dựa trên hướng xu hướng và tín hiệu Stoch
Đi dài khi MACD tăng và tín hiệu mua chứng khoán xuất hiện
Đi ngắn khi chu kỳ chính MACD giảm và chứng khoán bán tín hiệu xuất hiện
Thiết lập dừng lỗ và lấy lợi nhuận để tối ưu hóa quản lý rủi ro
Kết hợp các chỉ số theo xu hướng và mua quá mức giúp nắm bắt các xu hướng trung và dài hạn một cách hiệu quả
MACD xác định hướng chính trong khi Stoch làm việc chi tiết giao dịch làm giảm rủi ro
Sử dụng đầy đủ các kết hợp chỉ số để hình thành các chiến lược có hệ thống
Thiết lập stop loss và take profit kiểm soát rủi ro giao dịch
Các thông số tối ưu hóa thích nghi với các điều kiện thị trường khác nhau
Phán quyết xu hướng trung và dài hạn không chính xác có thể dẫn đến tổn thất giao dịch ngược lại
Các tín hiệu sai từ Stoch gây ra lợi nhuận hoặc lỗ không đủ
Điểm dừng lỗ có thể bị phá vỡ khi xu hướng thay đổi, mở rộng lỗ
Mức mục tiêu lợi nhuận không phù hợp ảnh hưởng đến hiệu suất chiến lược
Các thông số không hiệu quả và không thích nghi với môi trường thay đổi có thể làm mất hiệu quả chiến lược
Các rủi ro có thể được giảm bằng cách tối ưu hóa phán đoán xu hướng, xác minh các tín hiệu Stoch, điều chỉnh dừng lỗ và lấy lợi nhuận, v.v.
Tối ưu hóa hỗn hợp tham số MACD để cải thiện độ chính xác đánh giá xu hướng
Xem xét nhiều chu kỳ Stoch để tránh tín hiệu sai
Điều chỉnh năng động tỷ lệ dừng lỗ và lấy lợi nhuận để điều chỉnh biến động thị trường
Thêm các tín hiệu chỉ số khác để xác minh và cải thiện tính hợp lệ
Tối ưu hóa các tham số dựa trên các đặc điểm sản phẩm khác nhau và các phiên giao dịch
giới thiệu các mô hình học máy để hỗ trợ đánh giá hướng xu hướng
Tích hợp các chỉ số âm lượng để tránh không đủ theo đuổi hoặc theo dõi quá mức
Chiến lược này tích hợp các điểm mạnh của các chỉ số MACD và Stoch để nắm bắt xu hướng trung hạn đến dài hạn trong khi kiểm soát rủi ro. Nó có thể có hiệu quả trong các điều kiện thị trường khác nhau bằng cách tối ưu hóa các thông số, thiết lập dừng lỗ và lấy lợi nhuận, xác minh tín hiệu, v.v. Vẫn còn chỗ để cải thiện bằng cách điều chỉnh thêm các thông số, cải thiện độ chính xác tín hiệu và kết hợp học máy. Chiến lược có thể toàn diện và thông minh hơn.
/*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 ="做空盈利")