Chiến lược PresentTrend là một chiến lược theo dõi xu hướng tùy chỉnh độc đáo. Chiến lược này kết hợp các xu hướng thị trường ngắn hạn và dài hạn, làm cho nó phù hợp với các điều kiện thị trường khác nhau.
Chiến lược này bao gồm hai phần:
Chỉ số RSI hoặc MFI tùy chỉnh: Chỉ số này được tính toán dựa trên giá trị RSI hoặc MFI PresentTrend và tạo ra tín hiệu mua và bán dựa trên giá trị này, cho thấy sự đảo ngược xu hướng tiềm ẩn.
Chỉ số ATR: Đây là một chỉ số theo xu hướng phổ biến, sử dụng phạm vi biến động thực trung bình (ATR).
Khi hai tín hiệu mua và bán của cả hai chiến lược được kích hoạt cùng một lúc, chiến lược sẽ mở vị trí mua hoặc bán. Điều này có thể đảm bảo giao dịch chỉ xảy ra khi xu hướng ngắn hạn và dài hạn phù hợp, do đó tăng độ tin cậy của chiến lược.
Chiến lược PresentTrend là một chiến lược theo dõi xu hướng rất hiệu quả. Nó kết hợp cả các chỉ số xu hướng ngắn hạn và dài hạn để tăng độ tin cậy của tín hiệu trong khi vẫn giữ được sự nhạy cảm. Bằng cách điều chỉnh hướng, tham số và thêm logic bổ sung, chiến lược có thể thích ứng với các môi trường thị trường khác nhau và nhu cầu của thương nhân.
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
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/
// © PresentTrading
//@version=5
// Define the strategy settings
strategy('PresentTrend - Strategy [presentTrading]' , overlay=true, precision=3, default_qty_type=strategy.cash,
commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1,
currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital= 10000)
// Define the input parameters
priceSource = input.source(title='Source', defval=hlc3, group='PresentTrend') // The price source to use
lengthParam = input.int(title='Length', defval=14, group='PresentTrend') // The length of the moving average
multiplier = input.float(title='Multiplier', defval=1.618, step=0.1, group='PresentTrend') // The multiplier for the ATR
indicatorChoice = input.bool(title='Whether to use RSI or MFI', defval=false, group='PresentTrend') // Whether to use RSI or MFI
// Add a parameter for choosing Long or Short
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])
// Calculate the ATR and the upT and downT values
ATR = ta.sma(ta.tr, lengthParam)
upperThreshold = low - ATR * multiplier
lowerThreshold = high + ATR * multiplier
// Initialize the PresentTrend indicator
PresentTrend = 0.0
// Calculate the PresentTrend indicator
PresentTrend := (indicatorChoice ? ta.rsi(priceSource, lengthParam) >= 50 : ta.mfi(hlc3, lengthParam) >= 50) ? upperThreshold < nz(PresentTrend[1]) ? nz(PresentTrend[1]) : upperThreshold : lowerThreshold > nz(PresentTrend[1]) ? nz(PresentTrend[1]) : lowerThreshold
// Calculate the buy and sell signals
longSignal = ta.crossover(PresentTrend, PresentTrend[2])
shortSignal = ta.crossunder(PresentTrend, PresentTrend[2])
// Calculate the number of bars since the last buy and sell signals
barsSinceBuy = ta.barssince(longSignal)
barsSinceSell = ta.barssince(shortSignal)
previousBuy = ta.barssince(longSignal[1])
previousSell = ta.barssince(shortSignal[1])
// Initialize the direction variable
trendDirection = 0
// Calculate the direction of the trend
trendDirection := longSignal and previousBuy > barsSinceSell ? 1 : shortSignal and previousSell > barsSinceBuy ? -1 : trendDirection[1]
// Check the trade direction parameter before entering a trade
if (trendDirection == 1 and (tradeDirection == "Long" or tradeDirection == "Both"))
strategy.entry("Buy", strategy.long)
if (trendDirection == -1 and (tradeDirection == "Short" or tradeDirection == "Both"))
strategy.entry("Sell", strategy.short)
// Add a stop mechanism when the tradeDirection is one-sided
if (tradeDirection == "Long" and trendDirection == -1)
strategy.close("Buy")
if (tradeDirection == "Short" and trendDirection == 1)
strategy.close("Sell")
// Visualization
plot(PresentTrend, color=color.blue, title="PresentTrend")
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")