Chiến lược số lượng Bitcoin

Tác giả:ChaoZhang, Ngày: 2024-01-19 15:07:04
Tags:

img

Tổng quan

Đâ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.

Chiến lược logic

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:

  1. Giá phải dừng lỗ trước, mất 2% vốn.
  2. Giá lần đầu tiên đạt được lợi nhuận đầu tiên cho lợi nhuận 1%, sau đó đạt được lỗ dừng thứ hai, kết thúc với lợi nhuận 1%.
  3. Giá lần đầu tiên đạt được lợi nhuận đầu tiên cho lợi nhuận 1%, tiếp tục chạy và lần thứ hai đạt được lợi nhuận, kết thúc với lợi nhuận 3%.

Phân tích lợi thế

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.

Phân tích rủi ro

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.

Hướng dẫn tối ưu hóa

Các lĩnh vực sau đây có thể được tối ưu hóa cho chiến lược:

  1. 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ỗ.

  2. 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.

  3. 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.

  4. 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

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)


Thêm nữa