Chiến lược dừng lỗ và lấy lợi nhuận dựa trên mô hình Doji

Tác giả:ChaoZhang, Ngày: 2024-02-02 17:17:38
Tags:

img

Tổng quan

Chiến lược này dựa trên mô hình Doji. Khi mô hình Doji xuất hiện, lệnh dừng mua được đặt giữa mức cao của Doji và mức cao của nến trước đó, và lệnh dừng bán được đặt giữa mức thấp của Doji và mức thấp của nến trước đó. Khi giá kích hoạt các lệnh dừng, bạn có thể chọn thoát với lỗ dừng cố định và kiếm lợi nhuận, hoặc sử dụng giá cao nhất và thấp nhất của mô hình Doji như dừng lỗ và kiếm lợi nhuận. Chiến lược này hoạt động tốt trên các khung thời gian cao hơn như hàng ngày và hàng tuần để lọc tiếng ồn.

Chiến lược logic

Khi một mô hình Doji xuất hiện, nó chỉ ra một sự thay đổi trong mối quan hệ cung và cầu, với các lực trở nên cân bằng hơn, có thể dẫn đến sự đảo ngược giá. Chiến lược này tận dụng tín hiệu đảo ngược giá do Doji chỉ ra để nắm bắt cơ hội thông qua lệnh dừng. Cụ thể, các tiêu chí để xác định mô hình Doji là:

body=close-open 
range=high-low
abody=abs(body)
ratio=abody/range  
data=(abs(open - close) <= (high - low) * Doji)

Nếu abs ((open-close) <= (high-low) * Doji tham số, nó được coi là một mô hình Doji, và lệnh dừng sẽ được đặt.

longDist= longcandle[1] and range[1]>range? high: max(high,high[1])
shortDist= longcandle[1] and range[1]>range? low: min(low,low[1]) 

Nếu cơ thể của nến trước đó lớn, lệnh mua dừng được đặt giữa mức cao của Doji và mức cao của nến trước đó. Nếu nến trước đó có cơ thể nhỏ, lệnh mua dừng được đặt ở mức cao của Doji. Lệnh bán dừng theo cùng một logic.

Có hai lựa chọn để ra ngoài:

  1. Đặt lệnh dừng lỗ và lấy lợi nhuận cố định
strategy.exit("exit buy","buy stop",loss=SL, profit=TP, when=Use_SL_TP)
  1. Sử dụng giá cao nhất và thấp nhất của Doji như dừng lỗ và lấy lợi nhuận
strategy.close("buy stop",when=not Use_SL_TP and close<dojilow) 

Phân tích lợi thế

Những lợi thế của chiến lược này là:

  1. Dễ thực hiện.
  2. Tận dụng lợi thế của tín hiệu đảo ngược giá hiệu quả từ mô hình Doji.
  3. Các thông số dừng lỗ và lấy lợi nhuận có thể tùy chỉnh để kiểm soát rủi ro.
  4. Hoạt động tốt trên khung thời gian cao hơn để lọc ra tiếng ồn.

Phân tích rủi ro

Có một số rủi ro với chiến lược này:

  1. Mô hình Doji không phải lúc nào cũng dẫn đến sự đảo ngược giá, có thể phải đối mặt với việc dừng lỗ.
  2. Quá nhiều tiếng ồn trong tín hiệu Doji trong khung thời gian thấp hơn.
  3. Rủi ro mất mát không giới hạn mà không cần dừng lỗ và lấy lợi nhuận.

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

Một số cách để tối ưu hóa chiến lược:

  1. Tối ưu hóa tham số Doji cho các công cụ giao dịch khác nhau.
  2. Kiểm tra các kết hợp khác nhau của dừng lỗ và lấy lợi nhuận.
  3. Lỗi dừng động dựa trên ATR.
  4. Kết hợp với các chỉ số khác để xác định nhập khẩu tối ưu.

Kết luận

Hiệu suất tổng thể của chiến lược này là tốt. Bằng cách nắm bắt các cơ hội đảo ngược giá Doji, nó có thể tạo ra các tín hiệu giao dịch tốt. Cũng đơn giản để thực hiện và áp dụng trên nhiều công cụ. Với việc thử nghiệm và tối ưu hóa liên tục, bạn có thể mong đợi kết quả tốt hơn.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//This is a simple strategy based on Doji star candlestick
//It places two orders: buy stop at doji star high or previous candle high and sell stop at doji star low or previous candle low.
//This strategy works very well with high time frames like Weekly TF because it eliminates the noise in doji formation.
//

strategy("Doji strategy W", overlay=true, calc_on_every_tick=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)

//INPUTS
//MinDistance=input(100,'Minimum distance in ticks')
Use_SL_TP=input(true,'Use stop loss and take profit?')
TP=input(200,'Take Profit in ticks')
SL=input(200,'Stop Loss in tiks')
Doji = input(0.05, minval=0.01, title="Doji size", step=0.01)

//VARIABILI
body=close-open
range=high-low
abody=abs(body)
ratio=abody/range
longcandle= (ratio>0.6)

//Doji
data=(abs(open - close) <= (high - low) * Doji)
plotchar(data, title="Doji", text='Doji', color=black)
longDist= longcandle[1] and range[1]>range? high: max(high,high[1])
shortDist= longcandle[1] and range[1]>range? low: min(low,low[1])
dojilow=data==1?low:na
dojihigh=data==1?high:na

goStar=data==1?true:false
//////////////////////////////////////////////////////////////////

//STRATEGY

strategy.order("buy stop",true,stop=longDist,  oca_name="Dojy Entry",when=goStar)
strategy.order("sell stop",false,stop=shortDist, oca_name="Dojy Entry",when=goStar)

strategy.exit("exit buy","buy stop",loss=SL, profit=TP, when=Use_SL_TP)
strategy.exit("exit sell","sell stop",loss=SL,profit=TP, when=Use_SL_TP)

strategy.close("buy stop",when=not Use_SL_TP and close<dojilow)
strategy.exit("exit buy","buy stop",profit=TP, when=not Use_SL_TP)
strategy.close("sell stop",when=not Use_SL_TP and close>dojihigh)
strategy.exit("exit sell","sell stop",profit=TP, when=not Use_SL_TP)
    
    



Thêm nữa