
Эта стратегия называется Liquidity Driven Trend Strategy и предназначена для определения направления ценовых тенденций в разные временные периоды и принятия соответствующих решений о покупке или продаже. Эта стратегия использует двойную равнолинейную систему для определения тенденций и своевременного реагирования на изменение тенденций с использованием индекса относительной силы разницы в цене (RSI) на нескольких временных рамках.
Основная логика этой стратегии основана на показателе CHOP, в котором система переменных средних определяет направление тенденции. В частности, стратегия рассчитывает значения RSI для быстрого и медленного линий на высокоциклических временных рамках и рассчитывает разницу между ними.
Стратегия также включает в себя определение многократных временных рамок: расчет разрыва RSI на более высоком уровне цикла (например, солнечная линия) для определения направления общей тенденции; конкретные покупки и продажи на более низком уровне цикла (например, 5-минутная линия) в соответствии с результатами определения более высокого уровня цикла. Такое сочетание многократных временных рамок учитывает как определение тенденций высокого цикла, так и гибкость для низкого цикла.
Решение проблемы:
Эта стратегия использует разницу RSI для определения потенциальных изменений в тренде, чтобы достичь чувствительного захвата переломных точек. Использование многократных временных рамок не только гарантирует определение основных тенденций, но и делает конкретные операции по покупке и продаже более гибкими. По сравнению с другими стратегиями отслеживания тенденций, эта стратегия более проста, пряма, параметры Settings интуитивны, легко подстраиваются и оптимизируются.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true)
isTimeFrame(timeFrame) =>
timeFrame == timeframe.period ? true : false
Htf() =>
isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D"
TrendIndication() =>
trendFastLength = 20
trendSlowLength = 50
upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf))
upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf))
rsiDiff = rsiFastHtf - rsiSlowHtf
crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na
if (TrendIndication() == true)
strategy.entry("Long", strategy.long)
if (TrendIndication() == false)
strategy.entry("Short", strategy.short)