Эта стратегия использует гибко-весовую скользящую среднюю (EVWMA) двух различных периодов для перекрестного обращения, чтобы создать сигналы покупки и продажи. Сигналы покупки создаются, когда короткие периодические линии пересекают длинные периодические линии; сигналы продажи создаются, когда короткие периодические линии пересекают длинные периодические линии.
Эта стратегия определяет изменения в тренде, рассчитывая линии EVWMA разных периодов и позволяя им пересекаться.
В частности, сначала он рассчитал две линии EVWMA:
Короткий период m1, период length1, по умолчанию 5
Продолжительность цикла m2, продолжительность цикла 2, по умолчанию 40
Затем он использует функции crossover и crossunder для определения пересечения m1 и m2:
Если m1 наносится на m2, то генерируется сигнал покупки и выполняется операция long
Если m1 проходит через m2, то генерируется сигнал продажи и выполняется короткая операция
Здесь следует отметить, что EVWMA отличается от обычной скользящей средней, которая придает больший вес недавним данным, чтобы быстрее реагировать на изменения цен. Формула расчета выглядит следующим образом:
data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume_price/nb_floating_shares)
где nz ((data[1]) указывает значение EVWMA за предыдущий цикл, nb_floating_shares - общий объем торгов за этот цикл, volume - текущий объем торгов за текущий цикл, volume_price - текущий объем торгов за текущий цикл. Таким образом, достигается эффект придания более высокого веса последним данным.
Эта стратегия имеет следующие преимущества:
Использование EVWMA позволяет быстрее реагировать на ценовые изменения и увеличивать возможности получения прибыли.
С помощью двойного пересечения линий EVWMA можно обнаружить переменные в тренде и вовремя войти в игру
Простые в использовании и внедрении
Настраиваемые длины циклов для различных рыночных условий
Не требует сложной оптимизации параметров, легко фиксируется
Однако эта стратегия также несет в себе некоторые риски:
Двухлинейный перекресток не может отфильтровывать рыночный шум и может генерировать большое количество недействительных сигналов
Невозможно определить точку обратного тренда, есть риск пропустить обратный
Беспроигрышные блокировки не позволяют эффективно контролировать риски
Недостаточная оптимизация параметров, неправильная настройка линейного цикла может привести к потере эффекта
Эта стратегия может быть оптимизирована в следующих аспектах:
Повышение стратегии сдерживания убытков, строгий контроль рисков
Оптимизируйте длину цикла линии, выберите оптимальные параметры
Добавление фильтров на объемы сделок, уменьшение недействительных сделок
В сочетании с другими показателями мы видим обратный тренд и меньше упущенных возможностей.
Динамические параметры оптимизации, длина цикла линии корректировки в зависимости от изменения рынка
Различие между многоголовым и пустым рынком, используя различные параметры
Включение алгоритмов машинного обучения, которые используют обучение большим данным для определения времени покупки и продажи
Overall, this elastic weighted moving average cross strategy может эффективно обнаруживать изменения в тренде и генерировать торговые сигналы. Стратегия проста и проста, но есть некоторые риски и направления оптимизации. С помощью оптимизированного механизма остановки убытков, выбора параметров и комбинации с другими показателями можно усилить стратегию, чтобы она была более подходящей для реальной торговли.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-08-26 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Elastic Volume Weighted Moving Average Cross Strategy", shorttitle="EVWMA Cross", overlay=true)
length1=input(5, title="EVWMA Short")
length2=input(40, title="EVWMA Long")
nbfs1=sum(volume, length1)
nbfs2=sum(volume, length2)
medianSrc=close
calc_evwma(price, length, nb_floating_shares) =>
data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)
data
m1=calc_evwma(medianSrc, length1, nbfs1)
m2=calc_evwma(medianSrc, length2, nbfs2)
if (crossover(m1, m2))
strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")
if (crossunder(m1, m2))
strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")
p1=plot(m1,color=orange,linewidth=2, title="evwma")
p2=plot(m2,color=orange,linewidth=2, title="evwma")