Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 31
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Alternativamente, dígame cómo escribir esta función de borrado en esta condición.
debe definir primero el ticket de la orden pendiente que se va a eliminar
si el ticket es nulo o indefinido - entonces no lo elimine
Esto es para diferentes órdenes. La función de eliminar uno por una condición, eliminar el otro sin una condición.
La pregunta es por qué en mi caso la función de borrado funciona correctamente sin una condición, pero si la pongo con una condición, genera un error cuando se produce la condición.
debe definir primero el ticketD y el ticketUP que se va a eliminar
Si el billete es nulo o indefinido, no se borra
Así se define, un ticketD, el otroticketUP .
¿O estoy confundiendo algo?
Así se define, un ticketD, el otroticketUP .
¿O estoy confundiendo algo?
¿Cómo se puede definir siticketUP ya está borrado?
Lo has borrado, actualiza ticketUP al estado que necesitas, en el que la condición de borrar el ticketUP no funcionará, y esta condición debe ser añadida al código también
¿Cómo se puede definir siel ticketUP ya ha sido eliminado?
Lo has borrado, actualiza ticketUP al estado que necesitas, en el cual la condición para borrar el ticket no funcionará, y esta condición también debe ser añadida al código.
Así, los pedidos conticketD, otroticketUP se crean primero (según la condición de ausencia), y después ya se borran.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizeDouble(minpr1-puntosl*Punto,5);
tpB=NormalizeDouble(minpr1+puntostp*Punto,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}
if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+puntosl*Punto,5);
tpS=NormalizeDouble(maxpr1-puntostp*Punto,5);
int ticketD=OrderSend(Symbol(), ¡OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}
OrderDelete(ticketUP);
Si estoy confundido, ¿qué?
Así, primero se crean los pedidos conticketD, otroticketUP(según la condición de ausencia), y luego se borran.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizarDoble(minpr1-puntosl*Punto,5);
tpB=NormalizarDoble(minpr1+puntotp*Punto,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}
if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizarDoble(maxpr1+puntosl*Punto,5);
tpS=NormalizarDoble(maxpr1+puntosl*Punto,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}
OrderDelete(ticketUP);
¿Si confundo qué?
De nuevo tienes una orden sin condición:
OrderDelete(ticketUP);
¿Por qué no has cambiado el código?
Tómate un tiempo para "pensar" al menos y ordenarlo + leer lo que has escrito, los consejos que te han dado.
Por cierto, aquí hay trabajo independiente , si no puedes...
Así que de nuevo tienes una orden sin una condición:
OrderDelete(ticketUP);
¿Por qué no has cambiado el código?
Tómate un tiempo para "pensar" al menos y resolverlo + leer lo que te han escrito, los consejos que te han dado.
Por cierto, aquí hay trabajo por cuenta propia si no funciona...
Sin condición, porque así es como se produce la eliminación, y con condición, no. Así que escribió para indicar que no puedo. Puedes escribirlo de esta manera:
OrderDelete(ticketD);
OrderDelete(ticketUP);
Entonces cada tick borra las órdenes ya creadas en cada tick (según la condición de ausencia). Y si lo escribimos con la condición
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Entonces, cuando se produce la condición, escribe un error de borrado.
¿Cómo escribo la eliminación de los pedidos especificados en esta condición?
Es sin condición, porque así es como funciona el borrado, pero con condición no. Lo escribí así para señalar lo que no puedo hacer. Si lo escribes de esta manera:
OrderDelete(ticketD);
OrderDelete(ticketUP);
Entonces cada tick borra las órdenes ya creadas en cada tick (según la condición de ausencia). Y si lo escribimos con la condición
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Entonces, cuando se produce la condición, escribe un error de borrado.
¿Cómo debemos escribir la condición al borrar los pedidos especificados?
No se puede eliminar la condición para borrar los pedidos.
ticketUP y ticketD deben escribirse en las variables globales al abrir un ticket
GlobalVariableSet("ticketUP",ticketUP);
GlobalVariableSet("ticketD",ticketD);
y leer desde allí antes de borrar un ticket pendiente
ticketUP=GlobalVariableGet("ticketUP")
ticketD=GlobalVariableGet("ticketD")
Por cierto, mira allí (en global) - lo que tienes, lo que billete está escrito
Creo que después de eso todo funcionará como debería
{
private:
template <typename T>
T _array[];
int _index;
int _err;
int _err_sys;
public:
CArray(){_index = -1; _err = 0; _err_sys = 0;}
~CArray(){}
// template <typename T>
T operator[](int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
T at(int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
void push_back(T value){
_array[++_index] = value;
}
};
parte del código del programa:
#property link "https://www.mql5.com"
#property version "1.1"
#property strict
#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
CArray *array;
int OnInit()
{
int b = 1;
array = new CArray();
array.push_back(b);
int a = array.at(0);
//---
return(INIT_SUCCEEDED);
}
...
Tras intentar ejecutar el Asesor Experto con datos reales, se produce el siguiente error: error interno #-1005
¿Qué hago mal? Gracias de antemano.