¿Cómo codificar? - página 317

 

Hola,

Estoy pensando en cómo puedo codificar este indicador/herramientas.

Necesito un indicador, script o algo así donde puedo decidir algún rango en días (ex 12/10/2012-15/10/2012 o 15/10/2012-15/10/2012) y después de que se escribe en un archivo csv o Excel la alta baja abierta y cierre de la vela que aparece en el gráfico en función de TF (ex. si decido sólo un día y adjuntarlo en 1hr TF que escribir 24 velas con su especificación).

Gracias de antemano por su ayuda

 

Problema con la señal de alerta.

Hola a todos en la casa,hay este pequeño problema con un código de MT4 que escribí.Este código se supone que vigila tres indys,estoico,RSI,y CCI.si estoico cruza su línea de señal hacia arriba o hacia abajo Y RSI de período 70 y 6 se cruza hacia arriba o hacia abajo y CCI está por encima o por debajo de cero,debe haber una señal de compra si el conjunto de los 3 indys están por encima de sus líneas de señal o debe haber señal de venta si los 3 indys están por debajo de sus líneas de señal........este código funciona pero cada vez que hay una alerta, se sigue repitiendo en cada ticks de la vela.¿Qué puedo hacer para que esta alerta sólo suene una vez si las tres condiciones se cumplen en la vela actual y no vuelva a sonar. este es el código de abajo.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRECIO_CIERRE,0);

double b4enCCI=iCCI(NULL,240,6,PRECIO_TIPICO,1);

double nowenCCI=iCCI(NULL,240,6,PRECIO_TIPICO,0);

double b4trCCI=iCCI(NULL,240,14,PRECIO_TIPICO,1);

double nowtrCCI=iCCI(NULL,240,14,PRECIO_TIPICO,0);

// alertas

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Flecha de compra","\n", "Lahora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Flecha de venta","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

}

 
mladen:
pooh

Es simplemente porque los valores de los diferentes símbolos pueden diferir mucho (por ejemplo GBPJPY es alrededor de 126 ahora y EURUSD es aproximadamente 100 veces menos - cuando usted dibuja esos valores en el mismo gráfico, el valor de EURUSD es simplemente "fuera de la imagen porque metatrader toma los valores de GBPJPY como un criterio para la escala del gráfico).

Echa un vistazo a este hilo : https://www.mql5.com/en/forum/178052. Hay un par de soluciones para problemas similares en ese hilo ya

Gracias Mladen. Seguí tu enlace y encontré el indicador que se adapta a mi necesidad.

pooh

 

Prueba así :

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
Hola a todos en la casa,hay este pequeño problema con un código de MT4 que escribí.Este código se supone que vigila tres indys, estoico,RSI,y CCI.Si estoico cruza su línea de señal hacia arriba o hacia abajo Y RSI de período 70 y 6 se cruza hacia arriba o hacia abajo y CCI está por encima o por debajo de cero, debe haber una señal de compra si el conjunto de los 3 indys están por encima de sus líneas de señal o debe haber señal de venta si los 3 indys están por debajo de sus líneas de señal........este código funciona pero cada vez que hay una alerta, sigue repitiéndose en cada ticks de la vela.¿Qué puedo hacer para que esta alerta sólo suene una vez si las tres condiciones se cumplen en la vela actual y no vuelva a sonar. este es el código de abajo.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRECIO_CIERRE,0);

double b4enCCI=iCCI(NULL,240,6,PRECIO_TIPICO,1);

double nowenCCI=iCCI(NULL,240,6,PRECIO_TIPICO,0);

double b4trCCI=iCCI(NULL,240,14,PRECIO_TIPICO,1);

double nowtrCCI=iCCI(NULL,240,14,PRECIO_TIPICO,0);

// alertas

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Flecha de compra","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Flecha de venta","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 

Problemas con las alertas

Gracias mladen, lo voy a probar.nunca tomo nota de la función LastAlert() y por favor me puede indicar donde conseguir el directorio de todas estas funciones mt4 "tranche rouse".

 

Mastercash

Cuidado: no se trata de una función sino de una variable estática que se utiliza para almacenar la hora (hora de la barra) de la última alerta y así evitar múltiples alertas en la misma barra. Desgraciadamente no existe una función como LastAlert() en metatrader por lo que hay que buscar soluciones como la del ejemplo para solucionar la falta de funciones

Mastercash:
Gracias mladen, lo probaré.Nunca me he fijado en la función LastAlert() y por favor me puedes indicar donde conseguir el directorio de todas estas funciones de mt4 "tranche rouse".
 

Hola mladen.

Necesito asignar 24 variables a cada una de las 24 velas de la última hora del día.

Necesito hacer algunos cálculos con la vela y el resultado será asignado en un buffer.

¿Cómo puedo codificar para trabajar con cada una de las velas de 24 horas del día anterior?

Gracias

 

dasio

Puede utilizar algo similar a esto (este modo no utiliza arrays). Además, este ejemplo es para el día actual

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

dasio:
Hola mladen.

Necesito asignar 24 variables a cada una de las 24 velas de la última hora del día.

Necesito hacer algunos cálculos con la vela y el resultado será asignado en un buffer.

¿Cómo puedo codificar para trabajar con cada una de las velas de 24 horas del día anterior?

Gracias
 
mladen:
dasio

Puede utilizar algo similar a esto (este modo no utiliza arrays). Además, este ejemplo es para el día actual

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

Gracias mladen.

En este ejemplo

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

¿Qué vela se presenta y cómo puedo cambiar a la siguiente vela? i+1?

Gracias

 

dasio

Ya está haciendo un bucle con todas las horas del día actual. Puse el iClose() y el iOpen() solo como ejemplo de una llamada desde un marco de tiempo diferente a 1 hora. Si quieres acceder a un día diferente al actual entonces sustituye el "0" de la fecha startTime=iTime(NULL,PERIOD_D1,0); por el día que desees que se recojan los datos

dasio:
Gracias mladen.

En este ejemplo

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

¿Qué vela se presenta y cómo puedo cambiar a la siguiente vela? i+1?

Gracias