MetaQuotes Language 4 (MQL4)

Foro genérico sobre programas relacionados con el trading: gráficos, ejecución de órdenes, automatización, etc.
Responder
Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

MetaQuotes Language 4 (MQL4)

Mensaje por nstrader »

Abro este Nuevo tema para tratar sobre el lenguaje de programación de MetaQuotes

http://www.mql4.com/
Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

Mensaje por nstrader »

Una de las carencias del lenguaje MQL4 es que en la funcion de modificar ordenes no se puede modificar el valor comment ni el valor magic, a alguien se le ocurre alguna idea para identificar grupos de ordenes? ya tengo una idea,pero a alguien se le ocurre algo?
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Mensaje por YsEkU »

A mi me paso lo mismo al intentar abrir expertos en varios graficos.

Usa un Magic diferente dependiendo del simbolo o del periodo(o ambas cosas).
y a partir de ahi pues buscas por tipo de operacion o precio o lo que quieras.
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Mensaje por YsEkU »

Te dejo el script, pa que veas como va,

//+------------------------------------------------------------------+
//| Magic.mq4 |
//| Copyright © 2007, YsEkU |
//| https://www.x-trader.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int magic;
int l=StringLen(Symbol());
for (int i=0;i<l;i++)
{
magic=magic+StringGetChar(Symbol(),i);
}
Print(magic);
//----
return(0);
}
//+------------------------------------------------------------------+
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Mensaje por YsEkU »

Este script, suma el valor de cada caractér del simbolo, que creo que es unico para cada par, aunque tendria que comprobarse.
Puedes añadirle si quieres el valor de periodo para separarlo mas, o un nombre que pongas a cada experto o lo que quieras.
Última edición por YsEkU el 28 Mar 2007 19:46, editado 1 vez en total.

Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

Mensaje por nstrader »

No me vale gracias, lo que has hecho es poner un magic diferente por orden, y lo que busco es poner ordenes en un grupo y cuando quiera cambiar alguna orden a otro grupo diferente, osea un grupo seria magic=11111 y otro seria magic=22222 lo que quiero es cambiar una orden de 11111 a 22222, como no se puede modificar el magic, no lo puedo hacer (estoy hablando en un mismo gráfico y un mismo periodo)
Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

Mensaje por nstrader »

La unica forma de hacerlo es modificando lo que se puede modificar, en este caso será el StopLoss, como el sistema que estoy programando no utiliza StopLoss sino que utiliza una contraorden para limitar pérdidas, le asigno un StopLoss diferente y alejado que no pueda nunca llegar (almenos a corto plazo) por grupo, y cuando necesite cambiarlo de grupo modifico el StopLoss, luego la función buscará el SL para determinar en que grupo está.

PD. Modificar la expiration no me vale porque en ordenes abiertas no existe.
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Mensaje por YsEkU »

Umm... no me acabo de aclarar... jejeje
No es mas facil hacer los grupos con los tickets de las ordenes, sin modificar nada... Y Luego aplicar cambios a los grupos de tickets?

Cuando mandas la función Ordersend(con sus parametros) esta te devuelve un valor unico para cada orden enviada, o el valor -1 si falla la orden, este valor lo puedes recoger usando la funcion ordersend del siguiente modo:
int ticket=Ordersend(Parametros);
De esta forma cada orden tiene un numero especifico y unico, que se recoge en la variable ticket, recogiendo los tickets en diferentes variables como tic1,tic2,tic3 o en un array... es decir, un ticket por cada orden lanzada recoges todas y puedes hacer grupos con ellas bastante facilmente.

Saludos y espero que te sirva. :D
Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

Mensaje por nstrader »

No, al contrario es mas dificil, pero seria la 2ª opción despues de la mia,jeje
lo que digo yo es lo mismo pero más fácil porque solo tienes que poner un stoploss diferente por orden, solo con que se diferencie de un pip ya es otro grupo y luego solo hay que cambiar el SL para cambiar de grupo, de la forma que dices tu habrá que hacer varias cosas:

1-crear un archivo (o varios) externo para guardar las matrices
2-Una funcion que escriba, modifique y borre los tickets en las matrices
3-Una funcion que chequee continuamente en cada tick si cada una de las órdenes de cada matriz está en el mercado (o se ha cerrado por TakeProfit) en consecuencia modificar la matriz

Esto supone muchos bucles y puede ralentizar el programa junto con la cantidad de funciones que tengo que programar para el sistema en el que estoy trabajando(sobre todo se notaria en los test)

De la otra forma solo con seleccionar todas las ordenes sabré en que grupo están.

Es una forma de trabajar con lo que hay porque a los desarrolladores del lenguaje no se han dado cuenta que sería interesante poder modificar un comentario de una orden por ejemplo.

Gracias por la idea.
Avatar de Usuario
nstrader
Mensajes: 257
Registrado: 24 Mar 2007 19:33

Mensaje por nstrader »

Aparte de todo eso, todos los datos los debo sacar del mercado (del broker), no de un archivo en un ordenador, porque el sistema se debe de poder ejecutar en varios ordenadores a la vez conectados a un mismo broker a modo de redundancia sin relación entre ellos (esto ni siquiera lo tenia previsto telefonica con melilla, jajajaj, mira que solo poner un cable, y si se jode que? jajajajaa)
cyberpasta
Mensajes: 3
Registrado: 21 Abr 2007 04:54

Mensaje por cyberpasta »

Hola. Tengo un archivo mq4 y me gustaria añadirle alertas sonoras. Se que se puede hacer pero no tengo ni idea de como, alguien me ayuda?
Avatar de Usuario
ledzep
Mensajes: 410
Registrado: 25 Sep 2006 03:19
Ubicación: Colombia

sonido

Mensaje por ledzep »

instrucción:

PlaySound("archivo.wav");

el archivo debe estar en el folder "sounds", eso es todo.

s2.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Software”