[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 525

 
Lo siento. ¿Te imaginas que el último apéndice no está registrado?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

En concreto, la líneaAlert ("OrderTicket( )",OrderTicket( )); ¡¡¡que podría significar que el último ciclo no se ha completado!!!

Aquí está el registro. Antes, a menudo reescribía el código, a menudo me encontraba con errores, creo que 4108 y 4050, ¡ahora no hay ningún error! Sí, bueno, ¡no está funcionando, de todos modos!

 

Sí, bueno, supongo que ahí es donde se pone difícil.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Así es, s... ¿Qué hice mal en la línea?


 
Por Dios, no sé, una condición como condición.
 
Dimka-novitsek:

Sí, bueno, supongo que ahí es donde se pone difícil.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Así es, s... ¿Qué hice mal en la línea?


|| se ejecuta primero, luego &&
 
ilunga:
sólo que a estas alturas podría ser una orden pendiente remota y el resultado sería inusual ;)

No entiendo, no es borrado que estoy seleccionando aquí, no historias de la moda. Vale, no hace falta, eso es más tarde.
 

-¡AAAH!! ¡¡Así que voy a poner entre paréntesis ambos lados!! ¡¡¡¡¡GRACIAS!!!!!

¡¡¡Uf!!!

Vale, voy a ducharme. Hace calor.

 
Dimka-novitsek:

No lo entiendo, no voy a cullir los borrados, no los historiales de moda. Vale, no hace falta, eso es más tarde.

Supongamos que tenemos 1 orden pendiente de eliminar y hemos llegado a la línea (para facilitar la lectura, la he desglosado por operador)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

Entonces, tenemos este orden:

1) lo eliminamos, y al hacerlo

a) tenemos suerte y se borra

b) puede que no se borre porque el precio está demasiado cerca/el servidor está sobrecargado/el Internet está caído/etc. Pero seguimos adelante de todos modos.

2) si algo va mal, lo anotamos

3) cerrar la orden (¡¡¡pendiente!!! que hemos borrado en el primer punto!!!)

resultado... No puedo predecir al 100%, pero parece que es otro error

4) mostrar un mensaje al respecto

 
Dimka-novitsek:

Sí, bueno, ahí está el problema.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Es tan correcto se... ¿Qué he estropeado en la línea?

Digámoslo así... Para que no disparen a nadie y no te den órdenes... :))

Empecemos por orden. Primero, encontraremos la última posición cerrada y nos aseguraremos de que esté cerrada en la toma:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Esto:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

Esta será su tarea... :)

 
¡¡¡¡¡¡GRACIAS!!!!!!
 
¡¡¡¡Escritura fría!!!!