Ayuda a la codificación - página 351

 
mladen:
stevenpun Para ello lo más fácil sería añadir algún buffer de "dirección de la pendiente" a ese indicador o utilizar algún otro MACD que ya tenga esa pendiente resuelta en un buffer

Que tal este https://www.mql5.com/en/forum/178018/page67

Pero el problema de lo que debo poner en el código, tengo google muchos ea pero no éxito para encontrar algún ejemplo.

Por favor, muéstrame algún ejemplo, gracias por la ayuda.

 
stevenpun:
Que tal esto https://www.mql5.com/en/forum/178018/page67

Pero el problema que debo poner en el código, he googleado muchos ea pero no éxito para encontrar algún ejemplo.

Por favor, muéstrame algún ejemplo, gracias por la ayuda.

stevenpun

Ese sería un buen ejemplo para usar.

Lee el buffer de "colores" y cuando el valor en el cambia de -1 a 1 es una señal de compra, y cuando el valor cambia de 1 a -1 es una señal de venta (el "desde" es el valor anterior del buffer de colores y "hasta" es el valor actual, o si quieres trabajar con barras cerradas solamente, "desde" es 2 barras atrás y "hasta" es 1 barra atrás)

 

Hola,

soy nuevo aquí. Me gustaría actualizar un objeto rectángulo, pero no sé cómo. El código de abajo se utiliza para crear rectángulos objeto, si EMAs cruzado. Estos rectángulos deben terminar si el precio retrocede y lo toca. ¿Cómo hacerlo?

Gracias de antemano.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

for (i=0; i<limit; i++) {

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

 

¿Cómo comunicarse entre dos o más EAs?

 

El newBie está tratando de desarrollar esto a MT4 build 670. Ayuda ~

Descargue el Robot de Comercio 'Tres Medias Móviles' (Asesor Experto) para MetaTrader 5 en MetaTrader Market?

Me gusta esto porque me gusta K.I.S.S. (keep it simple stupid)

Soy un novato y me gustaría desarrollar esto.

(1. version_01)

Cuando se ejecuta, coloca la posición de inmediato tan pronto como EA está en.

Es como la ingeniería inversa de .ex5 para crear .mq4.

(2. version_02)

En el mismo gráfico, visualiza el R & S Semanal que se encontrará desde el Zig-Zag.

(3. version_03)

Añadir la lógica,

--- no entrar por encima o por debajo de 20pips de la línea de tendencia.

borrar la posición, a 20 pips de distancia de la R & S semanal.

Su ayuda será agradecida ~

Gracias de antemano ~

 

cosmiclifeform, es curioso que no pude conseguir el Nice TraderEA a la prueba de nuevo desde entonces, así que no podía optimizarlo, he hecho que en la demo de alpari y ista forex, el mismo....it seguir dándome resultado en blanco.Can u por favor dígame consejos que utiliza para backtest.

cosmiclifeform:
Hola Mastercash,

He podido descargar y ejecutar el EA de NiceTrader en el Probador de Estrategias sin problemas.

Sólo utilicé la configuración por defecto y no cambié nada... y no recibí ningún mensaje de error.

No intenté ejecutarlo en tiempo real en mi demo... pero este EA funciona bien con el Probador de Estrategias. Ver gráfico adjunto...

¿Recibes algún mensaje de error en el registro u otras pistas de por qué no está operando para ti...?

Espero que esto ayude,

Robert

 
Mastercash:
cosmiclifeform, es curioso que no podía conseguir el TraderEA Niza a la prueba de nuevo desde entonces, así que no podía optimizado, he hecho que en la demo alpari y forex ista, el mismo....it seguir dándome resultado en blanco.

Hola Mastercash,

Ejecuté el EA en una cuenta de demostración FXDD... y no hice nada especial... sólo ejecuté el EA en el Probador de Estrategias con la configuración predeterminada.

Me gustaría poder ayudar más ... pero sin pistas específicas para rastrear (registros de error, capturas de pantalla, y otras condiciones) será imposible averiguar por qué usted está recibiendo resultados en blanco.

Todo lo que puedo recomendar es...

Primero prueba un buen EA en el probador que sepas que funciona bien.

Esto establecerá que tanto tus cuentas demo como tus procedimientos están bien.

Obtenga su confianza primero de que todo funciona como se supone.

Luego pruebe su Nice TraderEA... y anote exactamente lo que sucede. Incluso una pantalla en blanco debería tener registros para comprobar.

Pruebe a añadir declaraciones PRINT y COMENTARIO en todas partes...luego compruebe sus registros de nuevo...tanto en la pestaña EA como en la pestaña Journal...

También sus COMENTARIOS aparecerán en la pantalla...así que debería ver su EA funcionando o no.

La línea de fondo en la obtención de una buena ayuda de codificación ...

Es proporcionar la mayor cantidad de pistas que puede encontrar a lo que está sucediendo con su EA ...

Sigue intentando todo lo posible...y haznos saber los resultados.

Cuídate,

Robert

 
apprentice coder:
¿Cómo comunicarse entre dos o más EAs?

Si te refieres a si hay alguna función o conjunto de funciones dedicadas a eso, entonces la respuesta es que no existe tal cosa.

He visto bastantes intentos y hasta ahora ninguno de los que he visto funciona en todas las situaciones. Excepto uno. Pero uno lo he inventado yo y como la idea es tan simple que todavía no puedo creer que a nadie se le haya ocurrido (incluso proporciona la comunicación de EAs que no están en la misma ubicación en absoluto y no utiliza ninguna API para ello) entonces me quedo con esa solución (en este caso estoy esperando a ver si alguien piensa en lo mismo)

Sólo trata de pensar fuera de los límites esperados

 
mladen:
Si te refieres a si hay alguna función o conjunto de funciones dedicadas a eso, entonces la respuesta es que no hay tal cosa.

He visto bastantes intentos y hasta ahora ninguno de los que he visto funciona en todas las situaciones. Excepto uno. Pero uno es inventado por mí y como la idea es tan simple que todavía no puedo creer que nadie pensó en ella (incluso proporciona la comunicación de los EAs que no están en la misma ubicación en absoluto y no utiliza ninguna API para eso) entonces estoy manteniendo esa solución para mí (en este caso estoy esperando a ver si alguien piensa en lo mismo)

Sólo trata de pensar fuera de los límites esperados

Sé lo que quieres decir: las ideas a veces valen mucho más que la forma en que se hacen después. Gracias

 

Hola,

querido mladen, tengo una pequeña petición para ti - ¿podrías desactivar toda la información que el indicador adjunto muestra en la esquina superior izquierda?

gracias de antemano ;-)

Archivos adjuntos: