Lo uso para obtener un ticket para una orden SELL_STOP
He cambiado el código a
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(bln_find_order) // true -> you should look for a order
{
staticlong counter=0;
Print("Attempt number ",counter);
ResetLastError();
if(HistoryOrderSelect(ul_find_order))
{
long type_order=HistoryOrderGetInteger(ul_find_order,ORDER_TYPE);
if(type_order==ORDER_TYPE_SELL_STOP)
{
Print("The pending order ",ul_find_order," is found! Type of order is ",
EnumToString((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ul_find_order,ORDER_TYPE)));
bln_find_order=false; // true -> you should look for a order
counter=0;
return;
}
else
{
Print("The order ",ul_find_order," is not pending");
bln_find_order=false; // true -> you should look for a orderreturn;
}
}
else
{
Print("Order ",ul_find_order," is not find, error#",GetLastError());
}
counter++;
}
}
Todo va bien hasta un determinado momento. Hasta que aparezca otro tipo de orden en el historial.
Por ejemplo, SELL_LIMIT.
En cuanto aparece SELL_LIMIT en el historial, no puedo obtener una entrada del último SELL_STOP.
El Asesor Experto arroja un error.
La orden 9 no está pendiente
Aunque hay SELL_STOP en el historial
¿Por qué tengo que conseguir el pedido nº 9 si necesito el billete nº 7?
Parece que el Asesor Experto busca la orden necesaria no en todo el historial, sino sólo en el último
Cuando StopLoss_=0, se dispara la condición superior: un intento de modificar el TakeProfit. El error es que se resta del PRECIO ABIERTO - en este caso el nivel de TakeProfit puede ser mayor que el PRECIO ACTUAL y esto es un error.
En su caso, reste del PRECIO CORRECTO (m_position.PriceCurrent).
Se abrió una posición de venta y se activó el selllimit, necesito mover el tp en relación al nuevo precio de la posición, no en relación al precio actual.
¿Qué tipo de comprobación debo hacer para no intentar modificar a un precio no válido?
Podría estar inaceptablemente cerca del precio actual. ¿Cómo se comprueba esto?
No tengo acceso a una bolsa, así que hazlo tú mismo o trabaja con instrumentos de Forex. Lo siento.
Añadido: introducir otra comprobación - para una posición de venta el nuevo TakeProfit (valor calculado) no debe ser MAYOR o IGUAL que el actual TakeProfit de la posición.
No tengo acceso a una bolsa, así que hazlo tú mismo o trabaja con instrumentos de Forex. Lo siento.
Añadido: introducir otra comprobación - para una posición de venta el nuevo TakeProfit (valor calculado) no debe ser MAYOR o IGUAL que el actual TakeProfit de la posición.
Vladimir Karputov:...introduzca otra comprobación - para una posición de Venta el nuevo TakeProfit (valor calculado) no debe ser ALTO o IGUAL al TakeProfit actual de la posición.
No encaja, modificar por ATR ¿Qué otras comprobaciones se pueden hacer para este error? Todo es posible. En mt4 haySTOPLEVEL, pero aquí ¿qué?
Existe un Asesor Experto que permite determinar cuándo se ha activado una orden pendiente
https://www.mql5.com/ru/code/17610
Lo uso para obtener un ticket para una orden SELL_STOP
He cambiado el código a
Todo va bien hasta un determinado momento. Hasta que aparezca otro tipo de orden en el historial.
Por ejemplo, SELL_LIMIT.
En cuanto aparece SELL_LIMIT en el historial, no puedo obtener una entrada del último SELL_STOP.
El Asesor Experto arroja un error.
La orden 9 no está pendiente
Aunque hay SELL_STOP en el historial
¿Por qué tengo que conseguir el pedido nº 9 si necesito el billete nº 7?
Hola. Me da error siStopLoss_=0
falló modificar #2 vender 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [paradas inválidas]
Hola. Me da error siStopLoss_=0
falló modificar #2 vender 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [paradas inválidas]
Lógica incorrecta al escribir el programa.
Cuando StopLoss_=0, se dispara la condición superior: un intento de modificar el TakeProfit. El error es que se resta del PRECIO ABIERTO - en este caso el nivel de TakeProfit puede ser mayor que el PRECIO ACTUAL y esto es un error.
En su caso, reste del PRECIO CORRECTO (m_position.PriceCurrent).
Se abrió una posición de venta y se activó el selllimit, necesito mover el tp relativo al precio de la nueva posición, no al precio actual.
¿Qué tipo de comprobación debo hacer para evitar que se intente modificar a un precio no válido?
Se abrió una posición de venta y se activó el selllimit, necesito mover el tp en relación al nuevo precio de la posición, no en relación al precio actual.
¿Qué tipo de comprobación debo hacer para no intentar modificar a un precio no válido?
Compruébalo:
if(m_position.PriceOpen()-ExtTakeProfit<m_position.PriceCurrent() { m_trade.PositionModify(m_position.Ticket(), m_position.StopLoss(), m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit) ); ...Compruébalo:
Gracias, pero el error persiste.
Podría estar inaceptablemente cerca del precio actual. ¿Cómo puedo comprobarlo?
Gracias, pero el error persiste.
Podría estar inaceptablemente cerca del precio actual. ¿Cómo se comprueba esto?
No tengo acceso a una bolsa, así que hazlo tú mismo o trabaja con instrumentos de Forex. Lo siento.
Añadido: introducir otra comprobación - para una posición de venta el nuevo TakeProfit (valor calculado) no debe ser MAYOR o IGUAL que el actual TakeProfit de la posición.
No tengo acceso a una bolsa, así que hazlo tú mismo o trabaja con instrumentos de Forex. Lo siento.
Añadido: introducir otra comprobación - para una posición de venta el nuevo TakeProfit (valor calculado) no debe ser MAYOR o IGUAL que el actual TakeProfit de la posición.
Probablemente el precio de apertura (POSITON_PRICE_OPEN) ?
Probablemente el precio de apertura (POSITON_PRICE_OPEN) ?
Esta opción estaba por encima. Ver los mensajes anteriores. Has contestado en medio de la conversación.
No encaja, modificar por ATR ¿Qué otras comprobaciones se pueden hacer para este error? Todo es posible. En mt4 haySTOPLEVEL, pero aquí ¿qué?