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

 
Anatoliy Markov #:

Grazie per la vostra partecipazione. La dichiarazione di missione è chiara per me. Sono bloccato con l'implementazione...

Provato con i commenti. Fino al secondo gruppo numera correttamente. Al terzo restituisce uno per il commento, anche se il primo gruppo è ancora sul mercato. L'idea non è quella di moltiplicare i numeri, ma di prendere quelli lasciati liberi. Spero di essermi spiegato chiaramente).

Non è molto chiaro, ma usa comunque il pulsante per inserire il codice


o premere ALT+s

 
void OnTick()
{
  //---
    
    for(int a=1; a<10; a++)
     {
       comment="";
       for(int i=0; i<OrdersTotal(); i++)
         {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
             if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {    
                  if (OrderComment()==IntegerToString(a)) continue; 
                  else
                  {
                   comment=IntegerToString(a);
                   break;                  
                  } 
               }
            } 
         } 
        if(comment!="") break; 
     }
    if (CountOfBuy(magic)<1 && CountOfSell(magic)<1) comment="1";
  //---
}
Да, так более информативно. Т.е. этот незамысловатый модуль должен давать коммент для 
последующего присвоения ордеру. Когда открыта группа с комментом 1, он дает коммент 2 (это правильно). 
Когда открыта 2-я группа, опять дает 1. Не могу понять.
 

Buona sera a tutti!

Ho scritto una funzione che determina se un ordine pendente è già impostato, ma la funzione non funziona per qualche motivo. Puoi per favore dirci dov'è l'errore? Sinceramente, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике уже установлен отложенный    |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции с типом данных bool, чтобы хранить          |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return false; // поэтому возвращаем ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чья-то чужая позиция, поэтому возвращаем ложь
  }
 
MrBrooklin un ordine pendente è già impostato, ma la funzione non funziona per qualche motivo. Puoi per favore dirci dov'è l'errore? Sinceramente, Vladimir.

HO TROVATO L'ERRORE DA SOLO!!!

Ecco un codice normalmente funzionante. Può essere utile per qualcuno. Saluti, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
 

Per favore, consigliatemi come organizzare o da che parte guardare:

Qui, per non eseguire il calcolo delle barre, sono stati inventati i buffer. Ad ogni nuovo tick viene controllata solo l'ultima barra (come ho capito). Quando appare una nuova barra, il calcolo inizierà solo con questa barra.

Grazie al buffer, le linee non vengono ridisegnate su tutta la storia, ma viene aggiunto un segmento supplementare all'ultimo bordo. Ci sono 8 buffer in totale.

Cosa succede se ho bisogno di fare un calcolo cento volte (diciamo 100 volte per disegnare una linea, cambiando solo una variabile), e poi disegnare il miglior risultato. E ad un nuovo tick o timer fare la stessa cosa, ma con la "storia" esistente dei risultati (disegni). Dove e come memorizzo queste informazioni, in modo da non dover ricalcolare l'intera cronologia?

O, più semplicemente, come aumentare il numero di buffer nell'indicatore? Forse scriverli separatamente in un file? Cosa è meglio
 
Ivan Butko #:

Per favore, consigliatemi come organizzare o da che parte guardare:

Qui, per non eseguire il calcolo delle barre, sono stati inventati i buffer. Ad ogni nuovo tick viene controllata solo l'ultima barra (come ho capito). Quando appare una nuova barra, il calcolo inizierà solo con questa barra.

Grazie al buffer, le linee non vengono ridisegnate su tutta la storia, ma viene aggiunto un segmento supplementare all'ultimo bordo. Ci sono 8 buffer in totale.

Cosa succede se ho bisogno di fare un calcolo cento volte (diciamo 100 volte per disegnare una linea, cambiando solo una variabile), e poi disegnare il miglior risultato. E ad un nuovo tick o timer fare la stessa cosa, ma con la "storia" esistente dei risultati (disegni). Dove e come memorizzo queste informazioni, in modo da non dover eseguire questi calcoli su tutta la storia?

O, per dirla più semplicemente, come posso aumentare il numero di buffer in un indicatore? Forse scrivere separatamente in un file? Qual è il modo migliore per

Gli indicatori hanno 512 buffer.

 
Artyom Trishkin #:

Ci sono 512 buffer negli indicatori.

Oh, wow. Grazie. Devo aver cercato nel posto sbagliato. Continuerò a provare.

 
MrBrooklin #:

ERRORE TROVATO DA ME!!!

Ecco un codice normalmente funzionante. Può essere utile per qualcuno. Saluti, Vladimir.

Non sarà utile a nessuno. Ci sono errori grossolani nel vostro codice. E non ha senso correggerli.

Non si preoccupa nemmeno di imparare le basi della lingua e prova a scrivere qualcosa.

O la prendi sul serio o rinunci.

 
Koldun Zloy #:

Nessuno può usarlo. Ci sono errori grossolani nel vostro codice. E non ha senso correggerli.

Non ti prendi nemmeno la briga di imparare le basi della lingua, e stai cercando di scrivere qualcosa.

O fai sul serio o rinunci.

Buongiorno, sì, ha assolutamente ragione. Dobbiamo rinunciare a questa inutile faccenda di andare al

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione su algoritmi e codici

e aspettare l'aiuto qui.

Saluti, Vladimir.

 
MrBrooklin #:
Buongiorno, sì, ha assolutamente ragione. Dovete abbandonare questo affare inutile, che è quello di fare domanda al

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione su algoritmi e codici

e aspettare qui l'aiuto.

Sinceramente, Vladimir.

Hai ragione, lascia perdere.

Non hai nemmeno capito quello che ho scritto in russo.

Perché vuoi entrare nella programmazione?

Motivazione: