MACD-V и многовременная стратегия Фибоначчи с динамической фиксацией прибыли

MACD MACD-V ATR EMA MA
Дата создания: 2024-04-26 12:00:21 Последнее изменение: 2024-06-25 11:28:55
Копировать: 0 Количество просмотров: 908
1
Подписаться
1617
Подписчики

MACD-V и многовременная стратегия Фибоначчи с динамической фиксацией прибыли

Обзор

Стратегия использует MACD-V (MACD с ATR-волатильностью) и фибоначевые отклонения для принятия торговых решений на нескольких временных рамках. Она рассчитывает уровни MACD-V и Фибоначе в разных временных рамках, а затем принимает решения о открытии и закрытии позиций в зависимости от отношения текущей цены к уровню Фибоначева и значения MACD-V. Стратегия направлена на то, чтобы захватить тенденции и отклонения рынка, контролируя при этом риск.

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

  1. Показатель MACD-V, рассчитывающий различные временные рамки (например, 5 минут и 30 минут), MACD-V вводит корректировку ATR на основе MACD для адаптации к различным состояниям рынка.
  2. Вычислите максимальные и минимальные цены за прошедший определенный период (например, 9 циклов) на высокоуровневых временных рамках (например, 30 минут), а затем на основе этого интервала вычислите уровень фибоначевой регрессии.
  3. Для определения того, соответствует ли условию открытия позиции, используйте отношение текущей закрытой цены к уровню Фибоначчи, а также значение и направление изменения MACD-V. Например, открыть позицию, когда цена возвращается к 38.2% около уровня Фибоначчи, а MACD-V движется вниз в диапазоне от 50 до 150.
  4. После открытия позиции используется движущийся стоп для защиты прибыли и контроля риска. Положение движущегося стопа динамически корректируется в зависимости от движения цены и параметров стратегии.
  5. Если цена достигает уровня движущейся или фиксированной остановки, то она проходит.

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

  1. Стратегия использует многократный анализ временных рамок для более полного понимания тенденций и колебаний рынка.
  2. Индекс MACD-V учитывает колебания цен и эффективно работает как в трендовых, так и в волатильных рынках.
  3. Уровни Фибоначчи хорошо отражают ключевые зоны поддержки и сопротивления цены и служат ориентиром для принятия торговых решений.
  4. Мобильные стопы позволяют сохранить прибыль при продолжении тренда, а также своевременно ликвидировать позиции при обратном движении цены, контролируя риск.
  5. Стратегическая логика четкая, параметры регулируемы, адаптивность высока.

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

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

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

  1. Введение большего количества временных рамок и показателей, таких как более длинные периодические МА, для повышения точности определения тенденций.
  2. Оптимизация управления позициями, например, изменение размеров позиций в зависимости от ATR или ценовых диапазонов.
  3. Различные комбинации параметров для различных состояний рынка, повышение адаптивности.
  4. На базе мобильных стоп-ап, внедряется мобильный стоп-лост, чтобы лучше контролировать риск снижения.
  5. Отслеживание и оптимизация параметров стратегии, чтобы найти оптимальную комбинацию параметров.

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

Стратегия определяет тенденции и время открытия позиции с помощью MACD-V и Fibonacci retracement levels в нескольких временных рамках и использует движущиеся стопы для динамического контроля риска и прибыли. Логика стратегии ясна и адаптивна, но в условиях волатильности рынка может возникать риск частых сделок и ошибочных суждений.

Спасибо.

В этой стратегии используется индикатор MACD-v, созданный Алексом Спироглу.MACD-v.

