Стратегия пересечения осциллятора MACD и EMA


Дата создания: 2023-09-23 15:24:12 Последнее изменение: 2023-09-23 15:24:12
Копировать: 0 Количество просмотров: 746
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия является простой и эффективной торговой стратегией, которая сочетает в себе волатильный индикатор MACD с EMA. В настоящее время она настроена на 4-часовую K-линию, которая может быть скорректирована на другие временные периоды по мере необходимости.

Стратегический принцип

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

  1. Индекс MACD: оценивает динамику цен.

  2. Средняя линия EMA: определение направления ценовой тенденции.

  3. Временные условия: ограниченный период действия стратегии.

  4. Выбор в пользу большего или меньшего пространства.

Конкретные правила сделки следующие:

  1. Повышение/понижение: когда конечная цена выше EMA, MACD-полюс положительный, и текущая K-линия выше предыдущего дня.

  2. Понижение/уничтожение: когда цена закрытия ниже EMA, MACD-полюс отрицателен, и текущая K-линия ниже предыдущего дня.

Стратегия была очень ясна, она объединяла тенденции и краткосрочные идеи торговли в эффективную систему количественных решений.

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

По сравнению с одним показателем, стратегия имеет следующие преимущества:

  1. MACD определяет краткосрочную динамику, EMA определяет направление тренда, индикатор тесно совпадает.

  2. Правила простые, понятные, легко понятные и практически несложные.

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

  4. Вы можете выбрать только односторонние сделки с лихвой или лишним весом, а также двусторонние сделки.

  5. Можно установить период действия стратегии, чтобы избежать ненужных сделок.

  6. “Все, что мы делаем, - это работаем над тем, чтобы обеспечить стабильную производительность и стабильную прибыль в течение многих лет.

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

  8. Для оптимизации и улучшения можно использовать технологии машинного обучения.

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

Несмотря на многочисленные преимущества этой стратегии, следует учитывать следующие риски:

  1. Оптимизация параметров имеет широкий диапазон, существует риск переоптимизации.

  2. Не установлен стоп-стоп, существует риск увеличения убытков.

  3. Не учитывая объемы сделок, возможны ложные прорывы.

  4. Задержка в распознавании поворотных точек тренда не позволяет полностью избежать потерь.

  5. Эффективность может ослабеть из-за изменения рыночной ситуации.

  6. Необходимо обращать внимание на устойчивость модели, основанную только на исторических данных.

  7. Это означает, что транзакции будут происходить чаще, а их стоимость может быть выше.

  8. Следует обратить внимание на коэффициент выручки и убытка, чтобы избежать слишком высокой кривой.

Направление оптимизации

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

  1. Присоединяйтесь к объему сделок, чтобы избежать ложных прорывов.

  2. Увеличение настройки стоп-стоп, контроль за единичными потерями.

  3. Оценка эффективности параметров в разные периоды времени.

  4. Внедрение технологий машинного обучения для динамической оптимизации.

  5. Проверка на нескольких рынках, повышение устойчивости

  6. Позиции могут быть изменены, чтобы снизить частоту торгов.

  7. Оптимизация стратегии управления капиталом.

  8. Проверка контрактов на разницу в цене, повышение частоты.

  9. Постоянная обратная проверка, чтобы предотвратить пересоответствие.

Подвести итог

В целом, эта стратегия, в сочетании с 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)