Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1621

 
Alexey Viktorov #:

Valery, presta attenzione alla linea

nel mio codice... Ho usato le funzioni esagonali per un po', ma una funzione simile

ha dato uno 0 stantio.

Quindi, pensate a dove sono gli scarafaggi... E dato che mt4 si rifiuta di supportarlo, si può supporre che non verrà mai sistemato...

Tutto il resto deve essere controllato. Non me ne occupo più da così tanto tempo che non voglio nemmeno ricordare.

Hmmm... Il tempo è emulato) dovrò entrarci)

int sd;
/*******************Expert initialization function*******************/
int OnInit()
 {
  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  datetime lt = iTime(_Symbol, PERIOD_M15, 0);
  static datetime ct = 0;
  if(ct != lt)
  {
   ct = lt;
   Print(DoubleToString(iMA("EURJPY", PERIOD_M15, 21, 0, MODE_SMA, PRICE_CLOSE, 0), sd),
    " Time[0] ",TimeToStr( Time[0])," iTime(EURJPY,0,0) ",TimeToStr(iTime("EURJPY",0,0)));
  }

Risultato

2021.09.21 15:30:48.696 2021.08.13 20:15:00  testMulti EURUSD,M15: 129.482 Time[0] 2021.08.13 20:15 iTime(EURJPY,0,0) 2021.08.13 20:15
2021.09.21 15:30:48.632 2021.08.13 20:00:00  testMulti EURUSD,M15: 129.495 Time[0] 2021.08.13 20:00 iTime(EURJPY,0,0) 2021.08.13 20:00
2021.09.21 15:30:48.568 2021.08.13 19:45:00  testMulti EURUSD,M15: 129.512 Time[0] 2021.08.13 19:45 iTime(EURJPY,0,0) 2021.08.13 19:45
2021.09.21 15:30:48.504 2021.08.13 19:30:00  testMulti EURUSD,M15: 129.527 Time[0] 2021.08.13 19:30 iTime(EURJPY,0,0) 2021.08.13 19:30
2021.09.21 15:30:48.440 2021.08.13 19:15:00  testMulti EURUSD,M15: 129.539 Time[0] 2021.08.13 19:15 iTime(EURJPY,0,0) 2021.08.13 19:15

ZZY lavora per ottenere i dati delle barre da altri personaggi)))) Ma la storia deve essere caricata specificamente, andando fuori dall'array solo così su uno strumento scarico o richiedendo dati da una barra lontana.

ZS ZS

Funziona davvero!!! Ho dovuto caricare gli archivi delle quotazioni di tutte le coppie di valute necessarie e funziona su un minuto da giugno del 21, sulle partenze più vecchie e successive)

 
giros #:

Potete suggerirmi dove posso imparare MQL5 (in russo)?

Qui. Non ho letto altro.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Salve. Cerco di trovare il prezzo di apertura del penultimo ordine, ma funziona bene se non ci sono ordini di vendita, Potete dirmi qual è l'errore? Credo che conti anche loro. MQL4

 
makssub #:


Salve. Cerco di trovare il prezzo di apertura del penultimo ordine, ma funziona bene se non ci sono ordini di vendita, Potete dirmi qual è l'errore? Credo che conti anche loro. MQL4

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
Valeriy Yastremskiy #:


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Grazie. Ricontrollato, conta ancora Sell too(

 
makssub #:


Grazie. Ricontrollato, conta ancora Sell too(

Probabilmente perché stai sottraendo dal numero totale di ordini

OrdersTotal()- 2 

e guardare solo in

OP_BUY
 
makssub #:


Grazie. Ricontrollato, conta ancora Sell too(

Stampe prima del secondo se e dentro il secondo se il numero, il biglietto e il tipo di ordine.

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print("Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print("Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

Ci sono due costruttori. Quando chiamo il primo dal secondo e imposto i valori per le variabili di cui sopra, quando ritorno da esso al secondo queste variabili vanno a NULL.
Ma se semplicemente copio il codice dal primo costruttore al secondo e non lo chiamo, tutto funziona. Qual è il problema?

CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL;
   nextWave = NULL;
   name = namePref+"_"+TimeToString(startTime, TIME_DATE|TIME_MINUTES);
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this.prevWave = prevWave;
   prevWave.nextWave = &this;
  }
 
Roman Sharanov NULL.
Ma se semplicemente copio il codice dal primo costruttore al secondo e non lo chiamo, tutto funziona. Qual è il problema?


Il problema è in MQL.

In queste situazioni, metto l'inizializzazione in un metodo separato che tiro da diversi costruttori.

---

C'è anche un problema con la chiamata del costruttore padre.

 
Valeriy Yastremskiy #:

Stampa prima del secondo se e dentro il secondo se il numero, il biglietto e il tipo di ordine.

Grazie. Lo controllerò più tardi in giornata.