Трансграничная краткосрочная стратегия отмены прорыва 5EMA

Автор:Чао Чжан, Дата: 2024-01-30 15:30:19
Тэги:

img

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

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

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

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

Принцип стратегии

  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

Больше