Đây là một chiến lược giao dịch định lượng Bitcoin dựa trên lợi nhuận hai lần, dừng lỗ hai lần và dừng lỗ kéo theo. Nó sử dụng EMA và WMA chéo như tín hiệu đầu vào, áp dụng phương pháp quản lý rủi ro lợi nhuận hai lần và dừng lỗ hai lần, và áp dụng dừng lỗ kéo theo sau khi lợi nhuận đầu tiên đạt được để khóa lợi nhuận một phần trong khi tìm kiếm lợi nhuận lớn hơn.
Mở dài khi EMA vượt qua WMA từ dưới, và mở ngắn khi EMA vượt qua dưới WMA từ trên.
Về phía lợi nhuận, có hai mục tiêu lợi nhuận. mục tiêu lợi nhuận đầu tiên được đặt ở mức 20 pips trên giá nhập cảnh, và mục tiêu lợi nhuận thứ hai được đặt ở mức 40 pips trên giá nhập cảnh.
Ở phía stop loss, cũng có hai stop loss. Stop loss đầu tiên được đặt ở mức 20 pips dưới giá nhập cảnh, và stop loss thứ hai được đặt ở mức giá nhập cảnh.
Khi lợi nhuận đầu tiên được kích hoạt, 50% vị trí sẽ được đóng, và dừng lỗ sẽ được theo dõi đến giá nhập để khóa lợi nhuận, trong khi tìm kiếm lợi nhuận lớn hơn từ mục tiêu lợi nhuận thứ hai.
Như vậy, có thể có ba kết quả có thể cho mỗi giao dịch:
Lợi thế lớn nhất của chiến lược này nằm trong phương pháp quản lý rủi ro của nó. Bằng cách thiết lập lợi nhuận hai lần và lỗ dừng hai lần, nó có thể khóa lợi nhuận một phần sau khi lợi nhuận đầu tiên đạt được, trong khi tiếp tục tìm kiếm lợi nhuận lớn hơn. Điều này có thể cải thiện đáng kể lợi nhuận.
Một lợi thế khác là bằng cách chia một giao dịch duy nhất thành ba kết quả có thể xảy ra, nó làm giảm xác suất mất mát tối đa, làm cho lợi nhuận tổng thể nhất quán hơn.
Rủi ro chính của chiến lược này đến từ việc thiết lập stop loss. Nếu khoảng cách stop loss quá rộng, nó có thể dẫn đến lỗ giao dịch đơn quá lớn. Nếu khoảng cách stop loss quá chật chội, nó có thể bị dừng lại sớm bởi tiếng ồn của thị trường.
Một rủi ro khác là vị trí còn lại sau khi lấy lợi nhuận đầu tiên vẫn mang lại rủi ro mất mát. Nếu lỗ tiếp theo vượt quá lợi nhuận lấy lợi nhuận đầu tiên, nó sẽ bù đắp một phần hoặc tất cả lợi nhuận thực hiện. Điều này cần phải được giải quyết bằng cách theo dõi chặt chẽ mức dừng lỗ để bảo vệ lợi nhuận bị khóa.
Các lĩnh vực sau đây có thể được tối ưu hóa cho chiến lược:
Kiểm tra các kết hợp tham số khác nhau để tìm các tham số tối ưu, chẳng hạn như thử nghiệm 15 pips, 25 pips lấy khoảng cách lợi nhuận / dừng lỗ.
Hãy thử các kết hợp chỉ số kỹ thuật khác cho tín hiệu đầu vào, chẳng hạn như KDJ, MACD crossover.
Tối ưu hóa tỷ lệ phần trăm vị trí đóng cửa khi lấy lợi nhuận đầu tiên, chẳng hạn như 50% có thể không tối ưu, 30% hoặc 70% có thể hoạt động tốt hơn tiềm năng.
Kiểm tra các thiết lập khác nhau cho tốc độ dừng lỗ để cân bằng khóa lợi nhuận và cho giá đủ không gian để dao động.
Kết luận, đây là một chiến lược tổng thể mạnh mẽ, có thể cải thiện đáng kể lợi nhuận và giảm rủi ro đuôi thông qua cơ chế lấy lợi nhuận kép, dừng lỗ kép và dừng lỗ cuối cùng.
/*backtest start: 2024-01-11 00:00:00 end: 2024-01-18 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true) // Strategy Buy = input(true) Sell = input(true) // Date Range start_year = input(title='Start year' ,defval=2020) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_hour = input(title='Start hour' ,defval=0) start_minute = input(title='Start minute' ,defval=0) end_time = input(title='set end time?',defval=false) end_year = input(title='end year' ,defval=2019) end_month = input(title='end month' ,defval=12) end_day = input(title='end day' ,defval=31) end_hour = input(title='end hour' ,defval=23) end_minute = input(title='end minute' ,defval=59) // MA ema_period = input(title='EMA period',defval=10) wma_period = input(title='WMA period',defval=20) ema = ema(close,ema_period) wma = wma(close,wma_period) // Entry Condition buy = crossover(ema,wma) and nz(strategy.position_size) == 0 and Buy sell = crossunder(ema,wma) and nz(strategy.position_size) == 0 and Sell // Pips pip = input(20)*10*syminfo.mintick // Trading parameters // var bool LS = na var bool SS = na var float EP = na var float TVL = na var float TVS = na var float TSL = na var float TSS = na var float TP1 = na var float TP2 = na var float SL1 = na var float SL2 = na if buy or sell and strategy.position_size == 0 EP := close SL1 := EP - pip * (sell?-1:1) SL2 := EP - pip * (sell?-1:1) TP1 := EP + pip * (sell?-1:1) TP2 := EP + pip * 2 * (sell?-1:1) // current trade direction LS := buy or strategy.position_size > 0 SS := sell or strategy.position_size < 0 // adjust trade parameters and trailing stop calculations TVL := max(TP1,open) - pip[1] TVS := min(TP1,open) + pip[1] TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS if LS and high > TP1 if open <= TP1 SL2:=min(EP,TSL) if SS and low < TP1 if open >= TP1 SL2:=max(EP,TSS) // Closing conditions close_long = LS and open < SL2 close_short = SS and open > SL2 // Buy strategy.entry("buy" , strategy.long, when=buy and not SS) strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1) strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2) // Sell strategy.entry("sell" , strategy.short, when=sell and not LS) strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1) strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2) // Plots a=plot(strategy.position_size > 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) b=plot(strategy.position_size < 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) c=plot(strategy.position_size > 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) d=plot(strategy.position_size < 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) e=plot(strategy.position_size > 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) f=plot(strategy.position_size < 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) g=plot(strategy.position_size >= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) h=plot(strategy.position_size <= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) plot(ema,title="ema",color=#fff176) plot(wma,title="wma",color=#00ced1)