[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 301

 
laveosa:

Ho fatto tutto esattamente allo stesso modo e più di una volta, ma c'è ancora quel buco.
Allora cercate Cheburashka nella vostra dimora! Sicuramente le sue buffonate! ;)
 
laveosa, mantenere la storia fino a ieri eurusdm1 scaricare tramite importazione in virgolette.
File:
eurusd1.zip  548 kb
 
Ho provato a controllare un indicatore, ho messo i numeri sul grafico ma non cambiano, provo a metterlo in un altro modo, ho bisogno dell'indicatore allegato per fissare il prezzo come una croce che sta su uno zigzag o un allarme o una stampa ma si blocca sulla connessione.
File:
 

Una domanda per gli esperti!

Ho spesso dei maghi nei miei EA. Per non "sporcare" il codice con momenti ripetitivi, come:

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

Queste ripetizioni possono essere in ordine. Volevo liberarmene scrivendo funzioni separate.

Ecco l'inizio:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

Possiamo andare oltre, dichiarando globalmente variabili per le salviette, per esempio fastMA e slowMA, e restituirle per riferimento tramite la funzione :

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

Si otterrebbe qualcosa del genere:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

La domanda è questa:

Ho sentito o letto da qualche parte che lo switch operator è lento, non influenzerà le prestazioni di EA in generale in questo caso? In generale, quanto è lento?

Qui escono molti parametri, non rallenterà un Expert Advisor?

Sto scrivendo e pensando alla produttività, quindi la domanda sorge, come io non sono un programmatore di formazione, per capire me stesso, non è davvero esce ...

 

Victor, la chiamata di funzione è molto più un freno che un interruttore. Potete controllare voi stessi la velocità. Scrivere un codice di test con un ciclo. Dove controllerete il vostro codice. Misurare il tempo all'ingresso. Poi confrontalo con il tempo di uscita.

L'operatore di commutazione è uno degli operatori più veloci. È più veloce che correre attraverso le condizioni.

L'interruttore dovrebbe essere usato con un default sulle eccezioni. In modo che in caso di una condizione errata si sappia perché il codice non funziona.

 

Hmm. Immagino che non si possa usare una costante per il caso come variabile, secondo la documentazione. Dice un qualche tipo di costante di destinazione, costante di carattere o espressione di carattere.

Funziona solo se si imposta una lettera di tipo stringa, cioè 1 carattere (se più di 1 carattere, il compilatore impreca) o un numero.

Nient'altro.
Dice alcune costanti di destinazione, espressioni di carattere e costanti di carattere.

 

Dove posso leggere sull'uso delle variabili globali del terminale con esempi pratici? In particolare, voglio fare in modo che ogni Expert Advisor scambi solo la sua quota di deposito e che il suo profitto/slippage non influisca sul MM degli altri Expert Advisor.

 
Ekburg:

Ciao a tutti

Potete consigliarmi quale può essere la causa dell'errore "shutdown by timeout", quando si esegue l'Expert Advisor nel terminale e come risolvere questo problema?

 
[quote=Roman.]Cambia la cucina.[/quote]Questo è il fatto, non sembra avere nulla a che fare con la cucina: l'ordine di vendita è nel log dell'EA. naturalmente, si può supporre che il broker abbia cambiato il codice del distributore MT4 scaricato e corregga la direzione dell'affare, ma sarebbe troppo impudente, credo.
 
Posso allegare i codici del programma invece di copiare tutto il codice qui? Dove stanno guardando gli amministratori?
Motivazione: