Основная идея этой стратегии заключается в использовании золотого креста и сигналов мертвого креста индикатора EMA для принятия решений о покупке и продаже.
Стратегия сначала определяет несколько линий EMA, включая быстрые EMA от ema1 до ema6 и медленные EMA от ema7 до ema12. Затем определяется сигнал покупки buy_signal и сигнал продажи sell_signal:
Сигнал покупки buy_signal генерируется, когда ema1 пересекается над ema3.
Сигнал продажи sell_signal генерируется, когда ema1 переходит ниже ema3.
Таким образом, когда краткосрочная EMA пересекает долгосрочную EMA, это указывает на тенденцию к росту на рынке и запускается сигнал покупки.
Стратегия отслеживает пересечение линий EMA для определения направления тренда и принятия соответствующих решений о покупке/продаже.
Преимущества этой стратегии включают:
Использование линий EMA для определения тенденции может отфильтровать краткосрочный рыночный шум и сделать торговые сигналы более надежными.
Схема нескольких EMA позволяет более точно идентифицировать изменения тренда.
Стратегия проста и ясна. Торговые сигналы генерируются перекрестками EMA, что облегчает понимание и реализацию для квантовой торговли.
Параметры периода EMA могут быть адаптированы к различным продуктам и рынкам.
Риски этой стратегии включают:
Линии EMA имеют эффект отставания, который может задержать сигналы торговли.
Неправильный выбор параметров EMA может привести к неправильным сигналам.
Кроссы EMA не способны эффективно отфильтровать ложные сигналы на различных рынках.
Существуют риски чрезмерного приспособления из-за ограниченного оптимизируемого пространства для параметров EMA.
Решения:
Добавьте фильтры с другими индикаторами, чтобы избежать ошибочных сигналов на рынках диапазона.
Испытательная стабильность различных параметров периода для предотвращения переустановки.
Корректировать параметры или добавлять механизмы выхода для контроля рисков.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Добавление стоп-лосса к позициям выхода, когда потери достигают порога.
Внедрить логику повторного входа с дополнительными сигналами покупки/продажи.
Оптимизировать параметры перекрестного периода EMA для достижения наилучших результатов.
Включить другие показатели для многофакторной проверки для улучшения качества сигнала.
Испытание настройки параметров на различных продуктах для поиска оптимальной применимости.
Подумайте о скольжении в живой торговле и оптимизируйте с помощью обратного тестирования.
Это простая стратегия, основанная на перекрестном 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")