Publi |
Publi |
He colocado el siguiente código para ahcer una prueba:
He colocado manual el nro ID, y dentro de esta le he colocado que dijera el numero de ordenes abiertas. Sin embargo, cuando abrí una orden desde otra ventana, y aunque no había sido abierta desde la ventana del ID nro 1307......., lanzó mensaje de que el total de ordenes era de 1 (cuando no se había abierto ninguna desde la ventana donde estaba ese EA asociado). Esto significa que si asocio el EA a varias ventanas y coloco el ChartID() como condicional, igual sumara el numero totales de ordenes que haya en cualquier ventana y no solo donde el EA este asociado, por lo que pienso que hace falta algo mas.Código:if(ChartID()==130759124995518815) { Alert("Chart1=", OrdersTotal()); }
Mencionaste antes que lo habías probado y te había funcionado. Sería muy útil para mi saber si lo que te funcionó fue colocar un EA donde al utilizar ChartID, consideró lo que dijeras en el codigo solo en la ventana en que estaba asociado el EA, y no lo que hacias en otras ventanas. Porque si ha sido esto lo que hiciste entonces puedo pensar que se trata, no del código, sino de algún problema del MT4 que tengo descargado y enfocarme en esto entonces.
Saludos y gracias por todo lo anterior.
Gracias de nuevo.Foro de Forex Trading United
Así fue como lo puse, pero me parece que tengo problemas colocando en nro de ID. Como ChartID() ya lo que dice es el ID, lo que he puesto es esto:
Pero no me ha funcionado. Luego, como valor 0 en ChartID significa Chart actual, probé con:Código:if (ChartID()== ChartID())
Pero tampoco me funcionó al probarlo.Código:if (ChartID()== 0)
Entonces, que debo colocar después del == para decir
if(ChartID()== chartactual)Foro de Forex Trading United
hola pues la forma mas segura que se me ocurre es que cada vez que abras una operacion la metas en una variable, sumandole +1 en cada operacion nueva que abra y cada vez que cierres la operacion reste uno, asi tendras un contador de operaciones individual para cada codigo , lo que no se es si podras entrar en la info de esa variable desde otra ventana cuestion de que lo pruebes. De esta forma no te haria falta ni el char id, pero claro la cuestion es si se podra acceder a la otra variable desde la otra ventana, eso ya no lo se.A mi me funcionó cuando lo hice así como tu lo ha hecho. El problema me está ocurriendo cuando lo pongo a trabajar con varias ventanas, que es como correrá en la realidad. Ya tengo una fuerte sospecha de lo que está pasando.
El código que puse fue este:
Código:if(ChartID()==130759124995518815) { if(OrdersTotal()==0) { int ticket1=OrderSend(NULL, OP_BUY, Lote, Ask, 10, Bid-SL, Bid+TP, NULL, 12345, TimeStop, clrNONE); Alert("ErrorOpen=", GetLastError()); } }
Lo que hice ahora fue hacer 3 códigos como este pero cada uno con el nro ID de cada gráfica, y asocié cada código a una ventana según corresponda su número de ID. Me pasó que abrió operación solamente en una grafica, así no hubiera ninguna abierta desde otra ventana, por lo que creo que lo que está haciendo el código es eso:
Primero revisa si se cumple la primera condicion:
if(ChartID()==130759124995518815)
Si esta se cumple, entonces revisa la segunda:
if(OrdersTotal()==0)
cuenta cuantas operaciones hay abiertas en "total" a ver si se cumple condición de que no haya ninguna abierta, pero contabiliza "todas" las órdenes que hayan abiertas, así se hayan abierto en otra ventana. Es decir: revisa primera condición, y si esta se cumple, revisa si orderstotal es igual a "0", independientemente desde que ventana se haya abierto.
Por las pruebas que he hecho creo que eso es lo que está haciendo. Y entonces, ¿cómo hago para que cuente solamente las órdenes abiertas en esa ventana?
saludos y suerteForo de Forex Trading United
hola asi te podria servir :
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
Siguiente bloque ();
}
}
Hola tivag. Gracias por responder. Solo para confirmar: en este código lo que se está diciendo es que, si no hay ninguna operación en el symbolo en que está puesto el EA, entonces... (y lo que se ponga que haga). Correcto?
Es decir, si coloco este indicador en una ventana del EURUSD, y también en el USDCADy en el GBPUSD, el EA colocado en eurusd si no hay ninguna operacion abierta en este par, hara lo que se le diga, independientemente de si hay o no abiertas en los otros (USDCAD y GBPUSD). Esto es correcto?Foro de Forex Trading United
hola pues el codigo que puse fue este:
fue para probarlo y me abre operacion tan solo en esa ventana, eso fue la prueba que hice.Código:if (ChartID()==130655549890892400.00000) if (OrdersTotal()==0) { int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE); }
saludos
A mi me funcionó cuando lo hice así como tu lo ha hecho. El problema me está ocurriendo cuando lo pongo a trabajar con varias ventanas, que es como correrá en la realidad. Ya tengo una fuerte sospecha de lo que está pasando.
El código que puse fue este:
Código:if(ChartID()==130759124995518815) { if(OrdersTotal()==0) { int ticket1=OrderSend(NULL, OP_BUY, Lote, Ask, 10, Bid-SL, Bid+TP, NULL, 12345, TimeStop, clrNONE); Alert("ErrorOpen=", GetLastError()); } }
Lo que hice ahora fue hacer 3 códigos como este pero cada uno con el nro ID de cada gráfica, y asocié cada código a una ventana según corresponda su número de ID. Me pasó que abrió operación solamente en una grafica, así no hubiera ninguna abierta desde otra ventana, por lo que creo que lo que está haciendo el código es eso:
Primero revisa si se cumple la primera condicion:
if(ChartID()==130759124995518815)
Si esta se cumple, entonces revisa la segunda:
if(OrdersTotal()==0)
cuenta cuantas operaciones hay abiertas en "total" a ver si se cumple condición de que no haya ninguna abierta, pero contabiliza "todas" las órdenes que hayan abiertas, así se hayan abierto en otra ventana. Es decir: revisa primera condición, y si esta se cumple, revisa si orderstotal es igual a "0", independientemente desde que ventana se haya abierto.
Por las pruebas que he hecho creo que eso es lo que está haciendo. Y entonces, ¿cómo hago para que cuente solamente las órdenes abiertas en esa ventana?Foro de Forex Trading United
hola pues el codigo que puse fue este:He colocado el siguiente código para ahcer una prueba:
He colocado manual el nro ID, y dentro de esta le he colocado que dijera el numero de ordenes abiertas. Sin embargo, cuando abrí una orden desde otra ventana, y aunque no había sido abierta desde la ventana del ID nro 1307......., lanzó mensaje de que el total de ordenes era de 1 (cuando no se había abierto ninguna desde la ventana donde estaba ese EA asociado). Esto significa que si asocio el EA a varias ventanas y coloco el ChartID() como condicional, igual sumara el numero totales de ordenes que haya en cualquier ventana y no solo donde el EA este asociado, por lo que pienso que hace falta algo mas.Código:if(ChartID()==130759124995518815) { Alert("Chart1=", OrdersTotal()); }
Mencionaste antes que lo habías probado y te había funcionado. Sería muy útil para mi saber si lo que te funcionó fue colocar un EA donde al utilizar ChartID, consideró lo que dijeras en el codigo solo en la ventana en que estaba asociado el EA, y no lo que hacias en otras ventanas. Porque si ha sido esto lo que hiciste entonces puedo pensar que se trata, no del código, sino de algún problema del MT4 que tengo descargado y enfocarme en esto entonces.
Saludos y gracias por todo lo anterior.
Gracias de nuevo.
fue para probarlo y me abre operacion tan solo en esa ventana, eso fue la prueba que hice.Código:if (ChartID()==130655549890892400.00000) if (OrdersTotal()==0) { int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE); }
saludosForo de Forex Trading United
hola sin problemas te lo vuelvo a copiar con el codeNo tivag, no dice ningún error. Simplemente no abre operaciones. El código que publicaste por acá, no ta que fue sin utilizar el botón de etiquetar código. Estoy pensando que haya colocado las llaves de una manera diferente a como tu las estas colocando. ¿Es así como tu las estás colocando? ¿Podrías copiar y pegar y isando la función del foro "envolver con etiqueta CODE el código" para verlo tal cual lo estás colocando tu en tu MT4?
Mira, esto es lo que yo estoy colocando, tal cual:
Código:bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { exists = true; } else { Alert("OrderSelect() error - ", GetLastError()); } } if (exists == false) { int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE); } }
Los códigos que colocaste, esta parte que dice:
¿Aquí seleccionará todas las operaciones que estubieran abiertas, sean cuantas sean, y revisará si el número mágico de la orden coresponde con el que pregunto (que en este caso 1)?Código:bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
Muchas gracias tivag por toda tu ayuda. Muy agradecido. Espero que pueda funcionarme ahora. Sigo buscando a ver por qué no me funciono aunque a ti te funcionó... ?? Ahí dejé el código tal cual lo estoy colocando por si encuentras algo difrente a como tu lo estás colocando pues si te funcionó a ti debería estarme funcionando a mi también... ??
Gracias de nuevo.
en el caso de por ejemplo si existe la orden de numero magico 1 que haga lo que quieras :
en el caso deCódigo:{ bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists) { lo que quieras; } }
que si no existe la orden de numero magico 1 que haga lo que tu quieras:
Código:{ bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { lo que quieras(); } }
Y en el primer caso que te puse:
Efectivamente hay en lo que has puesto te pillara las ordenes buy de ese simbolo con numero magico 1, en este caso.Código:{ bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { Siguiente bloque (); } }
Lo que puedes hacer para descartar cosas es por ejemplo si dudas que sea el codigo este pues haces un ea simple solo con ese codigo por ejemplo si no existe la buy nº magico 1 que compre y lo ejecutas y si no te funciona ya sabes que algo del codigo estas fallando, que se ejecuta entonces ya te toca ir mirando en el resto del ea que parte es la que falla , puede que sea un calculo , una condicion ...etc yo a veces cuando no doy donde puesde estar el error , les pongo que me pinte un arrow para saber en que parte si llega y en que parte no llega y asi voy descartando que parte del codigo puede ser, algo basto si pero efectivo cuando estas mareado jajaja.
saludos y a ver si esta vez te sale bienForo de Forex Trading United
No se si te has explicado bien.
Quieres que el expert vertifique primero si no hay operacion abierta en ese par primero?
O solo quieres que envie la orden?
Si es lo segundo solo debes de agregar despues de las condiciones establecidas para la apertura de operacion el comando Ordersend()
Saludos.Foro de Forex Trading United
No tivag, no dice ningún error. Simplemente no abre operaciones. El código que publicaste por acá, no ta que fue sin utilizar el botón de etiquetar código. Estoy pensando que haya colocado las llaves de una manera diferente a como tu las estas colocando. ¿Es así como tu las estás colocando? ¿Podrías copiar y pegar y isando la función del foro "envolver con etiqueta CODE el código" para verlo tal cual lo estás colocando tu en tu MT4?
Mira, esto es lo que yo estoy colocando, tal cual:
Código:bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) { exists = true; } else { Alert("OrderSelect() error - ", GetLastError()); } } if (exists == false) { int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE); } }
Los códigos que colocaste, esta parte que dice:
¿Aquí seleccionará todas las operaciones que estubieran abiertas, sean cuantas sean, y revisará si el número mágico de la orden coresponde con el que pregunto (que en este caso 1)?Código:bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
Muchas gracias tivag por toda tu ayuda. Muy agradecido. Espero que pueda funcionarme ahora. Sigo buscando a ver por qué no me funciono aunque a ti te funcionó... ?? Ahí dejé el código tal cual lo estoy colocando por si encuentras algo difrente a como tu lo estás colocando pues si te funcionó a ti debería estarme funcionando a mi también... ??
Gracias de nuevo.Foro de Forex Trading United
Última edición por trader0; 18:12 a las
Aviso Legal Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal |