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

Автор:Чао Чжан, Дата: 2023-10-17 14:00:41
Тэги:

img

Обзор

Эта стратегия сочетает в себе индикатор кроссовера EMA и индикатор медвежьей силы для генерации краткосрочных медвежьих сигналов.

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

  1. EMA Crossover: рассчитывает экспоненциальную скользящую среднюю (EMA) периода 2/20 и генерирует сигналы продажи, когда цена ниже EMA.

  2. Bear Power: рассчитывает разницу между ценой закрытия и ценой открытия дня как power value. Значение мощности, превышающее порог продажи, дает медвежий сигнал (-1 для краткости); значение мощности, ниже порога покупки, дает бычий сигнал (1 для длинного); в противном случае 0 для нейтрального.

  3. Сочетание этих двух показателей создает короткий сигнал, когда перекресток EMA <0 и мощность подъема <-1.

  4. Стратегия открывает короткую позицию на основе сигнала продажи и закрывает позицию на основе сигнала выхода.

Преимущества

  1. Кроссовер EMA может заранее предсказать точки переворота тренда.

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

  3. Сочетание двух индикаторов помогает отфильтровать ложные прорывы и определить более сильный медвежий импульс.

  4. Гибкие параметры подходят для различных продуктов и рыночных условий.

  5. Функция обратного движения адаптируется к двусторонним рынкам.

Риски

  1. Кроссовер EMA может отставать от оптимальных поворотных точек.

  2. Сила медведя может генерировать ложные сигналы во время консолидации с диапазоном.

  3. Она не может определить средне- и долгосрочные тенденции, и рискует оказаться в ловушке.

  4. Настройка параметров, требуемая в качестве ненадлежащих настроек, таких как слишком короткий период EMA или слишком высокий порог продажи, может увеличить ложные сигналы.

  5. Обратите внимание на ключевые экономические события, чтобы избежать запланированных торговых сессий.

Улучшение

  1. Подумайте о добавлении стоп-лосса к лимиту по торговым потерям.

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

  3. Добавить длинные периоды EMA для определения основного направления тренда и избежать контратендентных сделок.

  4. Оптимизировать такие параметры, как адаптивный период EMA и динамический порог продажи.

  5. Рассмотрим возможность объединения нескольких временных рамок для включения краткосрочных, среднесрочных и долгосрочных показателей.

Заключение

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


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 19/04/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
//  Bear 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,BuyLevel) =>
    pos = 0.0
    value =  close < open  ?  
                 close[1] > open ?  math.max(close - open, high - low): high - low: 
                     close > open ? 
                         close[1] > open ? math.max(close[1] - low, high - close): math.max(open - low, high - close): 
                             high - close > close - low ? 
                                 close[1] > open ? math.max(close[1] - open, high - low) : high - low : 
                                  high - close < close - low ? 
                                   close > open ? math.max(close - low, high - close) : open - low : 
                                      close > open ? math.max(close[1] - open, high - close) :
                                       close[1] < open ? math.max(open - low, high - close) : high - low
    pos := value > SellLevel ? -1 :
    	     value <= BuyLevel ? 1 :nz(pos[1], 0) 

    pos

strategy(title='Combo 2/20 EMA & Bear Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bear Power ═════●'
SellLevel = input.float(10, step=0.01, group=I2)
BuyLevel = input.float(1, 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,BuyLevel)
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)

Больше