Questions des débutants MQL5 MT5 MetaTrader 5 - page 1238

 
Alexey Viktorov:

Et la première partie de la ligne et la question dans son ensemble ?

Eh bien, nous sommes des programmeurs. Des verres pleins et vides sur la table de chevet et tout ça...

Cependant, j'ai écrit trois scénarios possibles et ce qui se passe pendant ces scénarios dans le cycle de calcul de l'indicateur principal :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

FAQ des débutants MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates est un algorithme très efficace.

  • S'il est égal à zéro, cela signifie un calcul sur la barre actuelle par le tick.
  • S'il est égal à 1, cela signifie qu'il y a une nouvelle barre et deux barres seront calculées - la précédente et l'actuelle.
  • S'il est supérieur à 1, cela signifie qu'il s'agit de la première exécution ou d'un changement dans les données historiques.
Nous calculons la limite. Et dans la boucle de la limite à plus grand ou égal à zéro, nous calculons les données de l'indicateur. Et calculez ce qu'est la limite en calculant la limite = rates_total - prev_calculates.

La quatrième situation - en dessous de zéro - est tout à fait possible. Mais elle n'est pas traitée dans la boucle calculée pour(int i=limit ; i>=0 ; i--) ...

Peu de gens veulent y réfléchir et se contentent généralement de copier-coller. En conséquence, le premier lancement et le changement d'historique se font lorsque la limite>1, donc nous devrions écrire sur le premier lancement dans une telle situation et ne pas vérifier prev_calculé pour zéro.

 
Сергей Таболин:

Alexei, je suis intéressé )))) Mais je ne vois pas l'erreur ! Et il n'y a pas de honte à apprendre. Et si quelqu'un est plus intelligent ou plus expérimenté, je n'y vois rien de mal non plus.

Je viens d'exécuter l'indicateur avec un grand paramètre d'entrée pour la taille d'une bougie. Je veux avoir des chandeliers plus petits.

Tous les prix des chandeliers sont calculés et initialisés à partir des tampons de l'indicateur. Tout est correct. Mais il n'y a pas eu de rendu. Je ne comprends pas pourquoi.

Je vous ai suggéré

Alexey Viktorov:

......... commence par sélectionner les barres après un nombre N, ou au moins une dernière clôture. L'avez-vous essayé ? Est-ce que ça rend ?

Et encore une fois, je vous suggère de commencer par sélectionner au moins une dernière barre fermée. Lorsque vous obtenez un résultat positif, ne procédez qu'ensuite aux calculs et aux conditions.

 
Alexey Viktorov:

Je vous ai suggéré

et je vous suggère de commencer par repérer au moins un dernier bar fermé. Lorsque vous obtenez un résultat positif, passez seulement ensuite aux calculs et aux conditions.

J'ai peur de ne pas vous comprendre... Quelle barre proposez-vous d'allouer ? Celui que j'ai formé ? Ou sur la carte ?

Si c'est sur la carte, je n'en ai pas besoin a priori. L'indicateur est considéré comme identique sur n'importe quelle période de temps.

Le calcul précédent était effectué sur H1, et maintenant il est sur H4. Le résultat est le même.

2020.08.08 11:06:14.580 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 11:06:14.789 newCandles (USDJPY,H4)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 11:06:15.230 newCandles (USDJPY,H4)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 11:06:19.056 newCandles (USDJPY,H4)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 11:06:20.788 newCandles (USDJPY,H4)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 11:06:22.592 newCandles (USDJPY,H4)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 11:06:22.725 newCandles (USDJPY,H4)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 11:06:22.822 newCandles (USDJPY,H4)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 11:06:23.736 newCandles (USDJPY,H4)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 11:06:27.124 newCandles (USDJPY,H4)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 11:06:27.296 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора закончен.
 
Сергей Таболин:

J'ai peur de ne pas vous comprendre... Quelle barre proposez-vous de mettre en avant ? Celle qui s'est formée sur moi ? Ou sur la carte ?

Si c'est sur la carte, je n'en ai pas besoin a priori. L'indicateur est considéré comme identique sur n'importe quelle période de temps.

Le calcul précédent était effectué sur H1, et maintenant il est sur H4. Le résultat est le même.

Alexey vous a dit que vous deviez d'abord faire en sorte que votre indicateur tire des bougies. Tels qu'ils sont. Au moins sur le bar actuel. Si vous y parvenez, considérez que le premier pas vers la compréhension est franchi. Mais il est souhaitable de ne pas essayer de la trouver en essayant différents paramètres, mais avec son propre esprit.

Qu'est-ce que cela a à voir avec l'a priori ? Vous en avez grand besoin - si vous ne pouvez pas dessiner une bougie avec seulement quatre valeurs.

 
Artyom Trishkin:

Alexey vous a dit que vous devriez d'abord faire en sorte que votre indicateur dessine au moins juste des bougies. Tels qu'ils sont. Au moins sur le bar actuel. Si vous y parvenez, considérez que la première étape de la compréhension est franchie. Mais il est souhaitable de ne pas essayer de la trouver en essayant différents paramètres, mais avec son propre esprit.

Qu'est-ce que cela a à voir avec "a priori" ? Vous en avez vraiment besoin car vous ne pouvez pas dessiner une bougie avec seulement quatre valeurs.

