
Chiến lược này tạo ra tín hiệu mua bằng cách tính toán chỉ số chuyển động hai chiều DI +, DI - và chỉ số hướng trung bình ADX, kết hợp với chỉ số chuyển động trung bình EMA. Khi DI + trên DI + và ADX cao hơn 20, nó tạo ra tín hiệu mua; khi DI + dưới DI + và ADX cao hơn 25, nó tạo ra tín hiệu bán.
Tính toán DI+, DI- và ADX
Tính toán chỉ số trung bình di chuyển EMA
Tạo tín hiệu giao dịch
Giao dịch dừng lỗ
Tóm lại, chiến lược này kết hợp các chỉ số chuyển động với các chỉ số xu hướng, tạo ra tín hiệu giao dịch khi giá có xu hướng mạnh. Đồng thời thiết lập các điều kiện dừng lỗ để hạn chế tổn thất.
Có thể được tối ưu hóa bằng cách mở rộng mức dừng lỗ, điều chỉnh các tham số, hoặc thêm các điều kiện lọc bổ sung để tăng tần suất giao dịch.
Chiến lược này tích hợp các chỉ số động lượng với các chỉ số phân tích xu hướng, tạo ra tín hiệu giao dịch khi giá có xu hướng mạnh. Thiết lập các điều kiện dừng nghiêm ngặt để kiểm soát rủi ro. Có thể tăng hiệu quả chiến lược hơn nữa bằng cách tối ưu hóa tham số, thêm bộ lọc tín hiệu và mở rộng đúng mức độ dừng.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
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/
// © Tamil_FNO_Trader
//@version=5
strategy("Overlay Signals by TFOT", overlay=true)
// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)
// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")
my_ema(src, length) =>
alpha = 2 / (length + 1)
sum = 0.0
sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)
// Variables
var bool buycondition1 = false
var bool sellcondition1 = false
var int firstbuybar = na
var int firstsellbar = na
var int buyexitbar = na
var int sellexitbar = na
var bool buyexit1 = false
var bool sellexit1 = false
// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)
buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)
if buycondition1
if(na(firstbuybar))
firstbuybar := bar_index
buyexitbar := na
firstsellbar := na
strategy.entry("Buy", strategy.long)
if sellcondition1
if(na(firstsellbar))
firstsellbar := bar_index
sellexitbar := na
firstbuybar := na
strategy.entry("Sell", strategy.short)
if buyexit1 and not na(firstbuybar)
if(na(buyexitbar))
buyexitbar := bar_index
firstbuybar := na
firstsellbar := na
strategy.close("Buy")
if sellexit1 and not na(firstsellbar)
if(na(sellexitbar))
sellexitbar := bar_index
firstsellbar := na
firstbuybar := na
strategy.close("Sell")
// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")
plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)
plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)