Chiến lược định lượng dừng lỗ di chuyển dừng lỗ và dừng lỗ kép


Ngày tạo: 2024-01-19 15:07:04 sửa đổi lần cuối: 2024-01-19 15:07:04
sao chép: 3 Số nhấp chuột: 598
1
tập trung vào
1617
Người theo dõi

Chiến lược định lượng dừng lỗ di chuyển dừng lỗ và dừng lỗ kép

Tổng quan

Chiến lược này là một chiến lược giao dịch định lượng Bitcoin dựa trên hai điểm dừng, hai điểm dừng và dừng di động. Chiến lược này sử dụng giao dịch EMA và WMA như một tín hiệu đầu vào, sử dụng phương pháp quản lý rủi ro hai điểm dừng hai điểm dừng, sau khi điểm dừng đầu tiên đạt được, sử dụng bảo đảm phần lợi nhuận bằng dừng di động, tiếp tục theo đuổi lợi nhuận nhiều hơn.

Nguyên tắc chiến lược

Khi EMA đi qua WMA từ trên xuống, hãy nhập thêm; khi EMA đi qua WMA từ trên xuống, hãy nhập trống.

Về điểm dừng, thiết lập hai điểm dừng, điểm dừng đầu tiên được thiết lập 20 điểm trên điểm vào và điểm dừng thứ hai được thiết lập 40 điểm trên điểm vào.

Về Stop Loss, cũng thiết lập hai điểm Stop Loss, điểm Stop Loss đầu tiên được thiết lập dưới điểm vào 20 điểm, điểm Stop Loss thứ hai được thiết lập là điểm vào chính nó.

Khi giá chạm điểm dừng đầu tiên, hãy xóa 50% vị trí và di chuyển điểm dừng sang điểm vào, tiếp tục theo đuổi điểm dừng thứ hai.

Theo đó, chiến lược này có ba kết quả:

  1. Giá chạm điểm dừng lỗ đầu tiên, mất 2% giá trị vốn;
  2. Giá chạm điểm dừng đầu tiên và có lợi nhuận 1%, sau đó chạm điểm dừng thứ hai và cuối cùng có lợi nhuận 1%;
  3. Giá chạm điểm dừng đầu tiên, thu lợi nhuận 1%, sau đó tiếp tục hoạt động chạm điểm dừng thứ hai, thu 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 ở hệ thống quản lý rủi ro. Bằng cách thiết lập hai dừng hai dừng, bạn có thể khóa lợi nhuận sau khi thu được một phần lợi nhuận, và tiếp tục theo đuổi lợi nhuận cao hơn bằng cách sử dụng dừng di chuyển. Điều này có thể làm tăng đáng kể khả năng sinh lợi.

Một lợi thế khác là chiến lược này phân chia kết quả của một giao dịch đơn lẻ thành ba trường hợp, làm giảm xác suất mất một lần và làm cho lợi nhuận tổng thể trở nên cân bằng hơn. Chiến lược thông thường chỉ có hai kết quả, hoặc dừng lỗ 2% hoặc thu lợi nhuận lớn hơn 2%. Trong khi đó, chiến lược này có ba kết quả, lần lượt là mất 2%, thu 1%, và thu 3%. Điều này cũng kiểm soát tốt hơn rủi ro đuôi.

Phân tích rủi ro

Rủi ro của chiến lược này chủ yếu đến từ thiết lập điểm dừng lỗ. Khoảng cách dừng lỗ quá thoải mái có thể dẫn đến tổn thất đơn lẻ quá lớn; Khoảng cách dừng lỗ quá hẹp có thể bị tiếng ồn thị trường đánh bật. Điều này cần thiết để thiết lập khoảng cách dừng lỗ phù hợp dựa trên đặc điểm và tỷ lệ biến động của các giống khác nhau.

Một rủi ro khác là có nguy cơ mất một phần của vị trí vẫn được giữ sau điểm dừng đầu tiên. Nếu thua lỗ vượt quá lợi nhuận của điểm dừng đầu tiên, một phần hoặc toàn bộ lợi nhuận sẽ bị bù đắp. Điều này đòi hỏi phải thực hiện nghiêm ngặt lệnh dừng di chuyển để khóa lợi nhuận.

Hướng tối ưu hóa

Chính sách này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Kiểm tra các kết hợp tham số khác nhau để tìm các thiết lập tham số tối ưu. Ví dụ: có thể kiểm tra 15 điểm, 25 điểm dừng dừng khoảng cách.

  2. Thử kết hợp các chỉ số khác, chẳng hạn như KDJ, MACD và các tín hiệu chỉ số khác để quyết định nhập học.

  3. Tỷ lệ vị trí được tối ưu hóa cho điểm dừng đầu tiên là 50% phù hợp hoặc 30% hoặc 70% tốt hơn.

  4. Kiểm tra các thiết lập tốc độ theo dõi lỗ di động, đảm bảo giảm thiểu tối đa không gian thua lỗ trong khi đảm bảo lợi nhuận.

Tóm tắt

Chiến lược này rất ổn định, có thể làm tăng đáng kể mức lợi nhuận và giảm rủi ro đuôi bằng cách sử dụng hai điểm dừng và hai điểm dừng di động. Ngoài ra, có rất nhiều không gian để tối ưu hóa và có thể đạt được hiệu quả tốt hơn bằng cách điều chỉnh các tham số và kết hợp các chỉ số.

Mã nguồn chiến lược
/*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)