
Chiến lược này được gọi là chiến lược giao chéo đường trung bình phá vỡ đường trung bình, ý tưởng chính là kết hợp chỉ số tiến triển và đường trung bình để phán đoán nhiều lỗ hổng. Cụ thể, chiến lược này sử dụng chu kỳ xu hướng Schaff (Schaff Trend Cycle, STC) và giao chéo đường trung bình.
Chiến lược này dựa trên hai chỉ số kỹ thuật:
Chỉ số STC, đánh giá xu hướng. Chỉ số STS bao gồm chỉ số MACD, chỉ số Stoch và đường chỉ số STC.
Giao chéo đường trung bình: Giao chéo giữa đường trung bình di chuyển đơn giản nhanh ((thời gian mặc định 35) và đường trung bình di chuyển đơn giản chậm ((thời gian mặc định 200)). Đi qua đường chậm trên đường nhanh là tín hiệu đa đầu, đi qua đường chậm dưới đường nhanh là tín hiệu trống đầu.
Lý luận phán đoán tín hiệu giao dịch của chiến lược này như sau:
Làm nhiều tín hiệu: Khi chỉ số STC vượt qua đường 25 và đường trung bình di chuyển nhanh đơn giản cao hơn đường trung bình di chuyển đơn giản chậm và giá cao hơn đường trung bình di chuyển đơn giản nhanh.
Tín hiệu phá vỡ: Khi chỉ số STC phá vỡ 75 đường xuống, và đường trung bình di chuyển nhanh đơn giản thấp hơn đường trung bình di chuyển đơn giản chậm, và giá thấp hơn đường trung bình di chuyển đơn giản nhanh.
Chiến lược này có những ưu điểm sau:
Kết hợp với chỉ số xu hướng và chỉ số đường trung bình, tín hiệu giao dịch đáng tin cậy hơn. Chỉ số STC phán đoán hướng xu hướng lớn, hai đường trung bình phán đoán nhập cảnh cụ thể.
Các tham số đường trung bình có thể được điều chỉnh. Các tham số đường trung bình có thể được điều chỉnh theo thị trường, chiến lược tối ưu hóa.
Rủi ro có thể kiểm soát được. Chỉ số STC đánh giá các khu vực quá mua quá bán, tránh theo dõi các vùng cực đoan. Mục tiêu dừng lỗ đặt phạm vi dừng lỗ 400 điểm.
Chiến lược này cũng có những rủi ro:
Chỉ số STC có thể bị phá vỡ giả.
Xuyên qua đường trung bình có thể tạo ra nhiều tín hiệu giả. Cần điều chỉnh tham số chu kỳ đường trung bình.
Chỉ giao dịch một chiều. Không gian hạn chế.
Rủi ro trượt trong giao dịch ngoại hối không được xử lý. Rủi ro trượt trong tài khoản thực có thể lớn hơn.
Chính sách này có thể được tối ưu hóa theo các khía cạnh sau:
Điều chỉnh tham số STC, tối ưu hóa phán quyết mua quá mức.
Tối ưu hóa chu kỳ đường trung bình, tăng độ tin cậy của tín hiệu chéo.
Thêm các chỉ số lọc khác, lọc các đột phá giả. Ví dụ: Blinky.
Tăng logic giao dịch hai chiều. Giảm rủi ro không gian.
Thêm logic dừng lỗ. Kiểm soát lỗ đơn.
Phương pháp này sử dụng các chỉ số chuyển động và các chỉ số chéo đường trung bình để đánh giá xu hướng và điểm đầu vào cụ thể. Nếu đảm bảo điều kiện kiểm soát rủi ro nhất định, có thể thu được lợi nhuận tốt hơn. Mô hình chiến lược đơn giản, rõ ràng và dễ hiểu, cũng dễ dàng điều chỉnh tham số và tối ưu hóa chức năng theo các thị trường khác nhau, phù hợp với việc học tập và ứng dụng của người mới bắt đầu.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")
fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.bool, defval=true)
macd = ema(src, fastLength) - ema(src, slowLength)
k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
d = ema(k, d1Length)
kd = nz(fixnan(stoch(d, d, d, cycleLength)))
stc = ema(kd, d2Length)
stc := stc > 100 ? 100 : stc < 0 ? 0 : stc
stcColor = not highlightBreakouts ? (stc > stc[1] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)
fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)
upperFillColor = stc > upper and highlightBreakouts ? color.green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? color.red : transparent
fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)
ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)
bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1
if (bullbuy)
strategy.entry("Riposte", strategy.long, ordersize)
strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)
if (bearsell)
strategy.entry("Riposte", strategy.short, ordersize)
strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)
//plotshape(bullbuy, title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell, title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")