L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 2008

 
elibrarius:
Oui. Les synonymes sont fic, input, predictor.
merci, j'ai toujours eu des "fiches", même si le mot est tordu
 
Evgeny Dyuka:
merci, j'ai toujours eu un "truc", même si le mot est tordu.

même méchant....

le mot le plus correct à mon avis est" caractéristiques". mais il y a beaucoup de synonymes. et pas le meilleur.

elibrarius:
Oui. Les synonymes sont fic, input, predictor.
 
Evgeny Dyuka:
merci, j'ai toujours eu des "fiches", même si le mot est tordu

Surtout quand on n'est pas familier avec la translittération.

 
Maxim Kuznetsov:

la barre ne s'ouvrira pas tant qu'un tick ne s'est pas produit sur l'instrument. Il se peut qu'il n'y ait pas de tique avant longtemps ;-)

Et ce problème, hélas, n'est pas entièrement résolu dans le code. Avez-vous des idées pour résoudre ce problème de manière à ce qu'il soit possible de recevoir les mêmes données d'un symbole sur lequel l'EA n'est pas situé en mode de modélisation OHLC et en mode "Chaque tick est basé sur des ticks réels" ? En général, avez-vous une idée de la manière de résoudre le problème de l'OHLC avec une synchronisation sans délai, c'est-à-dire que s'il n'y a pas encore de barre sur un autre symbole, alors nous utilisons les données de la barre précédente ? Si nous vérifions tous les ticks, nous pouvons (bien que je ne l'ai pas essayé) recevoir les données du premier tick de la barre et être sûrs de la synchronisation, c'est-à-dire savoir s'il y avait une barre sur le graphique actuel au moment d'en ouvrir une nouvelle ou non.

 
Aleksey Vyazmikin:

Et ce problème, hélas, n'est pas entièrement résolu par le code. Avez-vous une idée de la façon dont on peut résoudre ce problème pour qu'il soit possible de recevoir les mêmes données du symbole, où l'EA n'est pas situé, à la fois en mode de simulation OHLC et en mode "Every tick based on real ticks" ? En général, avez-vous une idée de la manière de résoudre le problème de l'OHLC avec une synchronisation sans délai, c'est-à-dire que s'il n'y a pas encore de barre sur un autre symbole, alors nous utilisons les données de la barre précédente ? Si nous le vérifions avec tous les ticks, il est alors possible (bien que je ne l'aie pas essayé) de recevoir les données du premier tick de la barre et d'être sûr de la synchronisation en l'utilisant, c'est-à-dire de savoir s'il y avait une barre dans le graphique actuel au moment de l'ouverture d'une nouvelle barre ou non.

Il se peut même que certaines mesures infimes lui échappent. Formez une barre au prix de clôture de la barre précédente. Cela peut être utile pour l'analyse du comportement combiné de plusieurs symboles. Elle peut être sans importance pour une paire de devises.
 
elibrarius:
Peut même manquer des barres de quelques minutes. Formez une barre au prix de clôture de la barre précédente. Pour l'analyse du comportement conjoint de plusieurs instruments, il conviendra parfaitement. Pour une monnaie, ce n'est probablement pas important.

De cette façon, il y aura désynchronisation, car selon l'OHLC, la barre précédente sera la précédente, mais dans le trading réel, il peut s'agir de la barre précédente.

 

Pour ceux qui ne le savent pas, le mode OHLC est une série chronologique de symboles non synchronisés, il est essentiel pour le MO


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

Nouvelle version de MetaTrader 5 build 2615 : Analyse fondamentale et critères complexes dans Strategy Tester

Aleksey Vyazmikin, 2020.09.26 13:26


Build 2622, 1 minute timeframe, outil Si-12.20 broker "Otkrytie".

Impression à l'ouverture d'une nouvelle barre dans le mode"Chaque tick basé sur les ticks réels" et "OHLC sur M1". :

Print("Time",TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES), " Time_TOM=",TimeToString(iTime("USDRUB_TOM",PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES));

Les résultats ci-dessus sont présentés sous forme de tableaux et j'ai des questions à leur sujet :

1. Je m'attendais à ce que le retard soit dû au fait qu'il existe une nouvelle barre pour le symbole actuel, mais pas encore pour le symbole pour lequel nous demandons l'information - cette situation se produit réellement, mais seulement à l'ouverture d'une nouvelle journée - elle est mise en évidence en vert.

2) La situation est la même que dans le premier point sans marquage, mais si elle est attendue dans le test Potik, alors pourquoi cette situation se produit dans"OHLC on M1" - pourquoi y a-t-il une désynchronisation - n'est pas clair.

