
Chiến lược này là một chiến lược giao dịch dao động dựa trên hai đường ngang. Nó sử dụng giao dịch giữa đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm làm tín hiệu mua và bán. Nó tạo ra tín hiệu mua khi đường trung bình di chuyển nhanh đi qua đường trung bình di chuyển chậm từ phía dưới; nó tạo ra tín hiệu bán khi đường trung bình di chuyển nhanh đi qua đường trung bình di chuyển chậm từ phía trên xuống.
Chiến lược này sử dụng RMA của length là 6 làm trung bình di chuyển nhanh, HMA của length là 4 làm trung bình di chuyển chậm. Chiến lược sử dụng xu hướng giá và tạo tín hiệu giao dịch thông qua đường giao dịch nhanh và đường giao dịch chậm.
Khi đường nhanh đi qua đường chậm từ phía dưới, cho thấy giá trong thời gian ngắn chuyển đổi từ giảm xuống, thuộc thời điểm chuyển đổi mã thông báo, do đó chiến lược tạo ra tín hiệu mua tại thời điểm này; khi đường nhanh đi qua đường chậm từ phía trên, cho thấy giá trong thời gian ngắn chuyển đổi từ giảm xuống, thuộc thời điểm chuyển đổi mã thông báo, do đó chiến lược tạo ra tín hiệu bán tại thời điểm này.
Ngoài ra, chiến lược này cũng phát hiện các phán đoán xu hướng dài hạn để tránh giao dịch ngược. Chỉ khi các phán đoán xu hướng dài hạn đồng thời ủng hộ tín hiệu, tín hiệu mua và bán thực tế sẽ được tạo ra.
Chiến lược này có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Chiến lược hai đường trung bình dễ dàng tạo ra nhiều lợi nhuận nhỏ nhưng một khoản lỗ lớn. Giải pháp là điều chỉnh mức dừng dừng lỗ thích hợp.
Các tín hiệu giao dịch thường xuyên xảy ra trong các tình huống bất ổn, có thể dẫn đến giao dịch quá mức. Giải pháp là nới lỏng các điều kiện giao dịch một cách thích hợp và giảm các giao dịch.
Các tham số chiến lược dễ bị tối ưu hóa quá mức và có thể không hiệu quả trên ổ cứng. Giải pháp là kiểm tra độ ổn định của tham số.
Chiến lược không hoạt động tốt trong các tình huống xu hướng. Giải pháp là thêm mô-đun phán đoán xu hướng hoặc sử dụng kết hợp với chiến lược xu hướng.
Chiến lược này có thể được tối ưu hóa hơn bao gồm:
Cập nhật chỉ số đường trung bình, sử dụng bộ lọc tự điều chỉnh như Kalman.
Thêm mô-đun học máy để sử dụng AI để đánh giá điểm mua và bán.
Thêm mô-đun quản lý tiền để kiểm soát rủi ro tự động hơn.
Kết hợp với các yếu tố tần số cao, tìm thấy tín hiệu giao dịch mạnh hơn.
Nhiều loại thâm nhập thị trường.
Chiến lược dao động hai đường đều này là một chiến lược giao dịch định lượng điển hình và thực tế. Nó có khả năng thích ứng mạnh mẽ, người mới bắt đầu có thể học được rất nhiều kiến thức về phát triển chiến lược. Đồng thời, nó cũng có rất nhiều không gian cải tiến, có thể được tối ưu hóa hơn nữa với nhiều kỹ thuật định lượng để có hiệu quả chiến lược tốt hơn.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dc_analytics
// https://datacryptoanalytics.com/
//@version=5
strategy("Scalping Trading", overlay=true)
// INPUTS //
bar_color = input(true, title='Bar Color', group='⚙ Settings',tooltip='Color chart bars.', inline = "1")
mostrar = input(true, 'Show Alerts', group='⚙ Settings', inline = "1")
tempo = input.timeframe('60', group='⚙ Settings', title='🕗 Timeframe', options=['1', '5', '15', '30', '60', '120', '240', '360', '720', 'D', 'W'])
i_position = input.string("Bottom Center", title = "⚙ D-Panel Location",
options = ["Top Right", "Bottom Center", "Bottom Right"], group='⚙ D-Panel Settings️',
tooltip='Choose the location of the information table on the chart.(D-Panel) ')
position = i_position == "Top Right" ? position.top_right : i_position == "Bottom Center" ? position.bottom_center : position.bottom_right
i_tam = input.string('Big', title = '⚙ D-Painel Size',
options = ["Tiny", "Small", "Big"], group='⚙ D-Panel Settings️',tooltip='Choose the size of the information panel (D-Panel).')
tamanho = i_tam == "Tiny" ? size.tiny : i_tam == "Small" ? size.small : size.normal
show_tp_sl = input(true, title='Show Take Profit/Stop Loss', group='⚙ Settings',tooltip='Show Take Profit/Stop Loss.')
TP = input.float(defval=4500, title='Take Profit:',group='⚙ Risk Management',tooltip='Choose amount of profit')
SL = input.float(defval=2500, title='Stop Loss:', group='⚙ Risk Management',tooltip='Choose amount of loss')
// END INPUTS //
// DECLARATIONS //
t_up = '📈'
t_down = '📉'
c_buy = 'Long ⇡'
c_sell = 'Short ⇣'
// _DECLARATION TREND
t_sma = ta.hma(close, 200)
tend_sma = ta.sma(close, 12)
tendencia = request.security(syminfo.tickerid, timeframe.period, t_sma, barmerge.gaps_off, barmerge.lookahead_off)
tend_tabela = request.security(syminfo.tickerid, timeframe.period, tend_sma, barmerge.gaps_off, barmerge.lookahead_off)
// _END DECLARATION TREND
circle = plot.style_circles
// END DECLARATIONS //
// COLORS //
color gray = color.gray
color red = color.new(#ff8c05, 0)
color orange = color.new(#ff8c05, 0)
color silver = color.silver
color up_vol = color.new(color.green, 0)
color dn_vol = color.new(color.purple, 0)
color orange_tranp = color.new(#ff8c05, 95)
// END COLORS //
// SCANNER MARKET MAKERS //
periodo = input.int(20, 'Period Volume', group='⚙️ Scanner Market Makers Settings')
fator = input.float(1.85, 'Proportion to the mean: (1.25 = 125% of the mean)', minval=0, group='⚙️ Scanner Market Makers Settings')
vol_up = close > open
vol_down = open > close
vol = volume
pesado = volume > ta.ema(volume, periodo) * fator
palette = pesado and vol_up ? gray : pesado and vol_down ? orange : vol_up ? silver : gray
// END SCANNER MARKET MAKERS //
// LOGIC ONE //
s = ta.rma(close, 6)
v = ta.hma(close, 4)
// TREND
t_baixa = tendencia > tendencia[1]
t_alta = tendencia < tendencia[1]
te_d = tend_tabela > tend_tabela[1]
trend = te_d ? t_up : t_down
// END TREND
a = request.security(syminfo.tickerid, tempo, s)
b = request.security(syminfo.tickerid, tempo, ohlc4)
c_dn = a > b and a[1] < b[1]
c_up = b > a and b[1] < a[1]
compra = mostrar and c_up ? a : na
venda = mostrar and c_dn ? a : na
s_sell = venda and t_alta
s_buy = compra and t_baixa
c_vela = b > a and te_d ? gray : orange
s_up = false
s_dw = false
b_sinal = not s_up and s_buy
s_sinal = not s_dw and s_sell
if b_sinal
s_dw := false
s_up := true
s_up
if s_sinal
s_dw := true
s_up := false
s_up
// END LOGIC ONE //
// DATA TABLE //
c = b > a ? orange : gray
c_sinal = b > a ? c_buy : c_sell
// END DATA TABLE //
// PLOT/BARCOLOR //
c_barcolor = pesado and vol_up ? up_vol : pesado and vol_down ? dn_vol : vol_up ? c : c
barcolor(bar_color ? c_barcolor : na)
plot(a, color=orange_tranp, style=circle)
// END PLOT/BARCOLOR //
// TABLE //
var dash = table.new(position=position, columns=2, rows=3, border_width=1)
if barstate.islast
table.cell(table_id=dash, column=1, row=2, text='Scalping DCA', bgcolor=orange)
table.cell(table_id=dash, column=1, row=0, text='Trade: ' + c_sinal)
table.cell(table_id=dash, column=1, row=1, text='Trend: ' + trend)
// END TABLE //
// SETTINGS STRATEGY //
exitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)
// OPEN ORDER
if (b_sinal)
strategy.order("Long", strategy.long , comment = "Entry: " + str.tostring(close, "#.####"))
// strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####"))
// strategy.entry("long", strategy.long)
if (s_sinal)
strategy.order("Short", strategy.short , comment = "Entry: " + str.tostring(close, "#.####"))
// strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####"))
// strategy.entry("short", strategy.short)
// TP/SL ORDERS
if strategy.position_size > 0
strategy.exit('Long_Close', 'Long',profit = TP , loss=SL, qty_percent=100, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####"))
//if strategy.position_size > 0
// strategy.exit("Long", "Long", stop = longSL, limit = longTP, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####"))
if strategy.position_size < 0
strategy.exit('Short_Close', 'Short',profit = TP, loss=SL, qty_percent=100, comment_profit = "Profit Short: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####"))
//if strategy.position_size < 0
// strategy.exit("Short", "Short", stop = shortSL, limit = shortTP, comment_profit = "Profit Short: "+ str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####"))
// END SETTINGS STRATEGY //
// LOGS
// if strategy.opentrades > 10
// log.warning("{0} positions opened in the same direction in a row. Try adjusting `bracketTickSizeInput`", strategy.opentrades)
// last10Perc = strategy.initial_capital / 10 > strategy.equity
// if (last10Perc and not last10Perc[1])
// log.error("The strategy has lost 90% of the initial capital!")