
Chiến lược này sử dụng ATR kênh và lý thuyết lỗ hổng, bước vào xu hướng khi phá vỡ kênh, thuộc chiến lược theo dõi xu hướng. Chiến lược đơn giản và dễ hiểu, sử dụng kênh đồng nhất và chỉ số ATR để xác định hướng xu hướng, phát ra tín hiệu giao dịch tại các điểm quan trọng.
Chiến lược này sử dụng các chỉ số giá cao, thấp, đóng cửa và ATR để xây dựng lên và xuống đường, tạo ra kênh ATR. Độ rộng của kênh được xác định bởi kích thước của tham số ATR. Khi giá phá vỡ kênh, nó được đánh giá là bắt đầu xu hướng, lúc này đi vào hướng đi mua hoặc đi. Chiến lược được chia thành hai tín hiệu giao dịch, giá phá vỡ một chiều rộng ATR được coi là sự xuất hiện của xu hướng, tại thời điểm này điểm mua bán hàng đầu tiên được kích hoạt; giá phá vỡ hai chiều rộng ATR được coi là sự gia tăng xu hướng, điểm mua bán hàng thứ hai được kích hoạt.
Những ưu điểm chính của chiến lược này là:
Những rủi ro chính của chiến lược này là:
Chiến lược này có thể được tối ưu hóa như sau:
Kế hoạch tổng thể của chiến lược này rõ ràng và có thể được sử dụng như một chiến lược chứng minh khái niệm. Tuy nhiên, khoảng cách từ thực tế vẫn còn một khoảng cách nhất định và có không gian tối ưu hóa lớn. Nếu có thể cải thiện hơn nữa kiểm soát gió và kiểm soát tần số giao dịch, thì chiến lược này có triển vọng tốt hơn.
/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
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/
// © Myhaj_Lito
//@version=5
strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true)
TF = input.timeframe(title='TimeFrame', defval="60")
ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000)
HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength))
RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)
RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false
// calculating
if not CHANGE and close >= RENKOUP[1] + H * 2
CHANGE := true
UP := true
RENKOUP := RENKOUP[1] + ATR * 2
RENKODN := RENKOUP[1] + ATR
COLOR := color.rgb(0, 255, 170,60)
SELL := 0
BUY += 2
BUY
if not CHANGE and close >= RENKOUP[1] + H
CHANGE := true
UP := true
RENKOUP := RENKOUP[1] + ATR
RENKODN := RENKOUP[1]
COLOR := color.rgb(0, 230, 38,60)
SELL := 0
BUY += 1
BUY
if not CHANGE and close <= RENKODN[1] - H * 2
CHANGE := true
DN := true
RENKODN := RENKODN[1] - ATR * 2
RENKOUP := RENKODN[1] - ATR
COLOR := color.rgb(255, 92, 43,60)
BUY := 0
SELL += 2
SELL
if not CHANGE and close <= RENKODN[1] - H
CHANGE := true
DN := true
RENKODN := RENKODN[1] - ATR
RENKOUP := RENKODN[1]
COLOR := color.rgb(245, 69, 69,60)
BUY := 0
SELL += 1
SELL
//// STRATEGY
if(UP)
strategy.entry("Long",strategy.long)
if(DN)
strategy.entry("Short",strategy.short)
// ploting
bgcolor(COLOR)