
Chiến lược này sử dụng các nguyên tắc của hai đường ngang chéo, kết hợp với chỉ số ATR thiết lập dừng lỗ, hỗ trợ kiểm soát thời gian giao dịch, thiết kế một bộ chiến lược phù hợp với hợp đồng tương lai giao dịch trong ngày. Chiến lược đơn giản, dễ nắm bắt và phù hợp cho người mới bắt đầu sử dụng.
Chiến lược này sử dụng đường trung bình WMA 5 chu kỳ và 20 chu kỳ để giao dịch. Khi đường trung bình 5 chu kỳ phá vỡ đường 20 chu kỳ từ phía dưới, hãy làm nhiều; Khi đường 5 chu kỳ giảm xuống đường 20 chu kỳ từ phía trên, hãy làm trống.
Ngoài ra, chiến lược cũng sử dụng chỉ số ATR để thiết lập vị trí dừng lỗ. Chỉ số ATR có thể phản ánh động lượng biến động của thị trường. Chiến lược xác định vị trí dừng lỗ bằng cách nhân giá trị của chỉ số ATR với một nhân số (ví dụ: 3 lần) để kiểm soát tổn thất đơn lẻ.
Cuối cùng, chiến lược giới hạn chỉ kích hoạt tín hiệu giao dịch trong giờ giao dịch của Hoa Kỳ (9:00-14:30 CST). Điều này tránh giao dịch trong thời gian mở và đóng cửa thị trường, vì hai thời gian này có biến động lớn và dễ tạo ra tín hiệu giả.
Chiến lược này có những ưu điểm sau:
Sử dụng giao lộ hai đường bằng nhau, có thể nắm bắt hiệu quả các điểm biến động xu hướng, vào đúng thời điểm.
Sử dụng xu hướng lớn để phân tích và lọc một số tín hiệu giao dịch ồn ào, tránh hoạt động ngược.
Sử dụng chỉ số ATR để điều chỉnh động vị trí dừng lỗ, kiểm soát hiệu quả tổn thất đơn.
Giới hạn thời gian giao dịch, tránh biến động mạnh khi thị trường mở và đóng.
Các quy tắc chiến lược đơn giản, rõ ràng, dễ hiểu và dễ thực hiện, phù hợp với người mới bắt đầu.
Các tham số có thể tùy chỉnh, chẳng hạn như chu kỳ đường trung bình, ATR, thời gian giao dịch, chiến lược tối ưu hóa.
Chiến lược này cũng có những rủi ro sau:
Trong trường hợp động đất, có thể có nhiều thiệt hại.
Các đường giao nhau sẽ bị chậm trễ và có thể bị bỏ lỡ đường ngắn.
Thiết lập tham số ATR không đúng có thể dẫn đến lỗ dừng quá lớn hoặc quá nhỏ.
Những người này chỉ dựa vào các chỉ số kỹ thuật và bỏ qua những thông tin cơ bản.
Các loại giao dịch và chu kỳ không phù hợp sẽ ảnh hưởng đến hiệu quả của chiến lược.
Các hệ thống giao dịch tự động có nguy cơ bị đánh giá.
Các tham số khác nhau trong thời gian giao dịch cần được điều chỉnh.
Điều này cần phải được cải thiện thông qua các phương pháp như tối ưu hóa tham số, kết hợp các chỉ số và can thiệp nhân lực thích hợp.
Chiến lược này có thể được tối ưu hóa bằng cách:
Thử các hệ thống khác nhau như EMA, DMA, v.v.
Thêm bộ lọc cho các chỉ số kỹ thuật khác như MACD, RSI, v.v.
Tối ưu hóa tham số ATR để làm cho Stop Loss Stop là hợp lý hơn.
Kết hợp với các chỉ số khối lượng giao dịch để tìm ra điểm nhập cảnh hiệu quả.
Điều chỉnh tham số theo đặc điểm của các giống khác nhau.
Kết hợp các yếu tố cơ bản để tránh hoạt động chống thị trường.
Thêm thành phần học máy, sử dụng mạng thần kinh để mô hình hóa dữ liệu.
Hãy thử kết hợp nhiều chu kỳ để khám phá thêm cơ hội giao dịch.
Xây dựng danh mục các chiến lược để tăng sự ổn định.
Chiến lược này nói chung là đơn giản, thông thường và phù hợp cho người mới bắt đầu thực hành thực tế. Đồng thời, có rất nhiều không gian tối ưu hóa, có thể giới thiệu nhiều chỉ số kỹ thuật hoặc phương pháp học máy để hoàn thiện. Ngoài ra, điều chỉnh tham số tùy thuộc vào đặc điểm của các loại giao dịch khác nhau và môi trường thị trường cũng rất quan trọng. Nói tóm lại, chiến lược này cung cấp một khung tham khảo cho người mới bắt đầu giao dịch định lượng, nhưng cũng cần được kiểm tra và tối ưu hóa liên tục để có được lợi nhuận ổn định theo tình huống thực tế.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
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/
// © james4392010
//@version=4
strategy(title="DayTradingFutures Cross-Strategy", overlay=true)
// === GENERAL INPUTS ===
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
//highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
wmaFastSource = input(defval = close, title = "Fast WMA Source")
wmaFastLength = input(defval = 5, title = "Fast WMA Period")
wmaSlowSource = input(defval = close, title = "Slow WMA Source")
wmaSlowLength = input(defval = 20, title = "Slow WMA Period")
wmaDirectionSource = input(defval = close, title = "Trend 50 Period Source")
wmaDirectionLength = input(defval = 50, title = "Trend 50 Period")
timeinrange(res, sess) => time(res, sess) != 0
// === SERIES SETUP ===
/// a couple of ma's..
wmaFast = wma(close, 5)
wmaSlow = wma(close, 20)
wmaDirection = wma(close, 50)
// === PLOTTING ===
fast = plot(series=wmaFast, color=color.white, linewidth=2)
slow = plot(series=wmaSlow, color=color.yellow, linewidth=2)
direction = plot(series=wmaDirection, color=color.red, linewidth=2)
// === INPUT BACKTEST RANGE ===
//fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
//fromYear = input(defval = 2022, title = "From Year", minval = 2022)
// To Date Inputs
//toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//toYear = input(defval = 2022, title = "To Year", minval = 2022)
//startDate = timestamp(fromYear, fromMonth, fromDay)
//finishDate = timestamp(toYear, toMonth, toDay)
//inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear)
// === FUNCTION EXAMPLE ===
//inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear)
// === LOGIC ===
enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430")
enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430")
//trend := nz(trend[1], trend)
//trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
//upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = enterLong
//plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green)
plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)
//dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = enterShort
//plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red)
plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)
//mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
//longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
//shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
//fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
//fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="Buy", message="Buy!")
alertcondition(sellSignal, title="Sell", message="Sell!")
//changeCond = trend != trend[1]
//alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")
// Entry for strategy //
//tp=input(25,title="TakeProfit")
//sl=input(40,title="StopLoss")
strategy.entry("Long",1, when=buySignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
strategy.entry("Short",1, when=sellSignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
//strategy.exit("Exit", wmaFastwmaSlow)
//Buy and Sell Signals
//strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430"))
// === FILL ====
fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red)
//fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area")
//fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")