Стратегия пересечения скользящих средних MA на основе индикатора FRAMA


Дата создания: 2024-01-15 14:38:48 Последнее изменение: 2024-01-15 14:38:48
Копировать: 1 Количество просмотров: 691
1
Подписаться
1617
Подписчики

Стратегия пересечения скользящих средних MA на основе индикатора FRAMA

Обзор

Эта стратегия сначала рассчитывает быстрые и медленные скользящие средние значения ma_fast и ma_slow, а затем в сочетании с FRAMA адаптируется к скользящим средним значениям, делая больше при прохождении ma_slow на ma_fast, а при прохождении ma_fast на ma_slow или при прохождении FRAMA при закрытии.

Стратегический принцип

  1. Вычислите 13-дневную простую подвижную среднюю ma_fast и 26-дневную простую подвижную среднюю ma_slow.

  2. Вычисление ФРАМА адаптируется к скользящей средней out. Формулы вычисления ФРАМА более сложны, основная идея заключается в том, чтобы скорректировать среднюю линию в зависимости от максимальных, минимальных значений цены и динамики волатильности.

  3. Это означает, что краткосрочная средняя линия начинает расти и побеждает долгосрочную среднюю линию, соответствующую тенденции.

  4. При прохождении ma_slow при прохождении ma_fast или при прохождении закрытия при FRAMA. Это означает обратный сигнал тренда.

Анализ преимуществ

  1. Преимущества двойной равнолинейной системы в сочетании с адаптивной равнолинейной системой. Двойная равнолинейная система хорошо улавливает тенденции, а адаптивная равнолинейная система лучше фильтрует шум.

  2. Показатель FRAMA может автоматически корректировать параметры, избегая субъективности параметров, выбранных вручную.

  3. Используя одновременно два сигнала выхода, можно вовремя обнаружить обратный тренд.

Анализ рисков

  1. Возможность неправильного расположения двух равномерных пересечений, которые могут привести к периодическим потерям.

  2. Адаптация к скользящим средним увеличивает количество параметров стратегии, что может привести к переоптимизации.

  3. Если мы не будем учитывать только ценовые факторы и не будем отфильтровывать объемы, мы можем упустить возможность.

Направление оптимизации

  1. Можно тестировать комбинации средних линий разных циклов, чтобы найти оптимальные параметры.

  2. Можно добавить подтверждение количества сделанных сделок, чтобы избежать недействительного сигнала. Например, увеличение количества сделанных сделок.

  3. Можно оптимизировать условия для открытия позиции и позиции, чтобы сделать стратегию более стабильной. Например, открывать позиции только при продолжении формы прорыва.

Подвести итог

Эта стратегия сочетает в себе двойную равновесную скрещивание и FRAMA адаптивную равновесную линию, которая автоматически приспосабливается к рыночной среде путем динамической корректировки параметров. Двойная равновесная линия умеет улавливать тенденции, FRAMA может фильтровать шум. Использование одновременно двух сигналов равновесия делает стратегию более устойчивой.

Исходный код стратегии
/*backtest
start: 2023-01-14 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Fractal Adaptive Moving Average",shorttitle="FRAMA",overlay=true)


ma_fast = sma(close,13)

ma_slow = sma(close,26)
plot(ma_fast,color = green)
plot(ma_slow, color = yellow)
price = input(hl2)
len = input(defval=16,minval=1)
FC = input(defval=1,minval=1)
SC = input(defval=198,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price
plot(out,title="FRAMA",color=purple,transp=0)
entry() => crossover(ma_fast, ma_slow) and (out < close)
exit() => crossover(ma_slow, ma_fast) or crossunder(out, close)

strategy.entry(id= "MA cross", long = true, when = entry())
strategy.close(id= "MA cross", when = exit())