3. la situation dans laquelle deux ticks sont reçus en même temps ou un tick pour le symbole demandé est plus rapide que pour le symbole à partir duquel l'information est appelée, est surlignée en jaune ; mais pourquoi n'y a-t-il pas de tick sur cette barre dans le mode "OHLC sur M1", s'il a déjà été reçu dans le mode tickwise?

Je demande aux développeurs de clarifier, était-ce l'intention, puis quelle est la logique, ou est-ce un bug qui sera corrigé ?


Réponse :

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

Nouveau MetaTrader 5 build 2615 : Analyse fondamentale et critères complexes dans Strategy Tester

Renat Fatkhullin, 2020.09.26 13:33

Votre question concerne uniquement le mode de test OHLC, car tout est correct en mode poticky ?

La réponse est simple, vous ne pouvez avoir aucune garantie de synchronisation précise des caractères étrangers dans les tests OHLC. L'OHLC est exclusivement destiné aux tests de saleté.


 

Il semble avoir résolu le problème de désynchronisation, lors de la demande de données d'un autre symbole - il a fallu sacrifier une barre minute dans certains cas, mais le résultat est stable lors de la modélisation sur tous les ticks et sur OHLC, ce qui signifie que la même chose est attendue dans le trading réel.

//+------------------------------------------------------------------+
//|Получение информации о ценах OHLC текущего бара                   |
//+------------------------------------------------------------------+
void Get_OHLC(string symbol,ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
   ArrayResize(arr_OHLC,4);
   arr_OHLC[0]=iOpen(symbol,TF,0);
   arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
   datetime s=iTime(symbol,TF,0);
   datetime f=iTime(symbol,PERIOD_M1,1);
   datetime Time_1=iTime(Symbol(),PERIOD_M1,1);

   if(TF!=PERIOD_M1)
   {
      double arr_High[];
      double arr_Low[];
      int copied=0;
      if(Symbol()!=symbol)//Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
      {
         if(Time_1>f)//На текущем символе открылись раньше появления нового бара на запрашиваемом
         {
            f=iTime(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else
         {
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
         if(s>f)//Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
         {
            s=iTime(symbol,TF,1);
            arr_OHLC[0]=iOpen(symbol,TF,1);
         }
         copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
         if (copied>0)
         {
            arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_High");
         }
         copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
         if (copied>0)
         {
            arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_Low");
         }

      }
      else
      {
         if(s<f)
         {
            copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
            if (copied>0)
            {
               arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_High");
            }
            copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
            if (copied>0)
            {
               arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_Low");
            }
         }
         else
         {
            if(s==f)//Если ТФ открылся на прошлом минутном баре
            {
               arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
               arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            }
            if(s>f)//Если ТФ открылся на текущем минутном баре
            {
               arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
               arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
            }
         }
      }
   }
   else
   {
      arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
      if(Symbol()!=symbol)
      {
         if(Time_1>iTime(symbol,PERIOD_M1,1))//Если не появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,0);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else//Если появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,1);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
      }
   }
}
 
Pour un algorithme robuste normal, un petit décalage n'a aucun effet. (Il s'agit de problèmes farfelus).
 
Maxim Dmitrievsky:
Pour un algo normal et robuste, un petit décalage n'a aucune incidence. Ce sont des problèmes tirés par les cheveux).

Où trouver ces derniers "normaux" ? Et cela affecte ou non - c'est aléatoire ici, si pendant la quantification on se trouve à la limite entre les quantiles, alors pendant la formation il peut apparaître qu'une seule différence de quantile causera un saut d'entrée sur le réel. En général, je n'aime pas quand je ne peux pas reproduire une journée de négociation fermée dans le testeur. J'ai donc identifié la raison et commencé à la corriger.