Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1214

 
Igorz2006:
Gracias, lo probaré. Es necesario importar el historial de cotizaciones de bitcoin y criptomonedas para su análisis

Cinco tiene un formato de historia cerrado, no he oído hablar de la importación. es más fácil abrir una demo donde todos los caracteres necesarios están disponibles.

 

¡Buenos días!

Abra dos posiciones de compra y tres de venta. Cuente las posiciones abiertas.

No hubo problemas con la apertura de posiciones, pero sí con el recuento.

Por favor, ayude a un estudiante novato)

input int PositionSell = 
5;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  int buy_count  = 0;
  int sell_count = 0;

//---объявление и инициализация запроса и резкльтата
   MqlTradeResult  result_sell  = {0};
   MqlTradeRequest request_sell = {0};

   request_sell.action = TRADE_ACTION_DEAL;
   request_sell.symbol = Symbol();
   request_sell.volume = 0.1;
   request_sell.type   = ORDER_TYPE_SELL;

   MqlTradeResult  result_bay  = {0};
   MqlTradeRequest request_bay = {0};

   request_bay.action = TRADE_ACTION_DEAL;
   request_bay.symbol = Symbol();
   request_bay.volume = 0.1;
   request_bay.type   = ORDER_TYPE_BUY;



   if(PositionsTotal() < PositionSell)
     {
      OrderSend(request_sell,result_sell);
      OrderSend(request_sell,result_sell);
      OrderSend(request_sell,result_sell);

      OrderSend(request_bay,result_bay);
      OrderSend(request_bay,result_bay);
     } else return;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(_Symbol))
     {
      switch(PositionGetInteger(POSITION_TYPE)) //Здесь выдает  ошибку implicit conversion from 'number' to 'string'
           {
            case POSITION_TYPE_BUY:  buy_count++;  break; 
            case POSITION_TYPE_SELL: sell_count++; break;
           }

        }
     }
     Print("Ордеров на покупку: " + buy_count + ", Ордеров на продажу: " + sell_count);
  }
 
Mihail Marchukajtes:

¡Saludos Colegas!

Por favor, avise de lo siguiente. La función OnTester calcula dos parámetros. ¿Existe la posibilidad de que cuando se optimiza un parámetro, el segundo parámetro simplemente salga en la tabla de optimización? ¿Y cómo hacer esto si es así? Gracias.

Colegas, ¿no hay respuesta a mi pregunta?
 
Pineapple88:

¡Buenos días!

Abra dos posiciones de compra y tres de venta. Cuente las posiciones abiertas.

No hubo problemas con la apertura de posiciones, pero sí con el recuento.

Por favor, ayude a un estudiante novato)

     for(int i=0; i<PositionsTotal(); i++)
     {
          if( PositionGetTicket(i) == 0 )                        continue;
          if( PositionGetString(POSITION_SYMBOL) != _Symbol )    continue;
          switch( (int)PositionGetInteger(POSITION_TYPE) )
           {
               case POSITION_TYPE_BUY:  buy_count++;  break; 
               case POSITION_TYPE_SELL: sell_count++; break;
           }
     }
 
Konstantin Nikitin:

Gracias. Lo investigaré...

 
Pineapple88:

Gracias. Lo investigaré...

Leer PositionGetTicket, PositionGetSymbol, PositionSelect. Especialmente la nota.

 
¡Buenas tardes! Necesito ayuda. No puedo entender por qué
Por ejemplo:
doble f=1,11215;
doble g=1,17545;
doble j=f-(f-g);
//Resultado: 1.17545

¿Por qué no 1,1661?
¿Dónde puedo leer sobre ello?
 
Reznik Nikolai:
¡Buenas tardes! Necesito ayuda. No puedo entender por qué
Por ejemplo:
doble f=1,11215;
doble g=1,17545;
doble j=f-(f-g);
Imprimir(j);
//Resultado: 1.17545

¿Por qué no 1,1661?
¿Dónde puedo leer sobre ello?

DEBE leerlo en su libro de texto de aritmética de tercer grado de primaria.

 
Finalmente encontré mt4, lo hace mucho más fácil
 

¡Buenos días a todos!

Por favor, ayuda.

Mi Asesor Experto abre una posición en la intersección de dos vagones. Estoy intentando cerrar una posición con otra opuesta, pero aparece el error [Solicitud no válida]. ¿Creo que hay un error en el llenado de los parámetros de la solicitud?

void OnTick()
  {

   MqlTradeResult  result_bay  = {0};
   MqlTradeRequest request_bay = {0};

   request_bay.action = TRADE_ACTION_DEAL;
   request_bay.symbol = Symbol();
   request_bay.volume = 0.1;
   request_bay.type   = ORDER_TYPE_BUY;

   MqlTradeResult  result_sell  = {0};
   MqlTradeRequest request_sell = {0};

   request_sell.action = TRADE_ACTION_DEAL;
   request_sell.symbol = Symbol();
   request_sell.volume = 0.1;
   request_sell.type   = ORDER_TYPE_CLOSE_BY;

   double MovingAverage1[], MovingAverage2[]; //задаем два массиса для МА

   int MovingAverageIndic1 = iMA(_Symbol,0,20,0,MODE_EMA,PRICE_CLOSE);
   int MovingAverageIndic2 = iMA(_Symbol,0,200,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(MovingAverage1,true);
   ArraySetAsSeries(MovingAverage2,true);

   CopyBuffer(MovingAverageIndic1,0,0,3,MovingAverage1);
   CopyBuffer(MovingAverageIndic2,0,0,3,MovingAverage2);

   if(
      (MovingAverage1[0]>MovingAverage2[0]) &&
      (MovingAverage1[1]<MovingAverage2[1])
   )
     {

      if(PositionsTotal()==0)
         OrderSend(request_bay,result_bay);
     }

   if(
      (MovingAverage1[0]<MovingAverage2[0]) &&
      (MovingAverage1[1]>MovingAverage2[1])
   )

     {
      if(
         (MovingAverage1[0]<MovingAverage2[0]) &&
         (MovingAverage1[1]>MovingAverage2[1])
      )
        {
         if(PositionsTotal()==1)
         
         OrderSend(request_sell,result_sell); 
           }


     }




  }

Razón de la queja: