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

 
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 la prendi sul serio o rinunci.

Per favore, spiega quali sono i suoi errori. In breve, in breve, a cosa dovreste prestare attenzione. E se il codice funziona, quali sono i suoi "bug"?

 
Ivan Butko #:

Per favore, spiega quali sono i suoi errori. Puoi riassumere brevemente a cosa prestare attenzione? E, se il codice funziona, quali sarebbero i suoi "bug"?

//+------------------------------------------------------------------+
//| Функция 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; // значит это чужой ордер, поэтому возвращаем значение ложь

Dalla documentazione... la casella di posta dovrebbe avere un biglietto, non un indice

bool  OrderSelect( 
   ulong   ticket      // тикет ордера 
   );

Se ci sono diversi ordini per diversi simboli e quello che stiamo cercando è il secondo nella lista, non lo troveremo. O c'è solo un magik, ma abbiamo bisogno di trovarlo con un altro simbolo, otterremo una risposta errata dalla funzione...

 
Alexey Viktorov #:

dalla documentazione... la casella di posta dovrebbe avere un biglietto, non un indice

Grazie Alexey per il suggerimento! Un'influenza molto negativa su di me per il fatto di stare davanti al computer di notte. Pensavo di aver iniziato ieri con il biglietto d'ordine e di aver già scritto una riga nel codice:

ulong  order_ticket=OrderGetTicket(i); // тикет ордера

e poi "si è spostato".

Alexey, questa variante di codice può essere accettabile?

//+------------------------------------------------------------------+
//| Функция 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(order_ticket==0)
         return false; // поэтому возвращаем значение ложь
      else // в противном случае
         return true; // возвращаем значение истина
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
  }

Non ho ancora toccato Magic perché il codice è inteso per un EA di un solo carattere.

Saluti, Vladimir.

 
MrBrooklin #:

Grazie, Alexei, per il suggerimento! Un'influenza molto negativa su di me per il fatto di stare seduto davanti al computer di notte. Pensavo di aver iniziato ieri con il biglietto d'ordine e di aver già scritto una riga nel codice:

e poi "si è spostato".

Alexey, questa variante di codice può essere accettabile?

Non ho ancora toccato Magic perché il codice è inteso per un EA di un solo carattere.

Sinceramente, Vladimir.

Questo approccio non è accettabile per me. Aggiungete un controllo per Magik e un simbolo, due righe di codice e otterrete in cambio un approccio normale alla risoluzione di un compito. E se si ignorano i miei principi, il codice non è del tutto corretto.

Questo è più logico.

//+------------------------------------------------------------------+
//| Функция  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(order_ticket > 0)
         return true; // поэтому возвращаем истину
     }
      return false; // если нет открытого отложенного ордера…
  }

E in questo codice, tutto quello che dovete fare è sostituire l'assegno in bianco

      if(order_ticket > 0)

per controllare un mago e un personaggio

      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == Magic_Number)

ed è già una funzione più universale...

 
Alexey Viktorov #:

dalla documentazione... la casella di posta dovrebbe avere un biglietto, non un indice

Se abbiamo diversi ordini per diversi simboli e quello che stiamo cercando è il secondo nella lista, non lo troveremo. Oppure c'è solo un magik, ma dobbiamo trovarlo con un altro simbolo, la risposta sarà di nuovo sbagliata...

Grazie

 
Alexey Viktorov #:

Questo approccio è inaccettabile per me. Aggiungete un mago e un controllo dei simboli, due righe di codice, e in cambio un approccio normale alla soluzione del problema. E se si ignorano i miei principi, il codice non è del tutto corretto.

Questo è più logico.

E in questo codice, tutto quello che dovete fare è sostituire l'assegno in bianco

per controllare un mago e un personaggio

ed è già una funzione più versatile...

Buongiorno a tutti e buon umore!

Un grande GRAZIE, Alexey, per il tuo approccio paziente e la chiara spiegazione dei miei errori.

Saluti, Vladimir.

 
Ivan Butko #:

Per favore, spiega quali sono i suoi errori. Puoi riassumere brevemente a cosa prestare attenzione? E, se il codice funziona, quali sono i suoi "errori"?

Gli errori stanno nel fraintendere le cose elementari.

Se non li vedi tu stesso, anche tu: impara, impara e impara!

 
Koldun Zloy #:

Errori nel non capire le cose elementari.

Se non li vedi tu stesso, anche tu: impara, impara e impara!

Stop. Questo è un thread con domande dei neofiti. Quindi o rispondete alle domande poste nel thread o passate oltre senza il vostro moralismo.

Per cosa ti sei mostrato? La gente vuole vedere risposte alle domande, non un bel viso in una foto.

 
Artyom Trishkin #:

Stop. Questo è un thread con le domande dei nuovi arrivati. Quindi o rispondete alle domande poste nel thread o passate oltre senza il vostro moralismo.

Per cosa ti sei mostrato? La gente vuole vedere le risposte alle domande, non il bell'uomo nella foto.

Volevo solo scoprire se la persona voleva imparare qualcosa, allora potevo aiutarla.

 
Koldun Zloy #:

Volevo solo scoprire se la persona voleva imparare qualcosa, allora potevo aiutarla.

Bene. Il modo stesso di scoprire ciò che si vuole sembrava strano: "non si può fare niente, bisogna imparare e imparare".

Ma, così sia...