Кроссовер краткосрочный прорыв разворотная стратегия 5EMA


Дата создания: 2024-01-30 15:30:19 Последнее изменение: 2024-01-30 15:30:19
Копировать: 0 Количество просмотров: 677
1
Подписаться
1617
Подписчики

Кроссовер краткосрочный прорыв разворотная стратегия 5EMA

В данной статье будет рассказано о стратегии реверсивной торговли, основанной на коротких линиях 5EMA. Эта стратегия использует 5EMA для определения ценовой тенденции и реверсивной торговли, когда цена пересекает EMA.

Обзор стратегии

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

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

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

  1. Использование 5-циклической EMA для определения краткосрочных тенденций цен

  2. Определить, превысила ли цена показатель EMA

  3. Когда цена переходит через EMA сверху вниз, это создает сигнал продажи.

  4. Когда цена пересекает EMA снизу вверх, она создает сигнал “купить”.

  5. Установка стоп-стоп и остановки, ограничение одиночных потерь

Поскольку индикатор EMA может эффективно оценивать краткосрочные тенденции, он может быстро улавливать торговые возможности при заметном обратном движении цены.

Стратегические преимущества

  • Быстро реагируют на высокие частоты, чтобы поймать короткие возможности.
  • Двухсторонние сделки, которые позволяют одновременно делать больше ликвидных позиций
  • Устойчивая настройка сдерживающего элемента, ограничение на однократные потери
  • Простая настройка параметров, легкая оптимизация стратегии

Стратегические риски и решения

  • Ложные взломы приводят к ненужным потерям
    • Оптимизация циклических параметров EMA для обеспечения стабильности показателя
  • Слишком высокая частота сделок может привести к резким колебаниям.
    • Ограничение максимального количества транзакций в день

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

  • Оптимизация параметров показателя EMA для поиска оптимального циклического сочетания
  • Увеличение фильтров снижает вероятность ложного проникновения
  • Ограничение максимального количества транзакций в день
  • В сочетании с другими показателями, чтобы определить направление тенденции

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

Эта стратегия в целом является очень практичной стратегией короткого прорыва. Использование показателей EMA для определения ценового разворота очень просто и эффективно, и является важным инструментом количественной торговли.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © samscripter

//@version=5
strategy("5 ema strategy",overlay = true,process_orders_on_close = true)

// Choose trade direction

t_dir = input.string("Both", title="Trade Direction",options=["Long", "Short", "Both"],group = 'Trade Direction Set')

long_side  = t_dir == "Long" or t_dir == "Both"
short_side = t_dir == "Short" or t_dir == "Both"

// number of trade
mx_num =input.int(4,title = 'number Of trade',group = 'Maximum Number Of Trade')
var hi =0.0
var lo =0.0

var group_ma1="Ema Set"

//Ema 1
on_ma=input.bool(true,"Enable EMa 1 Plot On/Off"  ,group =group_ma1)
ma_len= input.int(5, minval=1, title="Ema Length",group =group_ma1)
ma_src = input.source(close, title="Ema Source"   ,group = group_ma1)
ma_out = ta.ema(ma_src, ma_len)

// buy and sell ema condition  
plot(on_ma?ma_out:na, color=color.white, title="MA")


if close>ma_out and open>ma_out and low>ma_out and high>ma_out
    lo:=low

if close<ma_out and open<ma_out and low<ma_out and high<ma_out
    hi:=high
    
// condition when price is crossunder lo take sell and when price crossoing hi take buy 
var buyp_sl =float(na)
var sellp_sl =float(na)

//count number trade since day stra
var count_buysell=0

if  close>hi[1] 
    if strategy.position_size==0 and count_buysell<mx_num and long_side
        strategy.entry('El',strategy.long,comment = 'Long')
        count_buysell:=count_buysell+1
        buyp_sl:=math.min(low,low[1])
    hi:=na
if  close<lo[1]
    if strategy.position_size==0 and count_buysell<mx_num and short_side
        strategy.entry('Es',strategy.short,comment = 'short')
        count_buysell:=count_buysell+1
        sellp_sl:=math.max(high,high[1])
    lo:=na

//take profit multiply 

tpnew = input.float(title="take profit", step=0.1, defval=1.5, group='Tp/SL')


//stop loss previous candle high and previous candle low
buy_sl = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,buyp_sl , 0)
sell_sl= ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,sellp_sl, 0)

//take profit
takeProfit_buy = strategy.position_avg_price - ((buy_sl - strategy.position_avg_price) *tpnew)
takeProfit_sell = strategy.position_avg_price - ((sell_sl - strategy.position_avg_price) *tpnew)


//  Submit exit orders
if strategy.position_size > 0
    strategy.exit(id='XL', stop=buy_sl,limit=takeProfit_buy,comment_loss = 'Long Sl',comment_profit = 'Long Tp')

if strategy.position_size < 0
    strategy.exit(id='XS', stop=sell_sl,limit=takeProfit_sell,comment_loss = 'Short Sl',comment_profit = 'Short Tp')
    
//plot data
plot(series=strategy.position_size < 0 ?sell_sl : na, style=plot.style_circles, color=color.red, linewidth=2, title="St red Stop")
plot(series=strategy.position_size > 0 ?buy_sl  : na, style=plot.style_circles, color=color.green, linewidth=2, title="St green Stop")


// plot take profit
plot(series=strategy.position_size < 0 ? takeProfit_sell : na, style=plot.style_circles, color=color.orange, linewidth=2, title="take profit sell")
plot(series=strategy.position_size > 0 ? takeProfit_buy: na, style=plot.style_circles, color=color.blue, linewidth=2, title="take profit buy")

if ta.change(time('D'))
    count_buysell:=0