Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1214

 
Igorz2006:
Grazie, farò una prova. La cronologia delle quotazioni per bitcoin e crypto deve essere importata per l'analisi

Cinque ha un formato di storia chiuso, non ho sentito parlare di importazione. è più facile aprire una demo dove tutti i caratteri richiesti sono disponibili.

 

Buona giornata!

Aprire due posizioni di acquisto e tre di vendita. Conta le posizioni aperte.

Non ci sono stati problemi con l'apertura delle posizioni, ma ci sono state difficoltà con il conteggio.

Si prega di aiutare uno studente principiante)

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:

Saluti Colleghi!

Si prega di comunicare quanto segue. La funzione OnTester calcola due parametri. C'è la possibilità che quando si ottimizza su un parametro, il secondo parametro venga semplicemente emesso nella tabella di ottimizzazione? E come fare, se sì? Grazie!

Colleghi, non c'è una risposta alla mia domanda?
 
Pineapple88:

Buona giornata!

Aprire due posizioni di acquisto e tre di vendita. Conta le posizioni aperte.

Non ci sono stati problemi con l'apertura delle posizioni, ma ci sono state difficoltà con il conteggio.

Si prega di aiutare uno studente principiante)

     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:

Grazie! Ci darò un'occhiata...

 
Pineapple88:

Grazie! Ci darò un'occhiata...

Leggi PositionGetTicket, PositionGetSymbol, PositionSelect. Soprattutto la nota.

 
Buon pomeriggio, ho bisogno di aiuto. Non riesco a capire perché
Per esempio:
doppio f=1,11215;
doppio g=1,17545;
doppio j=f-(f-g);
Stampa(j);
//Risultato: 1.17545

Perché non 1,1661?
Dove posso leggere qualcosa al riguardo?
 
Reznik Nikolai:
Buon pomeriggio, ho bisogno di aiuto. Non riesco a capire perché
Per esempio:
doppio f=1,11215;
doppio g=1,17545;
doppio j=f-(f-g);
Stampa(j);
//Risultato: 1.17545

Perché non 1,1661?
Dove posso leggere qualcosa al riguardo?

Dovete leggerlo nel vostro libro di testo di aritmetica della terza elementare.

 
Finalmente ho trovato mt4, lo rende molto più facile
 

Buona giornata a tutti!

Per favore, aiutatemi.

Il mio Expert Advisor apre una posizione all'intersezione di due carri. Sto cercando di chiudere una posizione con una opposta, ma viene visualizzato l'errore [Invalid request]. Penso che ci sia un errore nel riempimento dei parametri di richiesta?

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); 
           }


     }




  }