Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 424

 
novichok2018:

Sí, gracias, he leído la página. Sólo mis conocimientos en MKL4 me bastaron para notar que en mi bucle las posiciones van de cero a la última, mientras que en el ejemplo a la inversa, de la última a cero.Todavía no sé dónde insertarla pausa. Cuando cambié el bucle a la inversa, las posiciones dejaron de cerrarse del todo.

Cuando se cierran posiciones, el bucle debe invertirse para evitar que se salten posiciones. El operador break no es necesario en este bucle - es la ruptura del bucle y la salida de su cuerpo. Lo que necesitas es continuar - la transición a la siguiente iteración del bucle.

Y sólo tú sabes por qué no se cierra y qué has hecho por él.

 
Artyom Trishkin:

Al cerrar las posiciones, el bucle debe invertirse para que no se salte ninguna posición. No es necesario el operador break en este bucle - es una interrupción y salida del cuerpo del bucle. Lo que necesitas es continuar - la transición a la siguiente iteración del bucle.

Sólo tú sabes por qué no se puede cerrar y qué has hecho para solucionarlo.


He seguido las instrucciones al pie de la letra. Aquí está el código corregido:

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

Ahora cierra ambas posiciones pero no cierra una sino que espera la segunda. Es una locura. Pensé que tal vez había insertado la funciónClosePoz() en un lugar equivocado. El resultado es cero. Estoy pidiendo ayuda a gritos. No puede ser que nadie sea capaz de resolver el problema.

 

¿cómo cobrar la cuenta original (100 dólares)?

 
novichok2018:

Hizo exactamente lo que se le indicó. Aquí está el código corregido:

Ahora cierra ambas posiciones, pero no cierra una, sino que espera la otra. Esto es una locura. Pensé que tal vez había insertado la funciónClosePoz() en un lugar equivocado. El resultado es cero. Estoy pidiendo ayuda a gritos. No puede ser que nadie sea capaz de resolver el problema.

No lo sé. Lo dibujé en mi rodilla. Por supuesto, no puedo comprobarlo: tus condiciones no son suficientes, así que depende de ti.

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
Y WPR dentro de la función para comprobar - es de alguna manera no es normal. WPR debe ser una de las condiciones de la llamada de la función de cierre
 
No es posible modificar el número de lotes de una orden pendiente.
 
igrok333:
Entiendo que no se puede modificar el número de lotes de una orden pendiente.

Sólo abra uno adicional, con el volumen que necesite.

 
Alekseu Fedotov:

Sólo abre uno adicional con el volumen que desea

Puede ser más fácil borrar uno existente y crear uno nuevo. Al fin y al cabo, el volumen requerido no tiene por qué ser mayor que el ya colocado. Y es más fácil seguir un orden.

 

Buenos días tengo una duda, voy a explicar como lo entiendo

¿Existe un algoritmo escrito para los Asesores Expertos que compran velas en la parte inferior y venden velas en la parte superior?

¿Cómo puedo adaptarlo a un EA?
 
iisvlg:¿Existe un algoritmo escrito para EAs que ponga una vela de compra en la parte inferior y una vela de venta en la parte superior y cómo adaptarlo a un EA?

¡¡¡Eso sería genial!!!

 
iisvlg:

Buenos días tengo una duda, voy a explicar como lo entiendo

¿Existe un algoritmo escrito para los Asesores Expertos que compran velas en la parte inferior y venden velas en la parte superior?

¿Y cómo se adapta a un EA?

Ponga el Límite de Compra en la parte baja, y el Límite de Venta en la parte alta.

Sobre los algoritmos, cavar la base

Razón de la queja: