Это простая, но эффективная торговая стратегия, сочетающая в себе осциллятор MACD и кроссовер EMA. В настоящее время настроена на 4 часа свечей, но адаптируется к другим временным рамкам.
Ключевыми компонентами являются:
MACD: Осуждение изменений динамики цен.
EMA: определение направления ценового тренда.
Временное условие: определение периода действия стратегии.
Длинный/короткий вариант: выбор длинного или короткого направления.
Правила торговли:
Длинный/короткий выход: при закрытии выше EMA, гистограмма MACD положительная, а текущая свеча выше предыдущей свечи.
Короткий/длинный выход: при закрытии ниже EMA, гистограмма MACD отрицательна, а текущая свеча ниже предыдущей свечи.
Стратегия сочетает в себе тенденции и динамику в простой и эффективной системе.
По сравнению с едиными показателями основными преимуществами являются:
MACD определяет краткосрочную динамику, EMA определяет направление тренда.
Простые и понятные правила, которые легко понять и применить.
Гибкая настройка параметров для различных продуктов и временных рамок.
Опция только для длинной/короткой торговли или двусторонней торговли.
Может определить период действия стратегии, чтобы избежать ненужных сделок.
Устойчивое превосходство на протяжении многих лет.
Контролируемый риск по сделке.
Возможность дальнейшей оптимизации с помощью машинного обучения.
Несмотря на все преимущества, есть риски:
Широкая настройка параметров может привести к перенастройке.
Никаких остановок, риски неограниченных потерь.
Без фильтра на объем, риск ложных прорывов.
Задержка в поймании трендовых поворотов, не может избежать всех потерь.
Ухудшение производительности из-за изменения рыночных режимов.
Основываясь только на исторических данных, надежность модели является ключевой.
Высокая частота торговли увеличивает затраты на транзакции.
Необходимо следить за соотношением прибыли/риска и кривой собственности.
Стратегия может быть усилена путем:
Добавляю фильтр объема, чтобы избежать ложных прорывов.
Использование остановок для контроля потерь на одну сделку.
Оценка эффективности параметров в течение периода времени.
Включение машинного обучения для динамической оптимизации.
Испытания надежности на разных рынках.
Настройка размеров позиций для снижения частоты.
Оптимизация стратегий управления рисками.
Испытание инструментов для увеличения частоты.
Постоянное обратное тестирование для предотвращения перенастройки.
В целом, стратегия формирует простую, но мощную систему из комбинации MACD и EMA. Но постоянная оптимизация и тестирование надежности имеют решающее значение для любой стратегии, чтобы адаптироваться к изменяющимся рыночным условиям.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy("My Script", overlay=true) //heiking ashi calculation UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") // // === /INPUTS === // === BASE FUNCTIONS === haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //timecondition fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //ema data -- moving average len = input(9, minval=1, title="Length") src = input(hl2, title="Source") out = ema(src, len) //plot(out, title="EMA", color=color.blue) //histogram fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false) // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal //main variables to apply conditions are going to be out(moving avg) and hist(macd) long = haClose > out and haClose > haClose[1] and out > out[1] and hist> 0 and hist[1] < 0 and time_cond short = haClose < out and haClose < haClose[1] and out < out[1] and hist < 0 and hist[1] > 0 and time_cond //limit to 1 entry var longOpeneda = false var shortOpeneda = false var int timeOfBuya = na longCondition= long and not longOpeneda if longCondition longOpeneda := true timeOfBuya := time longExitSignala = short exitLongCondition = longOpeneda[1] and longExitSignala if exitLongCondition longOpeneda := false timeOfBuya := na plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.white) plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.white) //automatization longEntry= input(true) shortEntry=input(false) if(longEntry) strategy.entry("long",strategy.long,when=longCondition) strategy.close("long",when=exitLongCondition) if(shortEntry) strategy.entry("short",strategy.short,when=exitLongCondition) strategy.close("short",when=longCondition)