Xu hướng xác nhận ba lần theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-01-05 15:46:21
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch bằng cách sử dụng một cơ chế xác nhận ba lần, tức là chỉ số động lực xác nhận xu hướng thị trường mạnh mẽ, chỉ số Supertrend xác nhận hướng xu hướng và chỉ số EMA cung cấp xác minh bổ sung về hướng xu hướng. Chỉ khi cả ba chỉ số đáp ứng các tiêu chí, chiến lược sẽ tạo ra các tín hiệu giao dịch dài hoặc ngắn, do đó đảm bảo chỉ có cơ hội giao dịch có xác suất cao được chọn.

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

  1. Chỉ số động lực (Momentum RSI)

    • Chỉ số Momentum RSI được sử dụng để xác định sức mạnh của xu hướng thị trường.

    • Các tín hiệu giao dịch chỉ được tạo ra trong thời gian thị trường tăng hoặc giảm mạnh.

  2. Phân tích siêu xu hướng

    • Đường siêu xu hướng đại diện cho hướng xu hướng thị trường. Các vị trí chỉ được xem xét khi giá vượt qua đường siêu xu hướng.

    • Khi giá vượt qua đường Supertrend lên, nó được chuyển thành xu hướng tăng; khi nó phá vỡ xuống, nó chuyển thành xu hướng giảm.

  3. Chiến lược EMA

    • EMA và các đường xu hướng phụ trợ của nó được sử dụng để xác nhận hướng xu hướng.

Chỉ khi cả ba chỉ số đồng thời đáp ứng các điều kiện mở vị trí, các tín hiệu giao dịch thực sự sẽ được phát hành. Điều này làm giảm đáng kể số lượng tín hiệu sai và cải thiện sự ổn định của chiến lược.

Phân tích lợi thế

Chiến lược này có tính ổn định và lợi nhuận cực cao.

  1. Các cơ chế xác nhận nhiều hiệu quả lọc tiếng ồn và chỉ chọn các giao dịch có xác suất cao.

  2. Đường Supertrend có một lệnh dừng lỗ động để kiểm soát rủi ro hiệu quả.

  3. Kết hợp với đánh giá sức mạnh xu hướng, chỉ giao dịch trong xu hướng mạnh tránh rủi ro bổ sung.

  4. Chỉ số EMA cung cấp xác minh bổ sung để đảm bảo hướng giao dịch là chính xác.

  5. Hoàn toàn được điều chỉnh để các nhà giao dịch có thể tùy chỉnh khi cần thiết.

Phân tích rủi ro

Các rủi ro chính của chiến lược này xuất phát từ sự đột phá bất thường gây ra các tín hiệu giao dịch sai lầm.

  1. Rủi ro đột nhập giả: Tăng cơ chế xác minh đột nhập.

  2. Rủi ro phạm vi dao động lớn hơn: Điều chỉnh phù hợp phạm vi dừng lỗ.

  3. Rủi ro đảo ngược xu hướng: Giảm thời gian giữ, dừng lỗ kịp thời.

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

Các hướng chính để tối ưu hóa chiến lược này bao gồm:

  1. Tối ưu hóa tham số: Điều chỉnh các tham số chỉ số để phù hợp với nhiều giống hơn.

  2. Tăng độ lọc: Kết hợp nhiều chỉ số hơn để cải thiện chất lượng tín hiệu.

  3. Chiến lược tổng hợp: Kết hợp với các chiến lược khác để sử dụng các lợi thế bổ sung.

  4. Điều chỉnh tham số động: Điều chỉnh tự động các tham số dựa trên điều kiện thị trường.

  5. Học máy: Sử dụng các thuật toán để tự động tìm các thông số tối ưu.

Tóm lại

Chiến lược này đạt được một chiến lược giao dịch xác suất cao với nhiều xác nhận bằng cách kết hợp hiệu quả các chỉ số động lực, siêu xu hướng và EMA. Cơ chế xác minh đột phá nghiêm ngặt của nó cũng mang lại cho nó sự ổn định cực kỳ mạnh. Đồng thời, nó có khả năng tùy chỉnh và tối ưu hóa rất cao. Tóm lại, chiến lược này tích hợp các lợi thế của việc theo dõi xu hướng và giao dịch đột phá, làm cho nó trở thành một chiến lược giao dịch thuật toán rất hứa hẹn.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000)
//// author -  Baby_whale_to_moon

// MOM Rsi indicator 
group_mom_rsi = "Rsi Of Momentum "
len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend')
src2 = close
mom = src2 - src2[len]
rsi_mom = ta.rsi(mom, len)
mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend")

// Super Trend Ind
group_supertrend = "SuperTrend indicator"
atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend)
factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

// Ema Indicator
group_most = "Ema indicator"
src = input(close, 'Source Ema Ind',group = group_most)
AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most)
Trail1 = ta.ema(src, AP2) //Ema func
AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100
SL2 = Trail1 * AF2  // Stoploss Ema
Trail2 = 0.0
iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2
iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1
Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2

//Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2)

//TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2)
//TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2)
//fill(TS1, TS2, Bull  ? color.green : color.red, transp=90)


// Strategy Sett
group_strategy = "Settings of Strategy"
Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy)
End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy)
dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy)
trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score')

v2 = input(false, title="Version 2 -  Uses SL/TP Statically", group =group_strategy)
v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100
v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100

v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input)
v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input)

v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input)
v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input)

group_line = "Line Settings"
show_sl_tp = input.bool(title='  Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line)
show_trend_line = input.bool(title='  Show Trend Line',inline = '3' ,defval=true, group =group_line)
stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line)
up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line)
down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line)

//plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2)
// plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)

// plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_long  ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)


TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour  : na, linewidth=2)

// bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na)
// bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na)

Time_interval = true
buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval
sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval


// Strategy entries 
if strategy.opentrades == 0 and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if strategy.opentrades == 0 and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_0', strategy.short, qty=dollar / close)


if close < supertrend and v1
    strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size > 0
    strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long  , qty_percent=100)
    
if close > supertrend and v1
    strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size < 0
    strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)
    

Thêm nữa