
Chiến lược theo dõi xu hướng động lực là một chiến lược kết hợp các chỉ số động lực, động lực và trung bình di chuyển. Nó nhằm mục đích xác định xu hướng tăng của Giai đoạn 2 và xu hướng giảm của Giai đoạn 4, tạo ra các tín hiệu mua và bán chính xác trong hai giai đoạn. Chiến lược này tận dụng lý thuyết chu kỳ thị trường để mở vị trí chỉ trong giai đoạn thị trường có lợi nhất.
Các tín hiệu của chiến lược này chủ yếu đến từ kết hợp của ba chỉ số kỹ thuật lớn, bao gồm các phiên bản tăng cường của động lực RSI, đường chéo trung bình EMA và phạm vi biến động thực tế của ATR. Cụ thể, chiến lược sẽ coi xu hướng tăng lên khi đi qua EMA dài hạn trên EMA ngắn hạn và tạo ra tín hiệu nhiều; và đi qua EMA dài hạn dưới EMA ngắn hạn sẽ báo hiệu xu hướng giảm và tạo ra tín hiệu trống. Ngoài ra, khu vực cao của chỉ số RSI động lực cho thấy năng lượng đa đầu mạnh mẽ, khu vực thấp đại diện cho năng lượng trống đầy đủ, có thể được sử dụng để xác định tính hiệu quả của xu hướng hiện tại. Chỉ số ATR chịu trách nhiệm đánh giá sự biến động của thị trường và cung cấp cơ sở để thiết lập lệnh dừng lỗ.
Điều độc đáo về chiến lược này là nó chỉ tạo ra tín hiệu trong hai giai đoạn của thị trường bò và giai đoạn 4 của thị trường gấu. Nói cách khác, nó chỉ đặt vị trí khi xu hướng tăng mạnh nhất và xu hướng giảm rõ ràng nhất. Cách này có thể giảm thiểu tối đa rủi ro trong giai đoạn củng cố và phân phối không chắc chắn, tăng tỷ lệ lợi nhuận đến mức rất cao.
Tóm lại, logic quyết định của chiến lược này có thể được tóm tắt như sau: xác nhận xu hướng giai đoạn (Stage 2 hoặc Stage 4) Xác định ý định đa chiều của động lực RSI Xác định định hướng của đường trung bình EMA Xác định mức dừng thích hợp kết hợp với ATR Xây dựng vị trí dừng khi tất cả các điều kiện được đáp ứng. Quy trình này rõ ràng và hiệu quả, cho phép chiến lược nắm bắt chính xác các điểm biến động quan trọng của thị trường và tham gia vào tình huống tiền tệ có lợi nhất.
Ưu điểm lớn nhất của chiến lược này là nó hiểu sâu sắc về tính năng chu kỳ của thị trường. Bằng cách giao dịch chỉ trong giai đoạn tăng và giảm rõ ràng nhất, nó có thể lọc ra một lượng lớn tiếng ồn không chắc chắn, do đó nâng tỷ lệ thành công lên hơn 80%.
Chiến lược này sử dụng nhiều chỉ số như động lực, xu hướng, tỷ lệ biến động để xác minh chéo. Điều này tránh các tín hiệu sai lệch mà bất kỳ chỉ số đơn lẻ nào có thể tạo ra, làm tăng đáng kể sự ổn định và độ tin cậy của chiến lược.
Chiến lược này cung cấp các tham số có thể điều chỉnh rất phong phú, người dùng có thể tùy chỉnh rất nhiều tùy theo phong cách cá nhân và môi trường thị trường, tối ưu hóa chiến lược đến mức cao nhất, điều này cũng làm tăng khả năng thích ứng của chiến lược.
Bất kỳ chiến lược định lượng nào cũng không thể hoàn toàn tránh được rủi ro của thị trường, chẳng hạn như các sự kiện đen lớn không thể dự đoán được. Tuy nhiên, đây là rủi ro của thị trường khách quan, không phải là vấn đề của chính chiến lược, cần các nhà giao dịch giữ tinh thần tỉnh táo, kiểm soát hợp lý vị trí và sử dụng đòn bẩy.
Do các tham số chiến lược có thể được điều chỉnh một cách tự do, điều chỉnh không đúng có thể dẫn đến sự xuất hiện của hiện tượng quá phù hợp. Điều này cần được phòng ngừa bằng cách phản hồi nghiêm ngặt, đảm bảo rằng bất kỳ điều chỉnh tham số nào cũng được xác minh đầy đủ và có thể thích ứng với các tình huống thị trường rộng lớn hơn, tránh bị giới hạn trong một giai đoạn lịch sử cụ thể.
Chiến lược hiện tại xây dựng vị trí với số lượng cố định, điều này có thể dẫn đến vị trí quá nhẹ trong tình huống xu hướng lớn. Do đó, một hướng tối ưu hóa là thêm mô-đun quản lý vị trí, khi xu hướng đủ rõ ràng, bạn có thể tăng vị trí dần dần, có hiệu quả tốt hơn trong tình huống xu hướng lớn.
Chiến lược này có thể được kết hợp với học máy để tạo ra một mô hình được đào tạo để đánh giá chất lượng tín hiệu, lọc ra một số tín hiệu chất lượng kém hơn, để nâng cao hơn nữa hiệu suất tổng thể của chiến lược. Đây cũng là một hướng quan trọng trong việc tối ưu hóa chiến lược.
Chiến lược theo dõi xu hướng động lực vibrator là một chiến lược thông minh và tham số hóa cao. Nó đã sử dụng thành công quy luật chu kỳ của thị trường để nâng cao chất lượng tín hiệu và sử dụng phương pháp xác minh chéo đa chỉ số để tạo ra tín hiệu ra thị trường có độ tin cậy cao. Đồng thời, các tham số có thể điều chỉnh phong phú cung cấp cho người dùng sự linh hoạt lớn.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JS_TechTrading
//@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 - JS-TechTrading
// 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
//EMA50/150/200
group_50_150_200="EMA50/150/200"
show_emas=input.bool(defval = true, title = "SHOW EMAS", group = group_50_150_200)
ema50= ta.ema(src, 50)
ema150 = ta.ema(src, 150)
ema200 = ta.ema(src, 200)
ema50_color=input.color(defval = color.purple, title = "EMA50 COLOR",group = group_50_150_200)
ema50_linewidth=input.int(defval = 2, title = "EMA50 LINEWIDTH", group = group_50_150_200)
ema150_color=input.color(defval = color.blue, title = "EMA150 COLOR", group = group_50_150_200)
ema150_linewidth=input.int(defval = 2, title = "EMA150 LINEWIDTH", group = group_50_150_200)
ema200_color=input.color(defval = color.black, title = "EMA200 COLOR", group = group_50_150_200)
ema200_linewidth=input.int(defval = 2, title = "EMA200 LINEWIDTH", group = group_50_150_200)
plot(show_emas ? ema50 : na, color = ema50_color, linewidth = ema50_linewidth)
plot(show_emas ? ema150 : na, color=ema150_color, linewidth = ema150_linewidth)
plot(show_emas ? ema200 : na, color = ema200_color, linewidth = ema200_linewidth)
//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
stop_long = (close < supertrend and v1) or (v2 and strategy.position_size > 0)
stop_short = (close > supertrend and v1) or (v2 and strategy.position_size < 0)
long_cond = ((close > ema150 ) and (ema50 > ema150) and (ema150 > ema200))
short_cond = ((close < ema150) and (ema50 < ema150) and (ema150 < ema200))
if (not stop_long) and (not short_cond) and long_cond and strategy.opentrades == 0 and (trade_direction == 'LONG' or trade_direction == 'BOTH') and buy_signal
strategy.entry('Long_0', strategy.long, qty=dollar / close)
if (not stop_short) and (not long_cond) and short_cond and strategy.opentrades == 0 and (trade_direction == 'SHORT' or trade_direction == 'BOTH') and sell_signal
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)