En la carga de los recursos... Cargando...

El valor de las operaciones de mercado se calcula en función de las operaciones de mercado.

El autor:¿ Qué pasa?, Fecha: 2024-04-26 12:00:21
Las etiquetas:El MACDEl valor de las emisiones de CO2El ATREl EMA- ¿Qué es?

img

Resumen general

Esta estrategia utiliza MACD-V (MACD con volatilidad ATR) y retracements de Fibonacci para tomar decisiones comerciales a través de múltiples marcos de tiempo. Calcula los niveles de MACD-V y Fibonacci en diferentes marcos de tiempo, y luego decide si abrir o cerrar posiciones basadas en la relación del precio actual con los niveles de Fibonacci y los valores de MACD-V. La estrategia tiene como objetivo capturar las tendencias y retracements del mercado mientras controla el riesgo.

Principios de estrategia

  1. Calcular el indicador MACD-V en diferentes plazos de tiempo (por ejemplo, 5 minutos y 30 minutos).
  2. En un período de tiempo más largo (por ejemplo, 30 minutos), calcular el máximo máximo y el mínimo mínimo de los últimos determinados períodos (por ejemplo, 9 períodos), y luego calcular los niveles de retroceso de Fibonacci basados en este intervalo.
  3. Determine si abrir una posición basándose en la relación entre el precio de cierre actual y los niveles de Fibonacci, así como el valor y la dirección del MACD-V. Por ejemplo, cuando el precio se retrae a alrededor del nivel de Fibonacci del 38,2% y el MACD-V se mueve hacia abajo entre -50 y 150, abra una posición corta.
  4. Después de abrir una posición, utilice un trailing stop para proteger las ganancias y controlar el riesgo.
  5. Si el precio alcanza el nivel de stop de seguimiento o stop de pérdida fijo, cierre la posición.

Análisis de ventajas

  1. La estrategia emplea un análisis de marcos de tiempo múltiples, que proporciona una comprensión más completa de las tendencias y fluctuaciones del mercado.
  2. El indicador MACD-V tiene en cuenta la volatilidad de los precios, por lo que es eficaz tanto en los mercados de tendencias como en los de variación.
  3. Los niveles de Fibonacci pueden capturar eficazmente las áreas clave de soporte y resistencia, proporcionando una referencia para las decisiones comerciales.
  4. Los trailing stops permiten mantener la rentabilidad durante la continuación de la tendencia y cerrar oportunamente las posiciones durante las reversiones de precios, controlando el riesgo.
  5. La lógica de la estrategia es clara, los parámetros son ajustables y la adaptabilidad es fuerte.

Análisis de riesgos

  1. La estrategia puede experimentar operaciones frecuentes en mercados variados, lo que lleva a altos costos de transacción.
  2. El hecho de basarse en indicadores técnicos para juzgar las tendencias puede dar lugar a un error de juicio cuando el mercado experimenta falsas rupturas o oscilaciones prolongadas.
  3. Las posiciones de stop loss fijas pueden no responder oportunamente a condiciones extremas de mercado, lo que puede dar lugar a pérdidas significativas.
  4. La selección incorrecta de parámetros puede resultar en un mal desempeño de la estrategia.

Direcciones de optimización

  1. Introducir más marcos de tiempo e indicadores, como los MA de período más largo, para mejorar la precisión del juicio de tendencia.
  2. Optimizar la gestión de las posiciones, por ejemplo, ajustando dinámicamente el tamaño de las posiciones en función del ATR o del rango de precios.
  3. Establecer diferentes combinaciones de parámetros para diferentes condiciones de mercado para mejorar la adaptabilidad.
  4. Además de los trailing stops, introducir pérdidas de trailing stop para controlar mejor el riesgo a la baja.
  5. Prueba y optimiza los parámetros para encontrar la mejor combinación de parámetros.

Resumen de las actividades

Esta estrategia utiliza los niveles de retroceso MACD-V y Fibonacci a través de múltiples marcos de tiempo para determinar tendencias y tiempos de entrada, y emplea trailing stops para controlar dinámicamente el riesgo y la ganancia. La lógica de la estrategia es clara y adaptable, pero puede experimentar riesgos de comercio y errores de juicio frecuentes en mercados variados. Al introducir más indicadores, optimizar la gestión de posiciones y la lógica de stop loss, y optimizar los parámetros, la robustez y rentabilidad de la estrategia se pueden mejorar aún más.

Reconocimiento

El indicador MACD-v utilizado en esta estrategia se atribuye a Alex Spiroglou, el creador original.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)

Relacionados

Más.