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

 
Potete dirmi come calcolare il deposito dei futures?
 
Roman.:

"Voglio farlo per non ottenere gli stessi dati in diverse funzioni f ". Non credo che sia ragionevole calcolare le stesse maschere in 2 o più funzioni. È più facile calcolarlo una volta e basta. Perché sprecare ulteriori risorse per questo?

Fate come dice la documentazione e non reinventate la ruota.

Cosa c'entra questo ciclo?

 for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }

Passare attraverso i passi da soli, cosa succede quando si esce e cosa si fa dopo? È un'assurdità.

Lo fai come nel tutorial - tutti i segnali commerciali in questa definizione di criteri commerciali - in serie (puoi avvolgerli in diverse funzioni e poi lavorare con loro quando controlli se questi criteri commerciali funzionano), poi le condizioni per il loro lavoro.

Per quanto riguarda il ciclo, è perché controllerò l'intersezione dei parametri dell'indicatore. Qui è tutto elementare. L'ho letto ed è scritto come penso.

Nel libro di testo su https://book.mql4.com/ru/build/conditions tutto è raggruppato. Ho MACD e stocastico in una funzione, non ne ho bisogno.

In effetti, tutti i valori dell'indicatore nel collegamento dovrebbero essere trasferiti alle funzioni appropriate. Perché no? Questo è logico.

 
TarasBY:
Quello che si racconta e quello che si "disegna" - DUE GRANDI DIFFERENZE!!! :))

Sono già un po' confuso. Ecco 3 funzioni, ognuna delle quali riceve un segnale specifico per un indicatore specifico.

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

Questa funzione riceve il segnale generale da tutti gli indici e prende la decisione di COMPRARE o VENDERE.

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

Questa è la funzione principale che riceve il segnale generale; qui otteniamo i valori degli indici attraverso il ciclo per passare attraverso tutte le barre, naturalmente... E poi i valori ottenuti sono passati per riferimento alle funzioni appropriate dove questi valori sono necessari, cioè alle funzioni:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal() , in linea di principio, può anche essere messo lì.

Così, tutti i calcoli degli indici saranno in una funzione principale di ottenere il segnale. Qui tutto è logico.

 

Immediatamente dopo l'attacco al grafico il programma avvia la funzione init(). La funzione init() dell'Advisor o dell'indicatore personalizzato allegato si avvia immediatamente dopo l' avvio del terminale client e il caricamento (riguarda solo gli advisor e non gli indicatori) dei dati storici, dopo un cambio di simbolo e/o periodo del grafico, dopo la ricompilazione del programma in MetaEditor, dopo un cambio dei parametri di input dalla finestra delle impostazioni dell'EA o dell'indicatore personalizzato. L'Expert Advisor viene anche inizializzato dopo un cambio di conto.

Può spiegare come funziona? Sullo sfondo, o questo può essere tracciato in qualche modo? O la funzione init nell'indicatore, quando avvio il terminale dopo un lungo periodo di inattività non si avvia affatto?

 
fore-x:

Immediatamente dopo l'attacco al grafico il programma avvia la funzione init(). La funzione init() dell'Advisor o dell'indicatore personalizzato allegato si avvia immediatamente dopo l' avvio del terminale client e il caricamento (riguarda solo gli advisor e non gli indicatori) dei dati storici, dopo un cambio di simbolo e/o periodo del grafico, dopo la ricompilazione del programma in MetaEditor, dopo un cambio dei parametri di input dalla finestra delle impostazioni dell'EA o dell'indicatore personalizzato. L'Expert Advisor viene anche inizializzato dopo un cambio di conto.

Può spiegare come funziona? Sullo sfondo, o questo può essere rintracciato in qualche modo? O la funzione init in indicatore all'inizio del terminale non si avvia dopo un lungo tempo di inattività?

La funzione init è destinata a memorizzare dati che non saranno cambiati durante l'intero funzionamento dell'EA. Questi possono essere alcuni dati che saranno calcolati solo una volta dopo che il programma è stato caricato e non sono necessari altri ricalcoli. Questo è il modo in cui lo capisco.

E se i valori delle variabili devono essere ricalcolati, per esempio, ad ogni arrivo di una nuova barra, allora non dovremmo dichiarare tali variabili nella funzione init, poiché non saranno ricalcolate lì.