Исходный код стратегии
/*backtest
start: 2024-03-26 00:00:00
end: 2024-04-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © catikur

//@version=5
strategy("Advanced MACD-V and Fibonacci Strategy with EMA Trailing TP", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=1000, margin_long=1./10*50, margin_short=1./10*50, slippage=0, commission_type=strategy.commission.percent, commission_value=0.05)

// Parametreler
fast_len = input.int(12, title="Fast Length", minval=1, group="MACD-V Settings")
slow_len = input.int(26, title="Slow Length", minval=1, group="MACD-V Settings")
signal_len = input.int(9, title="Signal Smoothing", minval=1, group="MACD-V Settings")
atr_len = input.int(26, title="ATR Length", minval=1, group="MACD-V Settings")
source = input.source(close, title="Source", group="MACD-V Settings")

//ema_length = input.int(20, title="EMA Length for Trailing TP", group="Trailing TP Settings")
trailing_profit = input.float(1000, title="Trailing Profit", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
trailing_offset = input.float(30000, title="Trailing Offset", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
trailing_factor = input.float(0.01, title="Trailing Factor", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
fix_loss = input.float(20000, title="Fix Loss", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")

fib_lookback = input.int(9, title="Fibonacci Lookback Periods", minval=1, group="Fibonacci Settings")

macd_tf = input.timeframe("5", title="MACD Timeframe", group="Timeframe Settings")
fib_tf = input.timeframe("30", title="Fibonacci Timeframe", group="Timeframe Settings")
//ema_tf = input.timeframe("30", title="EMA Timeframe for Trailing TP", group="Timeframe Settings")




// MACD-V Hesaplama
atr = ta.atr(atr_len)
ema_slow = ta.ema(source, slow_len)
ema_fast = ta.ema(source, fast_len)

atr_tf = request.security(syminfo.tickerid, macd_tf , atr)
ema_slow_tf = request.security(syminfo.tickerid, macd_tf , ema_slow)
ema_fast_tf = request.security(syminfo.tickerid, macd_tf , ema_fast)

macd = ( ema_fast_tf - ema_slow_tf ) / atr_tf * 100
signal = ta.ema(macd, signal_len)
hist = macd - signal
hist_prev = hist[1]

// log.info("MACD {0} ", macd)
// log.info("Signal {0} ", signal)
// log.info("Histogram {0} ", hist)
// log.info("Previous Histogram {0} ", hist_prev)

// EMA for Trailing TP
//ema_trailing_tf = ta.ema(close, ema_length)

//ema_trailing = request.security(syminfo.tickerid, ema_tf, ema_trailing_tf)

//log.info("EMA Trailing {0} ", ema_trailing)

// Fibonacci Seviyeleri

high_val_tf = ta.highest(high, fib_lookback)
low_val_tf = ta.lowest(low, fib_lookback)

h1 = request.security(syminfo.tickerid, fib_tf, high_val_tf)
l1 = request.security(syminfo.tickerid, fib_tf, low_val_tf)

fark = h1 - l1

//Low ile fark
hl236 = l1 + fark * 0.236
hl382 = l1 + fark * 0.382
hl500 = l1 + fark * 0.5
hl618 = l1 + fark * 0.618
hl786 = l1 + fark * 0.786
//High ile fark
lh236 = h1 - fark * 0.236
lh382 = h1 - fark * 0.382
lh500 = h1 - fark * 0.5
lh618 = h1 - fark * 0.618
lh786 = h1 - fark * 0.786

hbars_tf = -ta.highestbars(high, fib_lookback)
lbars_tf = -ta.lowestbars(low, fib_lookback)

hbars = request.security(syminfo.tickerid, fib_tf , hbars_tf)
lbars = request.security(syminfo.tickerid, fib_tf , lbars_tf)

fib_236 = hbars > lbars ? hl236 : lh236
fib_382 = hbars > lbars ? hl382 : lh382
fib_500 = hbars > lbars ? hl500 : lh500
fib_618 = hbars > lbars ? hl618 : lh618
fib_786 = hbars > lbars ? hl786 : lh786

// log.info("Fibo 382 {0} ", fib_382)
// log.info("Fibo 618 {0} ", fib_618)

// Keep track of the strategy's highest and lowest net profit
var highestNetProfit = 0.0
var lowestNetProfit  = 0.0

var bool sell_retracing = false
var bool sell_reversing = false
var bool buy_rebound = false
var bool buy_rallying = false

// Satış Koşulları
sell_retracing := (signal > -20) and (macd > -50 and macd < 150) and (macd < signal) and (hist < hist_prev) and (close < fib_382)
sell_reversing := (macd > -150 and macd < -50) and (macd < signal) and (hist < hist_prev) and (close < fib_618)

// log.info("Retracing var mi: {0} ", sell_retracing)
// log.info("Reversing var mi: {0} ", sell_reversing)

// Alım Koşulları
buy_rebound := (signal < 20) and (macd > -150 and macd < 50) and (macd > signal) and (hist > hist_prev) and ((fib_618 < close) or ((fib_618 > close ) and (close > fib_382)))
buy_rallying := (macd > 50 and macd < 150) and (macd > signal) and (hist > hist_prev) and (close > fib_618)

// log.info("Rallying var mi: {0} ", buy_rallying)
// log.info("Rebound var mi: {0} ", buy_rebound)

// Emirleri Yerleştirme
if (sell_retracing == true and strategy.opentrades == 0 )
    strategy.entry("sell_retracing", strategy.short)

if (sell_reversing == true and strategy.opentrades == 0 )
    strategy.entry("sell_reversing", strategy.short)

if (buy_rebound == true and strategy.opentrades == 0 )
    strategy.entry("buy_rebound", strategy.long)

if (buy_rallying == true and strategy.opentrades == 0 )
    strategy.entry("buy_rallying", strategy.long)


// log.info("open order: {0} ", strategy.opentrades )


highestNetProfit := math.max(highestNetProfit, strategy.netprofit)
lowestNetProfit  := math.min(lowestNetProfit, strategy.netprofit)




// Plot the net profit, as well as its highest and lowest value
//plot(strategy.netprofit, style=plot.style_area, title="Net profit",
//     color=strategy.netprofit > 0 ? color.green : color.red)

//plot(highestNetProfit, color=color.green, title="Highest net profit")
//plot(lowestNetProfit, color=color.red, title="Lowest net profit")

// Trailing Take Profit
//long_trailing_stop = ema_trailing * trailing_factor
//short_trailing_stop = ema_trailing / trailing_factor

//log.info("long trailing stop {0} ", long_trailing_stop)
//log.info("short trailing stop {0} ", short_trailing_stop)
//log.info("avg price {0} ", strategy.position_avg_price)
//trail_price1 = strategy.position_avg_price * (1 + trailing_factor)
//trail_price2 = strategy.position_avg_price * (1 - trailing_factor)
// log.info("position_size {0} ", strategy.position_size)

// Trailing Take Profit
var float long_trailing_stop = 0.0
var float short_trailing_stop = 0.0

//if (strategy.position_size > 0)
 //   long_trailing_stop := math.max(long_trailing_stop, close * (1 + trailing_factor))  // Yeni bir maksimum değer belirlendiğinde güncelle
//if (strategy.position_size < 0)
 //  short_trailing_stop := math.min(short_trailing_stop, close * (1 - trailing_factor))  // Yeni bir minimum değer belirlendiğinde güncelle

//log.info("long trailing {0} ", long_trailing_stop)
// log.info("trailing factor{0} ", trailing_factor)
//log.info("short trailing {0} ", short_trailing_stop)

if (strategy.position_size != 0 )
    strategy.exit("Exit Long", from_entry="buy_rebound", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Long", from_entry="buy_rallying", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Short", from_entry="sell_retracing", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Short", from_entry="sell_reversing", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)