Caractéristiques du langage mql5, subtilités et techniques - page 133

 
Alexey Viktorov:
Pourquoi ?
déjà essayé
 
Nikolai Semko:
déjà essayé

Mais ici

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

Particularités de mql5, trucs et astuces

Nikolai Semko, 2019.04.03 22:33

Oui, merci Alexey. J'avais oublié cette fonctionnalité. Je l'ai déjà vu, mais je ne l'ai jamais utilisé.

Je l'ai essayé. Quelque chose ne va pas. Il le supprime, mais après l'avoir supprimé, tout s'arrête.

J'ai simplement ajouté une ligne de code à la fonction DrawSetup() avant le calcul de l'indicateur avec les paramètres suivants.

IndicatorRelease(handle);
handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

L'indicateur cesse tout simplement de fonctionner et je ne comprends pas encore la raison.

Je suis tout à fait d'accord avec vous. C'est juste un jouet inutile.


Pas du tout comme ça.
 
Alexey Viktorov:

Mais ici


ce n'est pas du tout comme ça.
J'ai déjà essayé. J'ai supprimé le code de moi-même car il n'a pas fonctionné.
 
Vous pouvez également essayer de libérer toutes les mains dans une chaîne, en commençant par la plus profondément enfouie.
 
Andrey Khatimlianskii:
Vous pouvez également essayer de libérer toutes les poignées d'une chaîne, en commençant par celle qui est la plus profondément enfouie.

Eh bien, ça ne marche pas. Ou si cela fonctionne, des freins sont appliqués.

void BuildMaFromMa()
  {
   static int h[];
   for(int i=0;i<ArraySize(h);i++) IndicatorRelease(h[i]);
   handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
   ArrayResize(h,N);
   if (N>0) h[0]=handle; 
   for(int i=0;i<N;i++)
     {
      handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);
      h[i]=handle;
     }
  }

Si vous documentez la ligne avecIndicatorRelease, alors tout fonctionne bien, mais sinon, certains freins sont activés et je ne comprends pas ce qui se passe.

Dossiers :
 

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

Indicateurs : MaFromMa

Nikolai Semko, 2019.04.04 01:00

Je voulais comparer les performances de la récursion et de l'itération.

Il s'avère que la récursion est plus de deux fois plus rapide...

Probablement parce que la pile est plus rapide...

C'est une chose étonnante. Je m'attendais à l'effet inverse. ))

#define  size 1000000
uint sum1=0,sum2=0;
int i;
int X[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(X,size);
   for(i=0;i<size;i++) X[i]=rand();

   ulong t=GetMicrosecondCount();
   i=0;
   while(i<size) { sum1+=X[i]; i++;}
//Recursion();
   ulong t1=GetMicrosecondCount()-t;

   t=GetMicrosecondCount();
   i=0;
//while(i<size) { sum1+=X[i]; i++;}
   Recursion();
   ulong t2=GetMicrosecondCount()-t;
   Print("время выполнения цикла    = "+string(t1)+" , контрольная сумма = "+string(sum1));
   Print("время выполнения рекурсии = "+string(t2)+" , контрольная сумма = "+string(sum2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Recursion()
  {
   sum2+=X[i];
   i++;
   if(i<size) Recursion();
  }
//+------------------------------------------------------------------+
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1667 , контрольная сумма = 3510404212
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 697 , контрольная сумма = 3510404212
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1653 , контрольная сумма = 3492310620
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 699 , контрольная сумма = 3492310620
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1529 , контрольная сумма = 3510953577
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 696 , контрольная сумма = 3510953577
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1559 , контрольная сумма = 3512212419
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 698 , контрольная сумма = 3512212419
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1707 , контрольная сумма = 3497178596
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 472 , контрольная сумма = 3497178596
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 2088 , контрольная сумма = 3485051380
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 482 , контрольная сумма = 3485051380
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1612 , контрольная сумма = 3487817581
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 448 , контрольная сумма = 3487817581
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1742 , контрольная сумма = 3475121003
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 497 , контрольная сумма = 3475121003
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1701 , контрольная сумма = 3485556615
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 701 , контрольная сумма = 3485556615

 

Avez-vous une fonction de calcul de lot éprouvée et fiable pour MT5, sans stop loss?

Partager...

 
Pendant l'optimisation, vous pouvez rencontrer le message suivant dans le journal du testeur
Tester  OnTesterInit failed. Optimization cannot be started.


Il est presque impossible de comprendre la cause à partir de ce message, car il n'y a aucune référence au journal du terminal. C'est là que vous devez chercher la cause.


Voici un exemple d'un tel EA

input int Range = 0; // 1..9

int Tmp = 1 / Range;

void OnTesterDeinit() {}

double OnTester()
{
  return(Tmp);
}


Le conseiller expert optimise dans une plage où la plage n'atteint pas zéro. Mais en même temps, l'optimisation échoue.

La raison en est que le mode Cadre des Expert Advisors est toujours lancé avec les paramètres d'entrée prescrits de manière rigide dans EX5. Dans ce cas, le mode Frame entraîne unedivision par zéro.

Si OnTesterDeinit est supprimé du code source, l'Optimisation fonctionnera sans problème.


Il serait bien que le TesterJournal, dans de telles situations, ait une référence au TerminalJournal. Sinon, il n'est pas toujours possible de comprendre (le débogage n'est pas disponible pendant l'optimisation), ce qui se passe.

 

Vous pouvez rencontrer une situation où les EA ne démarrent pas sur un graphique.

À gauche, vous voyez le curseur habituel lorsque vous faites glisser un EA sur un graphique. A droite, notre affaire.


Il n'y aura aucune entrée dans le journal. En général, le curseur de barrage est le seul identifiant visuel de ces graphiques.


Si vous sauvegardez le modèle tpl, ces graphiques seront distingués par une seule ligne

tester=1

Il s'agit probablement de la seule option programmatique permettant d'identifier le type de carte. C'est un tableau de bord.


Donc, si vous voulez vous protéger du trading automatisé, vous pouvez travailler uniquement avec ces graphiques.

 

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

Bugs, bugs, questions

Nikolai Semko:

La formule de l'outil synthétique donne l'erreur "Unknown parsing error" si le nom du symbole commence par (ou contient) un point.

Slava, 2019.04.19 06:08

Si un nom de caractère contient un point, un tiret ou quelque chose d'autre que vous ne comprenez pas (que diriez-vous de "RTS-12.19" ?), alors le nom doit être entouré d'apostrophes.

Raison: