Стратегия прогнозирования будущего пути MacD

Автор:Чао Чжан, Дата: 2023-12-13 17:21:44
Тэги:

img

Обзор

Основная идея этой стратегии заключается в прогнозировании ценовых тенденций путем анализа будущей тенденции индикатора MacD. Стратегия в полной мере использует торговые сигналы, генерируемые перекрестниками быстрых и медленно движущихся средних, которые составляют индикатор MacD.

Принцип стратегии

  1. Вычислить разницу (историческое значение) индикатора MacD для определения подъема и падения линии MacD и линии сигнала.
  2. Использовать будущее значение индикатора MacD в течение 4-часового промежутка времени путем установки опционов покупки для оценки будущей тенденции индикатора MacD и прогнозирования ценовых тенденций.
  3. Пройти длинную торговлю, когда разница показателя MacD больше 0, что означает бычий рынок, и ожидается, что она продолжит расти; пройти короткую торговлю, когда разница показателя MacD меньше 0, что означает медвежий рынок, и ожидается, что она продолжит падать.
  4. Стратегия сочетает в себе как следующий за трендом, так и стиль торговли с изменением тренда, захватывая тенденции, а также захватывая точки изменения тренда.

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

  1. Преимущество использования индикатора MacD для оценки рыночных тенденций заключается в том, что он эффективно отфильтровывает консолидации и отслеживает долгосрочные тенденции.
  2. С помощью прогнозов будущих тенденций индикатора MacD можно заранее определить переломные моменты в ценах, чтобы повысить перспективность стратегии.
  3. Интеграция как следующих тенденциям, так и стилей торговли с изменением тренда позволяет своевременно изменить позицию во время отслеживания тренда, чтобы получить большую прибыль.
  4. Регулируемые параметры стратегии позволяют пользователям оптимизировать на основе различных временных рамок и рыночных условий для улучшения стабильности стратегии.

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

  1. Опираясь на прогнозы будущей тенденции индикатора MacD, можно привести к неудачным сделкам, если прогнозы неточны.
  2. Неправильное установление диапазона стоп-лосса также повлияет на эффективность стратегии.
  3. Отставание от индикатора MacD может привести к потере возможности для быстрого переворота цен.
  4. Необходимо контролировать влияние затрат на транзакции.

Руководство по оптимизации

  1. Включить другие индикаторы для прогнозирования, чтобы уменьшить зависимость от одного индикатора MacD и улучшить точность прогноза, например, изучение изменений объема торговли.
  2. Добавьте алгоритмы машинного обучения, тренируйте модели, чтобы предсказать будущие тенденции индикатора MacD.
  3. Оптимизируйте настройки параметров, чтобы найти лучшие комбинации параметров.
  4. Различные рыночные среды подходят для различных конфигураций параметров, адаптивная система может быть добавлена для автоматической оптимизации параметров.

Заключение

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


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
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 = 2019, title = "From Year", minval = 2017)
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()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Больше