Стратегия торговли движущимися средними золотыми спицами генерирует сигналы покупки и продажи, рассчитывая пересечение быстрого EMA ((fastLength) и медленного EMA ((slowLength). При пересечении медленного на быстром направлении генерируется сигнал покупки; при пересечении медленного ниже быстрого направления генерируется сигнал продажи.
Стратегия использует две движущиеся средние, быструю и медленную линии. Параметр быстрой линии EMAfastLength является дефолтной 9-дневной линией, а параметр медленной линии EMAAslowLength - дефолтной 26-дневной линией.
Конкретные торговые сигналы и правила стратегии:
Так что эта стратегия заключается в том, чтобы совершать торговые операции, когда происходят два движущихся средних: золотой и мертвый.
Для снижения риска требуется большое количество тестов, в которых используются оптимизируемые параметры, такие как циклы скользящих средних, типы сделок, стоп-стоп-лосс и т. д.
Идея пересечения движущихся средних в этой стратегии проста и практична и может быть оптимизирована следующими способами:
Благодаря этим оптимизированным тестам можно значительно повысить эффективность и стабильность стратегии.
Стратегия пересечения скользящих средних просты, и ее практическое применение требует постоянной оптимизации. Эта стратегия дает логику генерирования торговых сигналов и основные правила торговли, на основе которых она может быть интенсивно оптимизирована, что делает ее практически полезной количественной стратегией.
/*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"}]
*/
//@version=4
strategy("EMA Cross by MarketAlpha", overlay=true)
EMAfastLength = input(defval = 9, minval = 2)
EMAslowLength = input(defval = 26, minval = 2)
Targetpercentage = input(defval = 0.15, title = "Profit Target in percentage", minval = 0.05)
StopLosspercentage = input(defval = 0.20, title = "Stop Loss in percentage", minval = 0.05)
profitpoints = close*Targetpercentage
stoplosspoints = close*StopLosspercentage
price = close
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
emafast = ema(price, EMAfastLength)
emaslow = sma(price, EMAslowLength)
plot(emafast,color=green)
plot(emaslow,color=red)
enterLong() => crossover(emafast, emaslow)
strategy.entry(id = "MarketAlpha Long", long = true, when = window() and enterLong())
strategy.exit("Exit Long", from_entry = "MarketAlpha Long", profit = profitpoints,loss = stoplosspoints)
enterShort() => crossunder(emafast, emaslow)
strategy.entry(id = "MarketAlpha Short", long = false, when = window() and enterShort())
strategy.exit("Exit Short", from_entry = "MarketAlpha Short", profit = profitpoints,loss = stoplosspoints)