Количественная двухсторонняя стратегия


Дата создания: 2023-12-29 16:29:21 Последнее изменение: 2023-12-29 16:29:21
Копировать: 0 Количество просмотров: 601
1
Подписаться
1621
Подписчики

Количественная двухсторонняя стратегия

Обзор

Стратегия основана на комбинации двух показателей EMA и Bull Power. Название стратегии включает в себя ключевые слова “кодирование” и “кодирование”, что подчеркивает ее особенности использования двух независимых показателей.

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

Стратегия состоит из двух частей:

  1. 220 EMA. Этот показатель рассчитывает 2 и 20-дневные EMA, которые дают сигнал купить, когда цена пересекает EMA снизу, и сигнал продать, когда цена пересекает EMA снизу.
  2. Индекс Bull Power. Индекс рассчитывает плюсовую силу на основе отношения текущей K-линии к предыдущей K-линии и создает соответствующий торговый сигнал, когда плюсовая сила превышает установленный порог.

Для открытия позиции требуется одновременное срабатывание двух сигналов. Например, EMA Gold Fork и Bull Power являются положительными для открытия позиции, EMA Dead Fork и Bull Power являются отрицательными для открытия позиции.

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

  1. Двойные индикаторы комбинируются, чтобы отфильтровать ложные сигналы. Одиночные индикаторы подвержены влиянию внешних факторов, которые могут создавать ложные сигналы. Комбинированные индикаторы могут проверять друг друга, отфильтровывать ложные сигналы и улучшать качество сигнала.
  2. Параметры индикатора регулируемы. Циклы EMA и порог Bull Power могут быть настроены настраиваемо, чтобы адаптироваться к различным условиям рынка.
  3. Простые и понятные. Стратегия использует только два распространенных показателя, принципы простые и понятные.

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

  1. Риск сбоя показателя. Даже если показатель комбинированный, в крайних случаях может произойти сбой показателя.
  2. Риски оптимизации параметров. Неправильная настройка параметров может привести к слишком большому количеству или недостаточному количеству сделок, снижая эффективность стратегии.

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

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

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

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

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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/07/2022
// This is combo strategies for get a cumulative signal.  
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//  Bull Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BP(SellLevel) =>
    pos = 0.0
    value = close < open ?  
             close[1] < open ?  math.max(high - close[1], close - low): math.max(high - open, close - low):
              close > open ? 
               close[1] > open ?  high - low : math.max(open - close[1], high - low) : 
                 high - close > close - low ? 
                  close[1] < open ? math.max(high - close[1], close - low) : high - open : 
                   high - close < close - low ? 
                     close[1] > open ?  high - low : math.max(open - close, high - low) : 
                      close[1] > open ? math.max(high - open, close - low) :
                       close[1] < open? math.max(open - close, high - low): high - low
    val2 = ta.sma(value, 15)                   
    pos :=  val2 > SellLevel ? 1 : -1
    pos

strategy(title='Combo 2/20 EMA & Bull Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Bull Power ═════●'
SellLevel = input.float(-15, step=0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBP = BP(SellLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)