Количественная торговая стратегия с пересечением двойной экспоненциальной скользящей средней


Дата создания: 2024-01-25 14:04:23 Последнее изменение: 2024-01-25 14:04:23
Копировать: 0 Количество просмотров: 659
1
Подписаться
1617
Подписчики

Количественная торговая стратегия с пересечением двойной экспоненциальной скользящей средней

Обзор

Эта стратегия называется стратегия количественного трейдинга на основе пересечения двузначных средних индексов. Эта стратегия позволяет автоматизировать торговлю путем вычисления двузначных движущихся средних (Exponential Moving Average, EMA) и принятия решений о пересечении точек покупки и продажи в сочетании с принципом открытия позиций в количественной торговле.

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

Основная логика этой стратегии основана на двузначных скользящих средних. Показатель 1 представляет собой краткосрочную 20-дневную ЭМА, а показатель 2 - долгосрочную 50-дневную ЭМА.

Кроме того, стратегия также использует количественный индикатор Vortex, чтобы помочь определить тенденцию и генерировать торговые сигналы. Показатель Vortex определяет направление взлета и падения, рассчитывая разницу между максимальной ценой и ценой закрытия вчерашнего дня, минимальной ценой и ценой закрытия вчерашнего дня.

При появлении торгового сигнала осуществляется управление рисками в соответствии с встроенным в стратегию модулем управления капиталом в сочетании с принципом прибыльно-убыточного соотношения. Стратегия позволяет установить стоп-лосс и стоп-пост для блокировки прибыли, чтобы контролировать риск.

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

  • 1. Интеграция стратегии с двумя количественными показателями EMA-cross и Vortex, чтобы использовать преимущества показателя и повысить точность сигнала
  • 2. Автоматизированные торговые системы, не требующие участия человека, снижающие вероятность человеческих ошибок
  • 3. Встроенная автоматическая функция остановки убытков, которая позволяет ограничить максимальную потерю на одну сделку
  • 4. Модуль управления капиталом контролирует долю вложенных средств в каждой сделке, что позволяет контролировать общий риск сделки

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

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

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

  • 1. Можно тестировать настройки параметров EMA, оптимизировать перекрестный сигнал
  • 2. Можно использовать для фильтрации большего количества показателей.
  • 3. Параметры могут быть автоматически оптимизированы с помощью алгоритмов машинного обучения

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

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

Исходный код стратегии
/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 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/
// © smottybugger 

//@version= 5
strategy("The  Averages Moving_X_Vortex", shorttitle="2.5billion BTC lol" , calc_on_order_fills=true, calc_on_every_tick=true, commission_type=strategy.commission.percent, commission_value=0.02, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, margin_long=0, margin_short=0,overlay=true)
// Dual Vortex
period_1 = input(15, "short Time")
period_2 = input(25, "long time")
VMP = math.sum(math.abs(high - low[3]), period_1)
VMM = math.sum(math.abs(low - high[1]), period_2)
STR = math.sum(ta.atr(1), period_1)
STR2 = math.sum(ta.atr(1), period_2)
VXpower= (input(5,"Vortex Power")/10000)*close
shorterV =(VMP / STR)*VXpower
longerV = (VMM / STR2)*VXpower

// MACross
shortlen = input(20, "ShortMa")
longlen = input(29, "LongMA")
shorterMA = ta.sma(close, shortlen)
longerMA = ta.sma(close, longlen)

// Vortex "MACross Stabilized"
Varance = input(1, "Vortex Stabilize")
Vpercent = (Varance / 100)
shortV= ((((shorterMA-close)* Vpercent)+shorterV)/2)+close
longV = ((((longerMA -close )*Vpercent)+longerV)/2)+close

//MAcross vortex stabilized
Marance = input(1, "MACross Stabilize")
MApercent = Marance / 100
shortMA = ((((shorterMA-close)*MApercent)+shorterV)/2)+close
longMA = ((((longerMA-close)*MApercent)+longerV)/2)+close

//VMXadveraged Moving cross adveraged
VMXL=(longV+longMA)/2
VMXS=(shortV+shortMA)/2
VXcross= ta.cross(VMXS,VMXL) ? VMXS : na
VMXcross= ta.cross(VMXS,VMXL)

//plot
plot(VMXS,"BUY",color=#42D420)
plot(VMXL,"SELL",color=#e20420)
crossV= ta.cross(shortV, longV) ? shortV : na
plot(shortV ,"shortV", color=#42D420)
plot(longV,"longV", color=#e20420)
plot(crossV,"crossV", color=#2962FF, style=plot.style_cross, linewidth=4)
crossMA = ta.cross(shortMA, longMA) ? shortMA : na
plot(shortMA,"shortMA", color=#42D420)
plot(longMA,"longMA", color=#e20420)
plot(crossMA,"crossMA", color=#2962FF, style=plot.style_cross, linewidth=4)
plot(VXcross,"VMXcross",color=#2962FF, style= plot.style_cross,linewidth=4)
plot(close,color=#999999)

// Vortex Condistyle
is_Vlong =shortV< longV
is_Vshort =shortV>longV


// Vortex commands
Vlong =  ta.crossunder(longV, shortV)
Vshort =ta.crossover(shortV,longV)
VorteX = ta.cross(longV, shortV)

// MACross Conditions
is_MAlong = shortMA < longV
is_MAshort = shortMA > shortV


//VMX Conditions
is_VMXlong=VMXS<VMXL
is_VMXshort=VMXS>VMXL

// MA commands
MAlong = ta.crossunder(shortMA, longV)
MAshort =ta.crossover(shortMA, shortV)
MAcross =  ta.cross(shortMA, longMA)
 
//VMX COMMANss
VMXBUY=ta.crossover( VMXS,VMXL)
VMXSELL=ta.crossunder(VMXS,VMXL)

// Close Crossing PositionLMXs

CS=is_MAshort or is_VMXshort
CL= is_MAlong or is_VMXlong
OS=MAshort or VMXSELL
OL=MAlong or VMXBUY


if VMXcross
    strategy.close_all ("closed")

//if CS and  OL
    strategy.close("Short",comment="Short Closed")


//if CL and  OS
    strategy.close("Long",comment="Long Closed" ) 

//CA1= is_MAcross and is_VorteX
//if CA1
   // strategy.close_all(comment="X2X")

// Defalongyntry qty

if is_VMXlong and VMXSELL
    strategy.entry("sell",strategy.short)


if is_VMXshort and VMXBUY
    strategy.entry("buy",strategy.long)



// Stop Losses & Taking Profit
sllp = input(0, "Stop Loss Long")
sll = (1 - sllp / 100) * strategy.position_avg_price
is_sll = input(true, "Stop Long")

tplp = input(0, "Take Profit Long")
tpl = (1 + tplp / 100) * strategy.position_avg_price
is_tpl = input(true, "Take Long")

slsp = input(0, "Stop Loss Short")
sls = (1 + slsp / 100) * strategy.position_avg_price
is_sls = input(true, "Stop Short")

tpsp = input(0, "Take Profit Short")
tps = (1 - tpsp / 100) * strategy.position_avg_price
is_tps = input(true, "Take Short")

if (is_sll or is_sls) 
    strategy.close("Stop Losses", qty_percent=100)

if (is_tpl or is_tps) 
    strategy.close("Take Profits", qty_percent=100)


 //Strategy Backtest
//plot(strategy.equity, "Equity", color=color.red, linewidth=2, style=plot.style_areabr)