Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 744

 
Marat Sultanov:
C'è una sezione di codice che non ho capito. Dovete correggerlo voi stessi.


Puoi mostrarmi cosa esattamente....

 
Rafael Sahibgareev:


Puoi mostrarmi cosa esattamente....


Scarica il codice -Marat Sultano ha scritto lì ciò che non è chiaro.
 

Marat, grazie per il tuo aiuto con il codice ......

Un'altra domanda, per favore mostratemi come organizzare correttamente un ciclo per la seguente sezione di codice ......

//--- цикл расчета 
      
        {
        
         //--- если предыдущая свеча имеет параметры больше MSC
         if(IsLossCandle)
            if(ASSHighBuf[i-1]>=max_size_candel)
               BufferLossCanle[i]=low[i-1];
                 {
                  if(IsTopShadow)
                     if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1]) && IMaDifBuff[i]-IMaDifBuff[i-1]>0 || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]>0))
                        BufferTop[i]=low[i-1];
                  if(IsLowerShadow)
                     if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1]) && IMaDifBuff[i]-IMaDifBuff[i-1]<0 || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]<0))
                        BufferLower[i]=high[i-1];
                 }
        }


//--- return value of prev_calculated for next call 
   return(rates_total);
  }
 
Rafael Sahibgareev:

Marat, grazie per il tuo aiuto con il codice ......

Un'altra domanda, per favore mostratemi come organizzare correttamente un ciclo per il seguente frammento di codice ......

Funziona così:

//--- цикл расчета
   const int Limit = fmax(prev_calculated, 1);

   for(int i=Limit; i<rates_total; ++i)
   {
      //--- если предыдущая свеча имеет параметры больше MSC
      if(IsLossCandle)
      {
         if(ASSHighBuf[i-1]>=max_size_candel) BufferLossCanle[i]=low[i-1];

         if(IsTopShadow)
         {
            if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1] && IMaDifBuff[i]-IMaDifBuff[i-1]>0) || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]>0))
            {
               BufferTop[i]=low[i-1];
            }
         }

         if(IsLowerShadow)
         {
            if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1] && IMaDifBuff[i]-IMaDifBuff[i-1]<0) || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]<0))
            {
               BufferLower[i]=high[i-1];
            }
         }
      }
   }

//--- return value of prev_calculated for next call 
   return(rates_total);
}

Sono solo confuso da un frammento del tuo codice:

if(ASSHighBuf[i-1]>=max_size_candel)
   BufferLossCanle[i]=low[i-1];
     {

Perché la parentesi graffa dovrebbe stare lì? C'era un'intenzione che non avete attuato? (Sto alludendo all'operatore condizionaleelse)

 

Marat, grazie ancora una volta, ho scritto il mio ultimo codice a scuola 22 anni fa.

Ero seduto a spese di un altro operatore, dove metterlo come un interruttore dei prossimi quattro operatori.....

Penso di potermela cavare da solo ........

Marat, per favore consigliatemi o indicatemi il link se il calcolo può essere fatto senza usare il "loop" .....

 
Rafael Sahibgareev:

Marat, grazie ancora una volta, ho scritto il mio ultimo codice a scuola 22 anni fa.

Ero seduto a spese di un altro operatore, dove metterlo come un interruttore dei prossimi quattro operatori.....

Penso di potermela cavare da solo ........

Marat, per favore consigliatemi o indicatemi il link se questo calcolo può essere fatto senza usare un "loop" .....

Mi scusi, posso chiedere il suo scopo, quale risultato vuole ottenere dal pezzo di codice discusso? Una volta che avrò capito il tuo intento, sarà molto più facile per me aiutarti :)
 

Sul ciclo chiesto per curiosità...... È possibile......

È di per sé senza complicato, il primo operatore "if" se funziona vietato poi, non funzionano gli operatori di classificazione della direzione .......

Inoltre, in futuro, ho intenzione di cambiare il codice, per farlo spuntare con il lavoro su una barra zero,

in modo che questo stesso classificatore di divieto appaia sul tick quando lo spread va oltre....indicatore senza ulteriori filtri di clustering scalper....

Infatti, mi sembra di capire che tutti i modelli vivono in ticks......

 

Hai bisogno di un ciclo per passare attraverso le sbarre. Se hai bisogno di letture solo per le ultime 1 o 2 barre, puoi fare a meno del loop, ma se hai bisogno di analizzare una dozzina o più di barre, è meglio usare il loop, giusto?

Se vi rifiutate di usare i cicli vi condannerete a un codice cinese :)

 

Raphael, ti consiglio di leggere in questo ordine:

  1. Dichiarazione condizionale if-else
  2. Operatore per
  3. Operatore del ciclo While
  4. Continua operatore continua
  5. continuare operatore pausa

E se vieni risucchiato, allora vai più a fondo:

  1. Operatori
  2. Basi della lingua
Li ho divisi per frequenza d'uso nella pratica. Niente di complicato, solo abbastanza per capire il succo del discorso.


 

Grazie per i consigli e le raccomandazioni, oggi è troppo tardi e domani studierò la guida e gli articoli....

Ero interessato solo alle ultime tre barre, compresa l'opzione[0].....

Più tardi avrò probabilmente bisogno di altri 15-20 ...... Non posso fare a meno dei cicli .....

Grazie ancora sinceramente per il vostro aiuto e supporto.....