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

Автор:Чао Чжан, Дата: 2023-10-26 17:15:46
Тэги:

img

Обзор

Система Double EMA Crossover - это торговая система, основанная на двух экспоненциальных скользящих средних (EMAs). Она использует две EMA с разными периодами, чтобы определить текущее направление тренда и генерировать соответствующие торговые сигналы. Благодаря своей простой логике и простой реализации, эта система может эффективно улавливать рыночные тенденции и подходит для средне- и долгосрочных трейдеров.

Как это работает

Основой этой системы являются две EMA, одна более быстрая EMA и одна более медленная EMA. Когда быстрая EMA выше медленной EMA, она считается быстрой. Когда быстрая EMA ниже медленной EMA, она считается медленной.

На основе отношений цены с двумя EMA, слитки можно разделить на различные торговые зоны:

  • Когда быстрая EMA выше медленной EMA, а цена выше быстрой EMA (G1), это сильная зона покупки, здесь можно занять длинную позицию.

  • Когда быстрая EMA ниже медленной EMA и цена ниже быстрой EMA (R1), это сильная зона продажи, здесь можно занять короткую позицию.

  • При пересечении двух СВМ предупреждающие (желтые) и переходные (оранжевые) зоны определяются на основе взаимосвязи цен с двумя СВМ. Эти зоны указывают на потенциальные сдвиги тренда, и сделки следует проводить с осторожностью с использованием дополнительных показателей.

Торговые сигналы генерируются при движении цены в разных зонах. В сильных зонах G1 и R1 сигналы могут быть получены непосредственно. В зонах предупреждения и перехода требуется дополнительное подтверждение индикатора.

StochRSI также реализован для помощи в выявлении потенциальных точек входа и выхода.

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

  • Простая и чистая логика, которую легко понять и реализовать

  • Эффективно отслеживает среднесрочные и долгосрочные тенденции

  • Отличает сильные зоны от зон предупреждения/переходного режима, создавая надежные торговые сигналы

  • Включение StochRSI еще больше улучшает сроки входа и выхода

Риски

  • В качестве чисто тенденционной системы, производительность может пострадать на рынках без тенденций

  • Ненадлежащие настройки периода EMA могут вызвать ложные сигналы

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

  • Отсутствие стоп-лосса может привести к усилению потерь

Риски могут быть уменьшены:

  1. Выбор инструментов с сильным трендом и приостановка торговли при слабом тренде

  2. Оптимизация периодов EMA для минимизации ложных сигналов

  3. Введение дополнительных показателей для подтверждения в зонах предупреждения/переходного периода

  4. Внедрение стоп-лосса для контроля потерь на одну сделку

Возможности для расширения

Система может быть улучшена в следующих областях:

  1. Включить больше индикаторов, таких как MACD, KDJ для подтверждения сигнала

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

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

  4. Внедрять стратегии стоп-лосса для выхода из торгов при определенных процентах потерь

  5. Оптимизация размеров позиций и управления деньгами

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

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

Заключение

Система двойного EMA Crossover - это система отслеживания трендов, основанная на сравнении двух EMA. Она определяет различные торговые зоны на основе отношений цены с EMA для определения направления тренда и генерации торговых сигналов. Как система с четкой логикой и легкой реализацией, она может эффективно улавливать тенденции.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Vvaz_
//base-on CDC ActionZone By Piriya   a simple 2EMA and is most suitable for use with medium volatility market
//@version=4
strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2)

//variable
srcf = input(title="Source",type=input.source,defval=close)
tffix = input(title="Fixed Timeframe",type=input.bool,defval=true)
tfn = input(title="Timeframe in",type=input.resolution,defval="D")
ema1 = input(title="Fast EMA",type=input.integer,defval=12)
ema2 = input(title="Slow EMA",type=input.integer,defval=26)
ema3 = input(title="EMA 100",type=input.bool,defval=true)
smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2)
fillbar =input(title="Fill Bar Color",type=input.bool,defval=true)
emasw = input(title="Show EMA",type=input.bool,defval=true)
bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true)
plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true)
plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2)

//math
xcross =ema(srcf,smooter)
efast = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1)
eslow = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2)
ema3x = ema(xcross,100)


//Zone
Bull = efast > eslow
Bear = efast < eslow

G1 = Bull and xcross > efast //buy
G2 = Bear and xcross > efast and xcross > eslow //pre-buy1
G3 = Bear and xcross > efast and xcross < eslow //pre-buy2

R1 = Bear and xcross < efast //sell
R2 = Bull and xcross < efast and xcross < eslow //pre-sell1
R3 = Bull and xcross < efast and xcross > eslow //pre-sell2

//color
bcl =   G1 ? color.green :  G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black
barcolor(color=fillbar ? bcl : na )

//plots
line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white)
line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green)
line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red)
fillcl = Bull ? color.green : Bear ? color.red : color.black
fill(line2,line3,fillcl)

//actions
buywhen = G1 and G1[1]==0
sellwhen = R1 and R1[1]==0

bullish = barssince(buywhen) < barssince(sellwhen)
bearish = barssince(sellwhen) < barssince(buywhen)

buy = bearish[1] and buywhen
sell = bullish[1] and sellwhen

bullbearcl = bullish ? color.green : bearish ? color.red : color.black

//plot trend
plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green)
plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red)

// Momentum Signal using StochRSI

smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1)
smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1)
RSIlen = input(14,"RSI length",type=input.integer,minval=1)
STOlen = input(14,"Stochastic length",type=input.integer,minval=1)
SRsrc = input(close,"Source for StochasticRSI",type=input.source)
OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00)
OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00)
rsil = rsi(SRsrc,RSIlen)
K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK)
D = sma(K,smoothD)

buymore = iff( bullish ,iff(D < OSlel and crossover(K,D),	2,	 iff(D > OSlel and crossover(K,D),	 1,0)),0)
sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D),	2,	 iff(D < OBlel and crossunder(K,D),	 1,0)),0)
//plot momentum
plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green)
plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red)


// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2009, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//stratgy excuter
strategy.entry("Long",true,when=window() and buy or buymore)
strategy.close("Long",when=window() and sell or sellmore,comment="TP Long")
strategy.entry("Short",false,when=window() and sell or sellmore)
strategy.close("Short",when=window() and buy or buymore,comment="TP Short")




        

Больше