Creo que el indicador necesita ArraySetSeries (mf, true) y (ms, true) en OnInit () para que funcione correctamente.
Todos los operadores
if (flg == 0) / / initialise on first pass { ArrayInitialize (ag, EMPTY_VALUE); ArrayInitialize (bg, EMPTY_VALUE); ArrayInitialize (cg, EMPTY_VALUE); hi = 0; I = 0; trend = 0; flg = 1; }
sería más eficaz en OnInit () y no tener que utilizar "flg"
EA con respecto a ... utilizando MACD creo que su algoritmo de la estrategia se simplifica así:
Abrir comprar: MACDcurrent>MACDprev && MACDcurrent<0; buyed = true.
Cerrar compra: buyed && MACDcurrent<MACDprev && MACDcurrent>0; buyed = false
Para acciones inversas de venta.
Si usamos SL y TP cuando no opera el EA puedo decir "comprar" o "vender" como tendencia (MA lento) y esperar nueva señal.
Hola, no se porque este indicador: madelta_inc.mq5, no dibuja nada cuando lo adjunto al gráfico. Aquí os adjunto una imagen para que veáis lo que digo. También pongo a continuación el código con el cambio que sugiere josemiguel1812 sobre no usar el flag: 'flg', y mover parte del código al evento OnInit(). No he usado ArraySetAsSeries (mf, true) y ArraySetAsSeries (ms, true) porque tanto 'mf' como 'ms' son arrays de un solo elemento y creo que este cambio no tendra efecto, ademas MT5 no permite usar esta funcion para arrays estaticos. Pero lo que me gustaria saber es por que no dibuja las lineas del indicador?. ¿Podrías probar el siguiente código y comprobarlo?
gracias de antemano, Cyberglassed.
//+------------------------------------------------------------------+ //|madelta_inc //|Copyright 2013 Winston | //+------------------------------------------------------------------+ #property copyright "Winston 2013" #property version "1.10" #property description "madelta_inc" #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 3 #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 White,Yellow,Red #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_type2 DRAW_LINE #property indicator_color2 Yellow #property indicator_style2 STYLE_DOT #property indicator_width2 1 #property indicator_type3 DRAW_LINE #property indicator_color3 Red #property indicator_style3 STYLE_DOT #property indicator_width3 1 input double d = 0.00195; //delta input double m = 39.2; //mult input int F = 26; //media móvil rápida input ENUM_MA_METHOD FM = MODE_SMA; //modo medio rápido input ENUM_APPLIED_PRICE FP = PRICE_WEIGHTED; //modo de precio rápido input int S = 51; /media móvil lenta input ENUM_MA_METHOD SM = MODE_EMA; /modo medio lento input ENUM_APPLIED_PRICE SP = PRICE_MEDIAN; /modo de precio lento int Ms, Mf, trend; double px, hi, lo; double ms[1], mf[1]; double ag[], bg[], cg[], ac[]; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0, ag, INDICATOR_DATA); ArraySetAsSeries(ag, true); /señal SetIndexBuffer(1, ac, INDICATOR_COLOR_INDEX); ArraySetAsSeries(ac, true); /color de la tendencia de la señal SetIndexBuffer(2, bg, INDICATOR_DATA); ArraySetAsSeries(bg, true); //hi umbral SetIndexBuffer(3, cg, INDICATOR_DATA); ArraySetAsSeries(cg, true); //lo umbral ArrayInitialize(ag, EMPTY_VALUE); ArrayInitialize(bg, EMPTY_VALUE); ArrayInitialize(cg, EMPTY_VALUE); hi = 0; lo = 0; trend = 0; Mf = iMA(NULL, PERIOD_H1, F, 0, FM, FP); Ms = iMA(NULL, PERIOD_H1, S, 0, SM, SP); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // tamaño de la matriz price[] const int prev_calculated, // barras tratadas en una llamada anterior const int begin, // de dónde parten los datos significativos const double &price[]) // matriz para calcular { CopyBuffer(Mf, 0, 0, 1, mf); //valor medio móvil rápido CopyBuffer(Ms, 0, 0, 1, ms); /valor de la media móvil lenta px = pow(m * (mf[0] - ms[0]), 3); //amplificar y cubicar la diferencia if (px > hi) { //identificar tendencia hi = px; lo = hi - d; trend = 1; } if (px < lo) { //con cambio de color lo = px; hi = lo + d; trend = 2; } ag[0] = px; bg[0] = hi; cg[0] = lo; ac[0] = trend; return (rates_total); } //+------------------------------------------------------------------+
Hola, no se porque este indicador: madelta_inc.mq5, no dibuja nada cuando lo adjunto al gráfico. Aquí os adjunto una imagen para que veáis lo que digo. También pongo a continuación el código con el cambio que sugiere josemiguel1812 sobre no usar el flag: 'flg', y mover parte del código al evento OnInit(). No he usado ArraySetAsSeries (mf, true) y ArraySetAsSeries (ms, true) porque tanto 'mf' como 'ms' son arrays de un solo elemento y creo que este cambio no tendra efecto, ademas MT5 no permite usar esta funcion para arrays estaticos. Pero lo que me gustaria saber es por que no dibuja las lineas del indicador?. ¿Podrías probar el siguiente código y comprobarlo?
gracias de antemano, Cyberglassed.
¿Qué espera? Sólo se establecen los valores de índice 0 de los buffers del indicador.
Me resultaba un poco confuso ver que siempre se asignaba el índice 0 de los buffers, así que esperaba que el ArraySetAsSeries tuviera alguna influencia para cambiar el comportamiento intuitivo de lo que uno podría pensar (inverso) o algo así, soy principiante en mql5. De todas formas he tenido que reiniciar el ordenador por otro motivo y he vuelto a probar el indicador y ahora dibuja las líneas como esperaba al principio. Adjunto una imagen.
Gracias Cyberglassed.
Era un poco confuso para mi ver que siempre se asignaba el índice 0 de los buffers, por lo que esperaba que el ArraySetAsSeries tuviera alguna influencia para cambiar el comportamiento intuitivo de lo que uno podría pensar (inverso) o algo así, soy principiante en mql5. De todas formas he tenido que reiniciar el ordenador por otro motivo y he vuelto a probar el indicador y ahora dibuja las líneas como esperaba al principio. Adjunto una imagen.
Gracias Cyberglassed.
O bien el código que estás ejecutando no es el mismo que el que has publicado, o bien tu terminal dibuja datos procedentes de algunos buffers.
El código que has puesto no puede producir ese resultado.
Gracias por sus comentarios. El indicador es tal vez inusual en que está destinado a trabajar sólo con el Probador de Estrategias en el modo de Visulización.
En el Navegador, haga clic izquierdo en el ea y luego haga clic derecho en la prueba. En Probador de Estrategias EURUSD, H1 y marque la casilla Visulización y luego Iniciar, el indicador debe aparecer.
Déjame saber cómo te va.
Saludos cordiales
Winston
algo esta mal con este EA. Cuando trato de operar en un solo par de divisas esta EA no hizo nada a través de 2 días, indicador a veces muestran sel y comprar la señal al mismo tiempo.
Cuando trato de operar en varios pares de divisas hace lo mismo, pero observo que cuando cierro posiciones manualmente comienza a operar de nuevo, algo esta muy mal con este EA, algo esta bloqueando las operaciones en Meta Trader 5.
cuando lo he probado en el probador de estrategias todo va bien, pero cuando intento operar solo abre posiciones y no las cierra, necesito cerrarlas manualmente....
¿podría alguien arreglar esto?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Diferencia de dos medias móviles:
Asesor Experto basado en la diferencia de dos medias móviles.
Este Asesor Experto se ha desarrollado tras observar que cuando dos medias móviles divergen y convergen, típicamente existe una diferencia máxima entre sus valores instantáneos antes de que se produzca un cambio de tendencia.
Autor: Winston