Ayuda a la codificación - página 188

 

hola mladen o cualquiera,

me he dado cuenta de que la plataforma mt4 tiene algunos indicadores por defecto (aunque algunos se repiten en la parte de indicadores personalizados,), pero el código creo que no es exactamente el mismo, cómo recuperar o ver el código de esos indicadores por defecto, muchas gracias por informarme.

 
kenwa:
hola mladen o cualquier persona, me doy cuenta de que la plataforma mt4 tiene algunos indicadores por defecto (aunque algunos se repiten en la parte de indicadores personalizados,), pero el código creo que no es exactamente el mismo, cómo recuperar o ver el código de los indicadores por defecto, muchas gracias por informarme.

No puede

Esos son indicadores incorporados (ejecutados directamente por la terminal)

 

parece que los indicadores incorporados son mejores que los de la sesión de indicadores personalizados en función, realmente no hay manera de saber el código de ellos?

 

Alguien me ha preguntado cómo estoy utilizando el encuadre temporal múltiple desde un único archivo (cuando no es posible llamar a las funciones incorporadas)

Aquí hay un ejemplo simple y algunas explicaciones en él

_____________________________

El indicador adjunto se comporta como 3 indicadores en uno y en el código encontrarán comentarios de lo que se hace y cuando. Espero que esto ayude a algunas personas a aclarar cómo se puede hacer un indicador multitemporal correcto de un solo archivo (que, entre otras cosas, siempre calculará el número correcto de barras, sin asumir cuántas barras en el marco de tiempo objetivo han sido cambiadas).

Así que este simple indicador multi time frame de un solo archivo puede ser fácilmente utilizado como una plantilla para los indicadores multi time frame

Archivos adjuntos:
 

hola mladen,

¿sabes si es posible y cómo hacer iStochasticOnArray? cualquier plantilla o fórmulas para hacer eso? gracias por informar.

 
kenwa:
hola mladen, ¿sabes si es posible y cómo hacer iStochasticOnArray? ¿alguna plantilla o fórmula para hacerlo? gracias por informar.

kenwa

No existe una función incorporada. En estos posts puedes ver cómo se puede escribir una función para hacer eso y cómo se puede utilizar entonces : https://www.mql5.com/en/forum/177239/page34

 

hola mladen

un poco profundo para mí

e.g.double iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0) ¿se trata de dobles dentro de dobles? ¿este método puede reducir el indexbuffer ocupado dentro del mq4?

este poco extraño para mí de su función:

stoch = iStoch(rsi,rsi,rsi,StoPeriod,StoSlowing,i);

gracias por alguna aclaración.

 
mladen:
No sé por qué no acepta el otro archivo wav

Si lo has cambiado en el código debería aceptarlo

Para repetirlo 5 veces deberías colocarlo en un bucle, pero eso podría causar algunos problemas (si el archivo de sonido es demasiado largo)

Este es el código que he utilizado (sé muy poco de codificación para saber cómo hacer bucles):

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property ventana_gráfica_del_indicador

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true

extern bool alertsMessage = true

extern bool alertsNotification = false

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int entradas[];

bool alerted[];

string symbols[];

int tipos[];

int tiempos[];

int init() { return(0); }

int deinit() { return(0); }

int inicio()

{

//

//

// recoge los datos de las órdenes

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())) continue;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

si (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(tipos ,tamaño); tipos = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// comprueba si alguna orden necesita ser alertada por

//

//

for (i=ArraySize(entradas)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true;

switch (tipos)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break

case OP_BUYLIMIT : type = "límite de compra"; break

case OP_SELLSTOP : type = "stop de venta"; break

case OP_SELLLIMIT : type = "límite de venta"; break;

}

doAlert(type+" abierto en : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" para "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

cadena mensaje;

mensaje = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("alertas de pedido "+mensaje);

if (alertsSound) PlaySound("hallelujah.wav");

}

pero sólo suena la alerta normal cuando se dispara.

Pensamiento: si no puedo conseguir que el PlaySound cambie, ¿podría codificar en un bucle que reproduzca una breve alerta regular cada 1 segundo durante 10 veces? - al menos eso haría mucho más para despertarme que un solo sonido de alerta regular.......

Gracias

 
person77:
Aquí está el código que he utilizado (sé muy poco acerca de la codificación para saber cómo hacer bucles):

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property ventana_gráfica_del_indicador

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true

extern bool alertsMessage = true

extern bool alertsNotification = false

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int entradas[];

bool alerted[];

string symbols[];

int tipos[];

int tiempos[];

int init() { return(0); }

int deinit() { return(0); }

int inicio()

{

//

//

// recoge los datos de las órdenes

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())) continue;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

si (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(tipos ,tamaño); tipos = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// comprueba si alguna orden necesita ser alertada por

//

//

for (i=ArraySize(entradas)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true;

switch (tipos)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break

case OP_BUYLIMIT : type = "límite de compra"; break

case OP_SELLSTOP : type = "stop de venta"; break

case OP_SELLLIMIT : type = "límite de venta"; break;

}

doAlert(type+" abierto en : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" para "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

cadena mensaje;

mensaje = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("alertas de pedido "+mensaje);

if (alertsSound) PlaySound("hallelujah.wav");

}

pero sólo suena la alerta normal cuando se dispara.

Pensamiento: si no puedo conseguir que el PlaySound cambie, ¿podría codificar en un bucle que reproduzca una breve alerta regular cada 1 segundo durante 10 veces? - al menos eso haría mucho más para despertarme que un solo sonido de alerta regular.......

Gracias

Persona77,

Lo que solía funcionar para eso es ir a un gráfico abierto, luego ir a herramientas/opciones/eventos y luego en la alerta simplemente cambiar el wav. al que usted quiere, pero no he hecho esto en un tiempo, así que no estoy seguro si esto todavía funciona, y asegúrese de que el archivo wav que está utilizando está en la carpeta de sonidos.

Archivos adjuntos:
alert.png  99 kb
 

mrtools - gracias: ¡ha funcionado muy bien!

Razón de la queja: