Nunca he probado esto, pero no creo que sea válido. . .
OrderType()==(OP_BUYSTOP||OP_SELLSTOP) && // The order selected is either a pending buy on stop order or a buy on sell orderOrderMagicNumber()==(Mnumber1||Mnumber1)) // The orders magic number is the same as the magic number used in this ea
Creo que hay que hacer esto. . .
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber2)) // The orders magic number is the same as the magic number used in this ea
la razón por la que pienso esto es . . . ¿a qué equivale esto? (OP_BUYSTOP||OP_SELLSTOP) Podría funcionar si las variables fueran bool. . . pero no creo que pueda funcionar con int.
Una cosa menor, no necesitas el OderSelect antes del OrderDelete. En general, sólo necesitas OrderSelect cuando utilizas una función Order que no utiliza ticket int. Por ejemplo, OrderComment( ),OrderCommission( ), etc
Ok gracias Raptor, acabo de actualizar el código en mi post. Acabo de recordar que ustedes mencionaron que no era bueno usar barras para un contador, así que lo cambié para usar el tiempo de la barra. Voy a arreglar la lógica y ver si funciona.
Ok he reparado la lógica. Pero todavía no borra las órdenes.
Como mencioné antes cambié el contador de barras a tiempo...
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED
bartraded = TimeHour(TimeCurrent());
if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
dazamate: Ok gracias Raptor, acabo de actualizar el código en mi post. Acabo de recordar que ustedes mencionaron que no era bueno usar barras para un contador, así que lo cambié para usar la hora de la barra. Voy a arreglar la lógica y ver si funciona.
"Bares no es confiable (una vez que alcanzas el máximo de barras en el gráfico no cambiará y el código se rompe.) Volumen[0]==1 no es confiable, si pierdes un tick el código se rompe. Siempre use el tiempo".
es cierto, pero hay que ver el contexto de cuando se hizo este comentario. . . Los bares no son fiables. . .
intBars
Number of bars in the current chart
pero eso no significa que no puedas usar números de barra en lugar de número de horas. Por ejemplo, ¿cómo se las arreglará su código el viernes por la noche y el domingo? ¿el límite pendiente equivale a 4 horas o a 4 barras?
¿Qué pasa si se coloca una operación a las 22:00? ¿22 + 4 = 26?
if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
De acuerdo, veo el problema con la estrategia de tiempo. Pero si usamos barras como contador una vez que el gráfico llega a las barras máximas también fallará ahí, ¿no?
Voy a volver a ello y ver lo que puedo llegar a ...
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED*
bartraded = 0;
if (Time0 == Time[0]) return; Time0 = Time[0]; // make sure each bar is only scanned once
{
//-----------------------------------------------------------------------------------------------------------------------------------------------//TRADE COUNTER
bartraded++; // Each time a new bar opens add 1 to the counter//------------------------------------------------------------------------------------------------------------------------------------------------// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 'pendinglimit'if(bartraded > pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
De acuerdo, veo el problema con la estrategia de tiempo. Pero si usamos barras como contador una vez que el gráfico alcanza el máximo de barras también fallará ahí, ¿no?
No, la barra H1 actual es siempre la barra 0... en 60 minutos la barra H1 actual será la barra 0...el problema de las barras es si usas Bars , es decir, el número total de barras en tu gráfico, o si estás mirando las barras del extremo izquierdo de tu gráfico.
El número de barra para TimeHour(TimeCurrent () es 0, puede obtener el número de barra para el momento en que su operación fue colocada (¡necesita calcularlo, no almacenarlo!) usando iBarShift y luego hacer algo como esto...
if (iBarShift(symbol, TF, Time_order_Placed)+1 > pendinglimit) && Tradeopen()==true)
Bien, a la tercera va la vencida, me costó un poco entender lo que querías decir. Esto es lo que he hecho. Pero los pedidos siguen sin borrarse >:(
staticdatetime tradeopened;
//Everytime a trade is opened I run
tradeopened = TimeCurrent();
if((iBarShift(hothand(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
Nunca he probado esto, pero no creo que sea válido. . .
Creo que hay que hacer esto. . .
la razón por la que pienso esto es . . . ¿a qué equivale esto? (OP_BUYSTOP||OP_SELLSTOP) Podría funcionar si las variables fueran bool. . . pero no creo que pueda funcionar con int.
Una cosa menor, no necesitas el OderSelect antes del OrderDelete. En general, sólo necesitas OrderSelect cuando utilizas una función Order que no utiliza ticket int. Por ejemplo, OrderComment( ), OrderCommission( ), etc
Ok he reparado la lógica. Pero todavía no borra las órdenes.
Como mencioné antes cambié el contador de barras a tiempo...
Ok gracias Raptor, acabo de actualizar el código en mi post. Acabo de recordar que ustedes mencionaron que no era bueno usar barras para un contador, así que lo cambié para usar la hora de la barra. Voy a arreglar la lógica y ver si funciona.
es cierto, pero hay que ver el contexto de cuando se hizo este comentario. . . Los bares no son fiables. . .
pero eso no significa que no puedas usar números de barra en lugar de número de horas. Por ejemplo, ¿cómo se las arreglará su código el viernes por la noche y el domingo? ¿el límite pendiente equivale a 4 horas o a 4 barras?
¿Qué pasa si se coloca una operación a las 22:00? ¿22 + 4 = 26?
De acuerdo, veo el problema con la estrategia de tiempo. Pero si usamos barras como contador una vez que el gráfico llega a las barras máximas también fallará ahí, ¿no?
Voy a volver a ello y ver lo que puedo llegar a ...
Bien, ¿qué tal este enfoque?
De acuerdo, veo el problema con la estrategia de tiempo. Pero si usamos barras como contador una vez que el gráfico alcanza el máximo de barras también fallará ahí, ¿no?
No, la barra H1 actual es siempre la barra 0... en 60 minutos la barra H1 actual será la barra 0...el problema de las barras es si usas Bars , es decir, el número total de barras en tu gráfico, o si estás mirando las barras del extremo izquierdo de tu gráfico.
El número de barra para TimeHour(TimeCurrent () es 0, puede obtener el número de barra para el momento en que su operación fue colocada (¡necesita calcularlo, no almacenarlo!) usando iBarShift y luego hacer algo como esto...
Bien, a la tercera va la vencida, me costó un poco entender lo que querías decir. Esto es lo que he hecho. Pero los pedidos siguen sin borrarse >:(
tradeopened = TimeCurrent()no me da la hora de apertura de la barra ¿tendría que usar Time[0]?Prueba esto ;-)