[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 544

 
silhouette:

Per favore, aiutatemi a capire il problema di trovare correttamente la divergenza sugli oscillatori. In questo caso, che sia MACD. Ho abbozzato il seguente algoritmo:

1) Conta le barre dall'inizio e cerca i picchi sull'oscillatore:

2) Creare delle matrici contenenti i tempi di picco:

e inserirvi il valore di MACD[i] se la condizione è soddisfatta. L'ultimo nuovo picco deve avere l'indice [n] e il penultimo [n+1];

3) Consideriamo un'altra soluzione nella situazione (1):

In realtà, il problema del punto 2: come organizzare un tale array come in una serie temporale in modo che i valori fossero spostati ad ogni nuovo picco?


Per favore, aiutatemi!
 
paladin80:

Ho deciso di curiosare un po' nel tuo codice...


Vi sono molto grato per aver analizzato il mio codice. Grazie per aver trovato il tempo di farlo.

Sto appena iniziando a imparare la programmazione, quindi questi commenti sono molto importanti e saranno utili in futuro.

Ora veniamo al punto:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {   if(OrderSymbol() != Symb) continue;
          if(OrderMagicNumber() != 777) continue;
          return;
      }
   }
}

In realtà, la ricerca completa degli ordini viene eseguita in questo modulo, e l'ulteriore analisi viene eseguita utilizzando gli ordini aperti (tutto è chiaro qui)

Symb=  Symbol();
...
Min_Lot= MarketInfo(Symbol(),MODE_MINLOT);
...
Steep=   MarketInfo(Symbol(),MODE_LOTSTEP);

Anche questa parte del codice è cambiata, ma i partecipanti al forum scrivono che l'ambiente di mercato non è sempre disponibile per la funzione init().

Alcune variabili potrebbero non essere definite o ho sbagliato qualcosa?

Non capisco la logica di questo post - (sto spiegando la mia visione di questo operatore)

while(true)
...

Ho un blocco di gestione degli errori.

if (Fun_Error(GetLastError())==1)      // Обработка ошибок
continue;                              // Повторная попытка

Se l'errore è corretto, proviamo di nuovo a verificare le condizioni e ad aprire l'ordine.

E l'operatore while funziona quando il suo valore è vero, cioè risulta che non accetta il falso.

Grazie ragazzi per il vostro aiuto.

 
silhouette:

Per favore, aiutatemi!


Leggi qui:https://www.mql5.com/ru/articles/1357 È semplice e diretto

 
r772ra:


Leggi qui:https://www.mql5.com/ru/articles/1357 È semplice e diretto

Grazie!
 
Buon giorno si prega di aiutare, non riesco a regolare il mio Expert Advisor (apertura e chiusura degli ordini non funzionano come previsto (attraversando stocastico ogni volta), aperto a stocastico molto raramente e non riesco a capire perché ((((), anche tutti gli ordini sono chiusi solo a stoploss o takeprofit (numero di biglietto di errore, anche non può capire dove l'errore). grazie per eventuali risposte:
 
Vinin:
Basta non dimenticare che l'ambiente di mercato non è sempre disponibile in init()
Francamente parlando, ero molto incuriosito da questa notizia. Ho provato a immaginare in quali condizioni l'ambiente di mercato potrebbe non essere disponibile: forse un errore di connessione al momento dell'abilitazione dell'EA o se si esegue l'EA di sabato o domenica. Non ho notato questi problemi con il mio. Da un lato, dicono che è possibile fare un loop in init() per trovare un valore, ma ho imparato che init() è limitato nel tempo. Forse all'inizio di start() all'apparizione di una nuova barra (almeno a M1) per trovare valori dall'ambiente di mercato, è meglio che su ogni tick.
 
Pacman:


Vi sono molto grato per aver analizzato il mio codice. Grazie per aver trovato il tempo di farlo.

...

E l'istruzione while funziona quando il suo valore è vero, cioè risulta che non prende false.

In while si dovrebbe mettere una condizione che può prendere almeno due valori, per esempio, flag (vero o falso). Se il codice deve contenere una costante (true) invece di una condizione, while è inutile. Togliete while (true) e le parentesi e otterrete lo stesso risultato.
 
Domanda per gli intenditori. Nell'aiuto di OrderSend(), lo slippage è 3. È per le quotazioni a 4 cifre, per esempio? Per le citazioni a 5 cifre possiamo lasciarne 3 o abbiamo bisogno di 30?
 
paladin80:
Domanda per i consulenti esperti. L'OrderSend() al posto dello slippage è 3. È per esempio per le quotazioni a 4 cifre? Per le citazioni a 5 cifre posso lasciare 3 o ho bisogno di 30?

Per quelli a 5 cifre ne servono 30.

Inserisco una tale costruzione in init() di ogni EA, poi non fa differenza per 4 o 5 cifre DT, lo consiglio:

  if (Digits==3 || Digits==5){myPoint=Point*10; slpg=slpg*10;}
  else myPoint=Point; 
 
chi sa se la velocità del test può essere aumentata?
Motivazione: