Estrategia diaria basada en la media móvil y el indicador Williams


Fecha de creación: 2024-01-29 14:35:48 Última modificación: 2024-01-29 14:35:48
Copiar: 1 Número de Visitas: 639
1
Seguir
1617
Seguidores

Estrategia diaria basada en la media móvil y el indicador Williams

Descripción general

Esta estrategia combina el uso de la línea media, el indicador ATR y el indicador William para realizar operaciones a nivel de línea diaria para la variedad de divisas GBP / JPY. La estrategia determina la tendencia de los precios y los posibles puntos de reversión a través de la línea media, y luego utiliza el indicador William para confirmar aún más las señales de negociación, mientras calcula el punto de parada y el volumen de transacción con el indicador ATR.

Principio de estrategia

  1. Utiliza la línea media de 20 días (la línea base) para determinar la tendencia general de los precios, los precios se eliminan por debajo de la línea media como una señal de compra, y se rompen por encima de la línea media como una señal de venta
  2. El índice de William se utiliza para confirmar la reversión de los precios. El índice se utiliza para confirmar la compra cuando se pasa a 35 y la confirmación de venta cuando se pasa a 70
  3. El indicador ATR calcula el rango de fluctuación promedio de los últimos 2 días. El valor se multiplica por el coeficiente y se establece como la distancia de parada
  4. Control de riesgos de acuerdo con el 50% de los intereses de la cuenta. El volumen de operaciones se calcula en función de la distancia de parada y el riesgo.
  5. Después de entrar en una posición larga, el punto de parada es el punto de baja del precio menos la distancia de parada. El punto de parada es el punto de entrada más 100 puntos. La lógica de salida se utiliza para confirmar aún más la señal de salida.
  6. Después de entrar en una posición corta, el stop loss y el stop loss se sincronizan. La lógica de salida se utiliza para confirmar aún más la señal de salida.

Análisis de las ventajas

  1. El uso integrado de la línea media para determinar la tendencia y los indicadores para confirmar la entrada en juego, puede filtrar eficazmente los daños causados por las brechas falsas.
  2. El stop loss dinámico de ATR puede establecer una distancia de stop loss razonable según la amplitud de las fluctuaciones del mercado
  3. El control de riesgos y el cálculo dinámico del volumen de operaciones permiten controlar al máximo las pérdidas individuales
  4. La combinación de la lógica de salida con la línea de paridad puede confirmar aún más el momento de la salida y evitar el paro prematuro

Análisis de riesgos

  1. El juicio de la línea media tiene una mayor probabilidad de generar una señal errónea y requiere una confirmación adicional del indicador.
  2. Los indicadores en sí mismos pueden generar señales erróneas y no evitar completamente las pérdidas.
  3. Esta estrategia es más adecuada para variedades de tendencia, y puede ser menos eficaz para variedades de variación de rango.
  4. El mal ajuste de las proporciones de los controles de riesgo también puede afectar los beneficios de la estrategia.

Se puede optimizar y mejorar aún más mediante el ajuste del ciclo de la línea media, la combinación de más indicadores o el intercambio de intervenciones artificiales.

Resumir

La estrategia combina el juicio de la tendencia y el filtro del indicador, el diseño de métodos para el comercio de GBP / JPY a nivel de la línea de sol. Al mismo tiempo, el uso de medios como el stop loss dinámico y el control de riesgo para controlar el riesgo de la negociación.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("GBPJPY DAILY FX",initial_capital = 1000,currency="USD", overlay=true)

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

//INDICATOR---------------------------------------------------------------------    
    //Average True Range (1. RISK)
atr_period = 2
atr = atr(atr_period)



    //Ichimoku Cloud - Kijun Sen (2. BASELINE)
ks_period = 20
kijun_sen = (highest(haHigh,ks_period) + lowest(haLow,ks_period))/2
base_long = haOpen < kijun_sen and haClose > kijun_sen
base_short = haOpen > kijun_sen and haClose < kijun_sen

    //Williams Percent Range (3. Confirmation#1)
use_wpr = true
wpr_len = 4
wpr = -100*(highest(haHigh,wpr_len) - haClose)/(highest(haHigh,wpr_len) - lowest(haLow,wpr_len))
wpr_up = -35
wpr_low = -70
conf1_long = wpr >= wpr_up
conf1_short = wpr <= wpr_low
if(use_wpr == false)
    conf1_long := true
    conf1_short := true
//TRADE LOGIC-------------------------------------------------------------------
    //Long Entry
    //if -> WPR crosses below -39 AND MACD line is less than signal line
l_en = base_long and conf1_long
    //Long Exit
    //if -> WPR crosses above -14
l_ex = haClose < kijun_sen
    //Short Entry
    //if -> WPR crosses above -39 AND MACD line is greater than signal line
s_en = base_short and conf1_short
    //Short Exit
    //if -> WPR crosses under -14
s_ex = haClose > kijun_sen
    
strategy.initial_capital = 50000
//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
isTwoDigit = input(true,"Is this a 2 digit pair? (JPY, XAU, XPD...")
risk = input(50,"Risk %")/100           //risk % per trade
equity_protector = input(30,"Equity Protection %")/100  //equity protection %
stop = atr*100000*input(1,"Average True Range multiplier")    //Stop level
if(isTwoDigit)
    stop := stop/100
target = input(100, "Target TP in Points")  //TP level
    //Calculate current DD and determine if stopout is necessary
equity_stopout = false
if(floating<0 and abs(floating/balance)>equity_protector)
    equity_stopout := true
    
    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1            //Set min. lot size

//TRADE EXECUTION---------------------------------------------------------------
strategy.close_all(equity_stopout)      //Close all trades w/equity protector
is_open = strategy.opentrades > 0

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 = 2000, 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

if(time_cond)
    strategy.entry("l_en",true,1,oca_name="a",when=l_en and not is_open)  //Long entry
    strategy.entry("s_en",false,1,oca_name="a",when=s_en and not is_open) //Short entry
    
    strategy.exit("S/L","l_en",loss=stop, profit=target)      //Long exit (stop loss)
    strategy.close("l_en",when=l_ex)            //Long exit (exit condition)
    strategy.exit("S/L","s_en",loss=stop, profit=target)      //Short exit (stop loss)
    strategy.close("s_en",when=s_ex)            //Short exit (exit condition)