Per renderlo più facile da capire, questo è ciò che può e deve essere dichiarato in init:

   Tick = MarketInfo(Symbol(), MODE_TICKSIZE);                         // минимальный тик    
   Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point);                 // текущий спрэд
   StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);  // текущий уровень стопов
   MinLot = MarketInfo(Symbol(), MODE_MINLOT);    // минимальный разрешенный объем сделки
   MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);   // максимальный разрешенный объем сделки
   LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);          // шаг приращения объема сделки

Si tratta di una raccolta di dati dal mercato e questi dati non vengono modificati. Anche se è una questione con la variabile Spread... se lo spread non è fisso, è meglio metterlo in funzioni separate.

 
hoz:

La funzione init è usata per memorizzare dati che non saranno alterati durante la vita dell'EA...

Stai rispondendo off-topic, ancora una volta - la funzione init()viene avviata dopo ilcaricamento deidati storici (questo vale solo per gli Expert Advisors, non per gli indicatori) - come lo capisci (voglio sentirlo)?


Prendere un pedone su un passaggio - so che esiste una tale regola, ma non so come applicarla (è più chiaro)?

 
Ho risposto sopra come ho capito. Non ho capito bene il suo punto di vista. Forse qualcun altro lo farà.
 

Buongiorno a tutti. per favore aiutatemi, ho una combinazione di candele e vorrei che lavorassero su diverse scale temporali. A titolo di esempio

se(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)

{

go_s=true;

}

Pensavo di poter legare la mia combinazione usando iHigh, iLow, iOpen, ecc. Ma quando viene testato su M5 mostra un risultato ma su altri timeframes un altro. Per favore aiutatemi a capire cosa sto facendo di sbagliato. Grazie!

 
hoz:

...

Il libro di testo https://book.mql4.com/ru/build/conditions è tutto impacchettato. Ha MACD e stocastico in una sola funzione, e non mi serve in quel modo.

E in effetti, tutti i valori dell'indicatore dal link dovrebbero essere passati alle funzioni appropriate. Perché no? Questo è logico.

Così, si scopre che tutti i calcoli degli indici saranno in una funzione f principale per ottenere il segnale. È tutto logico.

Scusa, ma sembra che tu sia ancora all'inizio della catena alimentare, che è esattamente dove "tutto è logico". :-)

Fallo come un LIBRO DI STUDIO e un DOCI, e poi avvolgilo in funzioni separate e ottieni un criterio di trading nel risultato.

Nel tutorial - tutto è registrato in una volta nella risultante, potete registrare le vostre f-i-zioni - separatamente, e il RISULTATO è disegnato come nel tutorial! Qui non c'è bisogno di alcun ciclo o trasferimento di valori di parametri per riferimento!

P.S. E in generale, prima di tutto, smontate i codici delle esposizioni - tutti nel tutorial e alcuni in kodobase - tutto va a posto.

 
fore-x:

Immediatamente dopo l'attacco al grafico il programma avvia la funzione init(). La funzione init() dell'Advisor o dell'indicatore personalizzato allegatosi avvia immediatamente dopo l' avvio del terminale client e ilcaricamento (riguarda solo gli advisor e non gli indicatori)dei dati storici, dopo un cambio di simbolo e/o periodo del grafico, dopo la ricompilazione del programma in MetaEditor, dopo un cambio dei parametri di input dalla finestra delle impostazioni dell'EA o dell'indicatore personalizzato. L'Expert Advisor viene anche inizializzato dopo un cambio di conto.

Può spiegare come funziona? Sullo sfondo, o questo può essere rintracciato in qualche modo? O la funzione init nell'indicatore, quando si avvia il terminale dopo un lungo periodo di inattività, non si avvia affatto?

Non sono sicuro di quello che vuoi. Nella tua descrizione di init() ci sono alcuni "punti" non proprio corretti evidenziati in rosso. Per esempio, l'avvio del terminale client è accompagnato dal caricamento dei dati storici ed è scorretto evidenziare la parola "caricamento" - non è il processo che avvia l'inizializzazione.

E non tutto nella vita può essere toccato: al massimo - da contemplare. :)))) Vuoi fissare il processo di inizializzazione, cioè avviare la funzione init() - stampa una linea di notifica all'interno di questa funzione.