Стратегия ZVWAP на основе расстояния Z от VWAP

Автор:Чао Чжан, Дата: 2023-11-10 12:02:19
Тэги:

img

Обзор

Эта стратегия основана на Z-расстоянии от индикатора VWAP от LazyBear. Она использует Z-расстояние между ценой и VWAP для определения условий перекупления и перепродажи, а также входов и выходов. Стратегия включает линии EMA и Z-расстояние пересечения уровня 0, чтобы отфильтровать какой-то шум.

Логика стратегии

  1. Расчет значения VWAP
  2. Расчет расстояния Z между ценой и VWAP
  3. Установка перекупленной линии (2.5) и перепроданной линии (-0.5)
  4. Пройти длинный курс, когда быстрая EMA > медленная EMA, Z-дистанция < перепроданная линия и Z-дистанция пересекаются выше 0
  5. Закрыть позицию при Z-дистанции > перекупленной линии
  6. Включить логику стоп-лосса

Ключевые функции:

  • calc_zvwap: Вычислить Z-расстояние между ценой и VWAP
  • Значение VWAP: vwap(hlc3)
  • Быстрая ЭМА: ЭМА (близкая, быстрая ЭМА)
  • Медленная ЭМА: ЭМА (близкая, медленная ЭМА)

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

  1. Дистанция Z интуитивно показывает уровни перекупленности/перепроданности
  2. EMA отфильтровывает ложные прорывы
  3. Позволяет пирамидерировать на тенденциях
  4. Имеет логику стоп-лосса для контроля риска

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

  1. Необходимо обеспечить параметры, такие как линии, периоды EMA правильно установлены
  2. Задержка индикатора Z-расстояния, может пропустить ключевые повороты
  3. Пирамида может увеличить убытки, если тенденция изменится
  4. Стоп-лосс должен быть установлен разумно

Решения:

  1. Оптимизировать параметры с помощью обратного тестирования
  2. Добавление других показателей к фильтрующим сигналам
  3. Создать условия для пирамиды
  4. Использование динамического стоп-лосса

Руководство по оптимизации

  1. Оптимизировать периоды EMA
  2. Проверка различных критериев перекупки/перепродажи
  3. Добавить другие индикаторы для фильтрации шума
  4. Испытать различные методы остановки потерь
  5. Оптимизировать логику входа, пирамиды и остановки потерь

Резюме

Стратегия использует расстояние Z для определения отношения между ценой и VWAP и добавляет EMA для фильтрации сигналов, направленных на захват трендовых возможностей. Она позволяет пирамидировать тенденции и имеет стоп-лосс для контроля риска. Оптимизация и добавление других индикаторов могут улучшить надежность. Однако следует учитывать отставание Z-расстояния во время оптимизации. В целом это стратегия, следующая за трендом с простой, четкой логикой.


/*backtest
start: 2022-11-03 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee

//@version=4
//This is based on Z distance from VWAP by Lazybear
strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)
length=input(13,"length")

calc_zvwap(pds, source1) =>
	mean = sum(volume*source1,pds)/sum(volume,pds)
	vwapsd = sqrt(sma(pow(source1-mean, 2), pds) )
	(close-mean)/vwapsd


upperTop=2.5  //input(2.5)
upperBottom=2.0  //input(2.0)
lowerTop=-0.5  //input(-0.5)
lowerBottom=-2.0 //input(-2.0)

buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3)
sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)

stopLoss =input(5, title="Stop Loss",minval=1) 

hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green)

ul1=plot(upperTop, "OB High")
ul2=plot(upperBottom, "OB Low")
fill(ul1,ul2, color=color.red)
ll1=plot(lowerTop, "OS High")
ll2=plot(lowerBottom, "OS Low")
fill(ll1,ll2, color=color.green)
zvwapVal=calc_zvwap(length,close)
plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2)


longEmaVal=ema(close,slowEma)
shortEmaVal=ema(close,fastEma)  

vwapVal=vwap(hlc3)


zvwapDipped=false

for i = 1 to 10
    zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine

longCondition=  shortEmaVal > longEmaVal  and zvwapDipped and  crossover(zvwapVal,0)

barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ZVWAPLE", long=true,  when= longCondition  and strategy.position_size<1) 


//Add
strategy.entry(id="ZVWAPLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ZVWAPLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss

strategy.close(id="ZVWAPLE",comment="TPExitAll",    qty=strategy.position_size ,   when= crossunder(zvwapVal,sellLine))   //close all      zvwapVal>sellLine

Больше