Je l'ai. Je le ferai. ...

 
Bonjour aux utilisateurs du forum. Pouvez-vous me dire comment faire une réception séquentielle des signaux. Par exemple, je reçois le premier de l'image 4h, puis l'image heure, 15 minutes et j'entre le trade seulement sur le minimum ? J'ai emprunté le code à CodeBase
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool  SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//---
   double  ma[];
   MqlRates  rates_1[],rates_2[],rates_3[],rates_4[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(rates_1,true);
   ArraySetAsSeries(rates_2,true);
   ArraySetAsSeries(rates_3,true);
   ArraySetAsSeries(rates_4,true);
   int  start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_1,start_pos,count,rates_1)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_2,start_pos,count,rates_2)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_3,start_pos,count,rates_3)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_4,start_pos,count,rates_4)!=count)
     {
      return(false);
     }
   int  size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);

   if((rates_1[0].open<rates_1[0].close) && (rates_2[0].open<rates_2[0].close) &&
      (rates_3[0].open<rates_3[0].close) && (rates_4[0].open<rates_4[0].close) && ma[2]<ma[1] && ma[1]<ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
   if((rates_1[0].open>rates_1[0].close) && (rates_2[0].open>rates_2[0].close) &&
      (rates_3[0].open>rates_3[0].close) && (rates_4[0].open>rates_4[0].close) && ma[2]>ma[1] && ma[1]>ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Four Timeframes 2
Four Timeframes 2
  • www.mql5.com
На одном из таймфреймов (задается через параметр 'MA Trend ') создаётся трендовый индикатор iMA (Moving Average, MA). Именно этот индикатор будет работать в качестве трендового фильтра. Тренд определяется так: MA на трёх барах (#2, #1 и #0) имеет одно направление. Советник проверяет направление бара #0 (это самый правый бар, который Вы видите...
 
Bonjour. J'ai décidé d'essayer de maîtriser à la fois le langage mql5 et la plateforme mt5. J'ai une question à propos du testeur. Ma question porte sur les citations. J'ai mis la paire audcad sur la plateforme de Weltrade. J'ai un petit panneau d'information dans mon conseiller expert. Je vois en mode visualisation que les spreads ne sont pas corrects (très petits, similaires au spread eurusd). J'ai contacté le support technique de la société (Veltrade) et j'ai demandé s'il y avait des spreads différents pour mt4 et mt5. Ils ont répondu qu'ils sont les mêmes. Que dois-je faire s'il n'y a pas de correspondance dans le testeur ? J'ai essayé de l'optimiser en utilisant le code génétique. La charge de mon processeur était de 100%, et après quelques minutes de travail, mon ordinateur a planté (le processeur était un phenom II x4 955 (4 cœurs, 3,2 GHz), le refroidisseur était en réserve). Après deux fois, j'ai décidé de ne plus prendre de risques. Comment dois-je comprendre une telle situation ? Ensuite, lors d'un test sans visualisation, il n'y a aucune information sur l'opération, seulement un graphique. Est-ce vrai ou est-ce que je fais quelque chose de mal ? L'informativité est plutôt faible en mode visualisation. En fait, ce qui m'inquiète le plus, c'est de ne pas correspondre aux écarts. En bref, ma première impression est une déception totale. Mais je l'impute au fait que je ne l'ai pas encore compris.
 
Youri Lazurenko:
Bonjour. J'ai décidé d'essayer de maîtriser à la fois le langage mql5 et la plateforme mt5. J'ai une question à propos du testeur. J'ai une question sur les devis. J'ai mis la paire audcad sur la plateforme de Weltrade. J'ai un petit panneau d'information dans mon conseiller expert. Je vois en mode visualisation que les spreads ne sont pas corrects (très petits, similaires au spread eurusd). J'ai contacté le support technique de la société (Veltrade) et j'ai demandé s'il y avait des spreads différents pour mt4 et mt5. Ils ont répondu qu'ils sont les mêmes. Que dois-je faire s'il n'y a pas de correspondance dans le testeur ? J'ai essayé de l'optimiser en utilisant le code génétique. La charge de mon processeur était de 100%, et après quelques minutes de travail, mon ordinateur a planté (le processeur était un phenom II x4 955 (4 cœurs, 3.2 GHz), le refroidisseur était en réserve). Après deux fois, j'ai décidé de ne plus prendre de risques. Comment dois-je comprendre une telle situation ? Ensuite, lors d'un test sans visualisation, il n'y a aucune information sur l'opération, seulement un graphique. Est-ce vrai ou est-ce que je fais quelque chose de mal ? L'informativité est plutôt faible en mode visualisation. En fait, c'est l'incohérence des écarts qui m'inquiète le plus. En bref, ma première impression est une déception totale. Mais je l'impute au fait que je ne l'ai pas encore compris.

Test de réglage basé sur des tics réels. Alors tous les doutes sur la validité de la propagation disparaîtront.


 
Alexey Viktorov:

Test de réglage basé sur des tics réels. Alors tous les doutes sur la validité de la propagation disparaîtront.


Merci, je vais l'essayer maintenant. Quel est votre avis sur l'optimisation. Je suis plus intéressé par la vitesse. Je corrigerai peut-être la qualité plus tard, lors des tests.

P.S. J'ai fait comme vous l'avez conseillé, les écarts sont les mêmes. J'ai volontairement vérifié le type de compte. Il est spécifié de s'étendre sur audcad 4.1 (flottant). Sur le même compte (graphique démo), il est de 4,7 (flottant). Dans le testeur, mt5, maximum 2.8 (flottant vers un côté plus petit).

 
Youri Lazurenko:

Merci, je vais essayer. Quels sont vos conseils en matière d'optimisation ? Je suis plus intéressé par la vitesse. La qualité peut être ajustée ultérieurement, lors des tests.

Je ne peux pas vous donner de conseils. Je n'utilise pas l'optimisation. Je pense que c'est juste un charlatan.