Тенденционная стратегия торговли, основанная на перекрестном использовании EMA

Автор:Чао Чжан, Дата: 2023-10-31 14:37:38
Тэги:

img

Обзор

Основная идея этой стратегии заключается в использовании золотого креста и сигналов мертвого креста индикатора EMA для принятия решений о покупке и продаже.

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

Стратегия сначала определяет несколько линий EMA, включая быстрые EMA от ema1 до ema6 и медленные EMA от ema7 до ema12. Затем определяется сигнал покупки buy_signal и сигнал продажи sell_signal:

  • Сигнал покупки buy_signal генерируется, когда ema1 пересекается над ema3.

  • Сигнал продажи sell_signal генерируется, когда ema1 переходит ниже ema3.

Таким образом, когда краткосрочная EMA пересекает долгосрочную EMA, это указывает на тенденцию к росту на рынке и запускается сигнал покупки.

Стратегия отслеживает пересечение линий EMA для определения направления тренда и принятия соответствующих решений о покупке/продаже.

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

Преимущества этой стратегии включают:

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

  2. Схема нескольких EMA позволяет более точно идентифицировать изменения тренда.

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

  4. Параметры периода EMA могут быть адаптированы к различным продуктам и рынкам.

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

Риски этой стратегии включают:

  1. Линии EMA имеют эффект отставания, который может задержать сигналы торговли.

  2. Неправильный выбор параметров EMA может привести к неправильным сигналам.

  3. Кроссы EMA не способны эффективно отфильтровать ложные сигналы на различных рынках.

  4. Существуют риски чрезмерного приспособления из-за ограниченного оптимизируемого пространства для параметров EMA.

Решения:

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

  2. Испытательная стабильность различных параметров периода для предотвращения переустановки.

  3. Корректировать параметры или добавлять механизмы выхода для контроля рисков.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Добавление стоп-лосса к позициям выхода, когда потери достигают порога.

  2. Внедрить логику повторного входа с дополнительными сигналами покупки/продажи.

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

  4. Включить другие показатели для многофакторной проверки для улучшения качества сигнала.

  5. Испытание настройки параметров на различных продуктах для поиска оптимальной применимости.

  6. Подумайте о скольжении в живой торговле и оптимизируйте с помощью обратного тестирования.

Резюме

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


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

//@version=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)

//bgcolor ( color=black, transp=20, title='Blackground', editable=true)

src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)


StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")

 
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)

//src = close, 
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")

//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)

//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL  ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)



//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")


//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")


//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)

plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")

alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')

//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')


testStartYear = input(2018, "From Year") 
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()
    if buy_signal
        strategy.entry("Long", true)
    

    if sell_signal
        strategy.close("Long")

Больше