Tài nguyên đang được tải lên... tải...

Chiến lược kết hợp xu hướng đảo ngược và chiến lược dừng lỗ động

Tác giả:ChaoZhang, Ngày: 2024-02-05 09:54:13
Tags:

img

Tổng quan

Chiến lược này kết hợp một chiến lược nắm bắt xu hướng đảo ngược và chiến lược dừng lỗ động để nắm bắt xu hướng đảo ngược trong khi kiểm soát rủi ro bằng các điểm dừng năng động.

Chiến lược logic

Chiến lược nắm bắt xu hướng đảo ngược

Chiến lược này dựa trên giá trị K và D của Stochastic Oscillator. Nó tạo ra tín hiệu mua khi giá giảm trong hai ngày liên tiếp trong khi K tăng trên D. Nó tạo ra tín hiệu bán khi giá tăng trong hai ngày trong khi K giảm dưới D. Điều này bắt được xu hướng đảo ngược giá.

Chiến lược dừng lỗ động

Chiến lược này thiết lập stop loss năng động dựa trên biến động giá và lệch. Nó tính toán biến động của mức cao nhất và thấp nhất gần đây và đánh giá xem nó có nằm trong kênh trên hoặc xuống dựa trên lệch, sau đó thiết lập giá dừng năng động phù hợp. Điều này điều chỉnh vị trí dừng dựa trên điều kiện thị trường.

Hai chiến lược làm việc cùng nhau để bắt tín hiệu đảo ngược và thiết lập các điểm dừng năng động để kiểm soát rủi ro.

Phân tích lợi thế

  • Các điểm đảo ngược giá bắt, tốt cho giao dịch đảo ngược
  • Các điểm dừng động điều chỉnh theo môi trường thị trường
  • Chứng nhận tín hiệu hai loại tránh tín hiệu sai
  • Kiểm soát rủi ro và đảm bảo lợi nhuận

Phân tích rủi ro

  • Rủi ro thất bại đảo ngược, tín hiệu đảo ngược có thể thất bại
  • Rủi ro thông số, các thông số sai có thể ảnh hưởng đến hiệu suất.
  • Rủi ro thanh khoản: Một số sản phẩm có thanh khoản kém để ngăn chặn lỗ.

Rủi ro có thể được kiểm soát bằng cách tối ưu hóa tham số, dừng lỗ nghiêm ngặt, chọn các sản phẩm có thanh khoản tốt.

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

  • Tối ưu hóa các tham số ngẫu nhiên cho sự kết hợp tốt nhất
  • Tối ưu hóa các thông số dừng cho vị trí dừng tốt nhất
  • Thêm bộ lọc để tránh mở trên thị trường phạm vi
  • Thêm kích cỡ vị trí để giới hạn lỗ tối đa

Tối ưu hóa toàn diện cho phép chiến lược để bắt được sự đảo ngược trong khi kiểm soát rủi ro.

Tóm lại

Chiến lược này kết hợp bắt kịp xu hướng đảo ngược và dừng động cho giao dịch ngắn hạn ổn định. Với tối ưu hóa và giám sát liên tục, nó có tiềm năng kiếm lợi nhuận ổn định.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//  The Kase Dev Stops system finds the optimal statistical balance between letting profits run, 
//  while cutting losses.  Kase DevStop seeks an ideal stop level by accounting for volatility (risk),
//  the variance in volatility (the change in volatility from bar to bar), and volatility skew 
//  (the propensity for volatility to occasionally spike incorrectly).
//  Kase Dev Stops are set at points at which there is an increasing probability of reversal against 
//  the trend being statistically significant based on the log normal shape of the range curve.  
//  Setting stops will help you take as much risk as necessary to stay in a good position, but not more.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KaseDevStops(Length, Level) =>
    pos = 0.0
    RWH = (high - low[Length]) / (atr(Length) * sqrt(Length))
    RWL = (high[Length] - low) / (atr(Length) * sqrt(Length))
    Pk = wma((RWH-RWL),3)
    AVTR = sma(highest(high,2) - lowest(low,2), 20)
    SD = stdev(highest(high,2) - lowest(low,2),20)
    Val4 = iff(Pk>0, highest(high-AVTR-3*SD,20), lowest(low+AVTR+3*SD,20))
    Val3 = iff(Pk>0, highest(high-AVTR-2*SD,20), lowest(low+AVTR+2*SD,20))
    Val2 = iff(Pk>0, highest(high-AVTR-SD,20), lowest(low+AVTR+SD,20))
    Val1 = iff(Pk>0, highest(high-AVTR,20), lowest(low+AVTR,20))
    ResPrice = iff(Level == 4, Val4,
                 iff(Level == 3, Val3,
                  iff(Level == 2, Val2,
                     iff(Level == 1, Val1, Val4))))
    pos := iff(close < ResPrice , -1, 1)
    pos

strategy(title="Combo Backtest 123 Reversal & Kase Dev Stops", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthKDS = input(30, minval=2, maxval = 100)
LevelKDS = input(title="Trade From Level", defval=4, options=[1, 2, 3, 4])
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKaseDevStops = KaseDevStops(LengthKDS, LevelKDS)
pos = iff(posReversal123 == 1 and posKaseDevStops == 1 , 1,
	   iff(posReversal123 == -1 and posKaseDevStops == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa