
Эта стратегия использует комплексные методы определения ценовых тенденций в соответствии с показателями PSAR, показателями ADX для определения сильных тенденций, показателями RSI для определения перепродажи и CMF для определения потоков капитала. Эта стратегия создает количественную торговую стратегию для отслеживания тенденций на протяжении всего периода.
Основные критерии этой стратегии:
Используйте индикатор PSAR для определения того, находится ли цена в восходящей тенденции, а снижение PSAR рассматривается как завершение восходящей тенденции и переход к снижению;
RSI требует, чтобы показатель был выше средней линии 50, чтобы отфильтровать ложные прорывы, которые образуются в зонах перепродажи;
ADX требует, чтобы его средняя линия EMA была выше, что свидетельствует о том, что результаты анализа тенденций продолжаются;
CMF требует больше 0, чтобы рассматривать как денежный поток;
Сигнал покупать возникает при выполнении вышеуказанных четырех условий; сигнал продавать возникает при выполнении ПСАР, RSI ниже 50, ADX ниже собственной средней линии EMA и CMF меньше 0.
Стратегия комплексно учитывает направление ценового тренда, интенсивность тренда, состояние перекупа и перепродажи и денежные потоки в несколько измерений, устанавливает правила торговли, устанавливает строгие логические суждения при определении, когда будет генерироваться торговый сигнал, эффективно фильтрует ложные прорывы, чтобы обеспечить захват высокой вероятности устойчивого направления тренда.
Основными преимуществами данной стратегии являются:
В сочетании с множеством правил для настройки показателей торговли может быть эффективно предотвращена фальшивая взлома, чтобы обеспечить качество торговых сигналов;
Быстро определять направления и отслеживать новые тенденции, чтобы в полной мере использовать выгоды от их процесса;
Процесс установки отслеживает условия фильтрации, чтобы эффективно контролировать риски и обеспечивать эффективность отслеживания;
В сочетании с оценкой интенсивности тренда можно избежать кризиса.
Основные риски, связанные с этой стратегией:
Одной стратегии легко накапливать риски, требуя надлежащей корректировки позиций для контроля за общим риском;
Следить за изменениями в условиях фильтрации, чтобы избежать потерь после отмены условий;
В этой стратегии основное внимание уделяется средне- и долгосрочной линии, а краткосрочный контент подвержен риску остановки убытков, связанному с волатильностью.
Соответствующие меры по управлению рисками включают: оптимизацию правил управления позициями, установку линий предупреждения риска, адекватную расширенную дистанцию между стоп-линиями и т. д.
В этой стратегии есть место для оптимизации:
Оптимизация параметров, в настоящее время параметры являются субъективными и могут быть автоматически оптимизированы с помощью методов машинного обучения;
Добавление модуля управления позициями, который позволяет динамично корректировать позиции в зависимости от ситуации с риском;
Добавление оптимизации механизмов остановки убытков, таких как отслеживание остановки, время остановки, преодоление остановки убытков и т. д.
Эта стратегия объединяет в себе множество критериев, позволяет быстро определять и постоянно отслеживать возникающие тенденции, подтверждает эффективность многомерного анализа, например, количественного объединения тенденций и капитала. Эта стратегия может использоваться в качестве базовой стратегии для отслеживания тенденций в течение периода или может быть создана в виде стабильной среднесрочной линейной стратегии количественного отслеживания после оптимизации параметров и модулей.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )
start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
firstTrendBar = false
SAR := nextBarSAR
if bar_index == 1
float prevSAR = na
float prevEP = na
lowPrev = low[1]
highPrev = high[1]
closeCur = close
closePrev = close[1]
if closeCur > closePrev
uptrend := true
EP := high
prevSAR := lowPrev
prevEP := high
else
uptrend := false
EP := low
prevSAR := highPrev
prevEP := low
firstTrendBar := true
SAR := prevSAR + start * (prevEP - prevSAR)
if uptrend
if SAR > low
firstTrendBar := true
uptrend := false
SAR := max(EP, high)
EP := low
AF := start
else
if SAR < high
firstTrendBar := true
uptrend := true
SAR := min(EP, low)
EP := high
AF := start
if not firstTrendBar
if uptrend
if high > EP
EP := high
AF := min(AF + increment, maximum)
else
if low < EP
EP := low
AF := min(AF + increment, maximum)
if uptrend
SAR := min(SAR, low[1])
if bar_index > 1
SAR := min(SAR, low[2])
else
SAR := max(SAR, high[1])
if bar_index > 1
SAR := max(SAR, high[2])
nextBarSAR := SAR + AF * (EP - SAR)
//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)
//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)
//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)
long = not uptrend and vrsi > middle_RSI and sig > ema_sig and mf>0
short= uptrend and vrsi < middle_RSI and sig<ema_sig and mf<0
strategy.entry("long",1,when=long)
strategy.close('long',when=short)