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

 
Igor Makanu:

Pourquoi ? Vous avez maintenant "en 2 clics" l'OHLC et le spread sur ces données sur mon graphique personnalisé, soustrayez le spread lors de l'ouverture/fermeture des ordres.

La déduire d'où si le TP se déclenche ? À partir des lignes d'équilibre et d'équité tracées par le testeur ? Et de leurs valeurs finales ? Je dois trouver comment le faire...
 
Renat Fatkhullin:

Vous parlez des langages de programmation et de leur avenir, mais vous ne savez pas que l'indice TIOBE est l'indice le plus fiable de la popularité des langages de programmation.

Pour toi, c'est noname.

Je suis retourné à cet index TIOBE
J'ai trouvé une mention :

Les 50 prochains langages de programmation

La liste de langues suivante correspond aux numéros 51 à 100. Comme les différences sont relativement faibles, les langages de programmation sont uniquement énumérés (par ordre alphabétique).

  • 4th Dimension/4D, ABC, ActionScript, Alice, Applescript, AutoLISP, B4X, bc, Bourne shell, CIL, CL (OS/400), Clojure, CoffeeScript, Common Lisp, Crystal, cT, Elixir, Emacs Lisp, Erlang, F#, Factor, Hack, Icon, Inform, Io, J, Korn shell, Ladder Logic, LiveCode, Maple, ML, MQL4, NATURAL, Nim, OpenCL, OpenEdge ABL, PILOT, PL/I, PostScript, Q, Ring, RPG, S, Simulink, Small Basic, SPARK, SPSS, Stata, Tcl, Verilog

 
elibrarius:

Pour tous les High et Low, j'ai besoin de conserver leur ordre d'arrivée par temps, c'est-à-dire qu'ils peuvent ne pas être dans l'ordre où je les ai écrits.

C'est exactement ce que fait mon script.

for(int i = ArraySize(ticks) - 1; i >= 0; i--)
   {
      ticks[i].bid = ticks[i].ask;
   }

Faites-vous vos tests en Python ou en R ? - télécharger OHLC du personnage original, puis déposer le script sur le graphique .... oops, écriture à la volée, il faut mettre l'heure D'2021.01.01' dans les paramètres

et téléchargez ce graphique personnalisé sur vous-même - ces OHLC sont entièrement synchrones.

 

En général, mon idée est brute, et il peut y avoir des écueils - comme le prix a baissé un peu avant d'atteindre le bas, puis est monté jusqu'au haut, puis seulement jusqu'au bas.
Sans tous les ticks, il est impossible d'évaluer ce que sera le premier TP ou SL.

Bien que, dans mes modèles MO, je pense que si le TP et le SL se déclenchent tous deux sur la barre, le premier déclenché était la variante désavantageuse, c'est-à-dire le SL.


Mais c'est quelque chose à quoi il faut penser, si quelqu'un d'autre que moi pouvait bénéficier d'une telle OHLC...

 
Igor Makanu:

C'est exactement ce que fait mon script.

Faites-vous vos tests en Python ou en R ? - décharger OHLC du personnage original, puis déposer le script sur le graphique .... oops, écriture à la volée, il faut mettre l'heure D'2021.01.01' dans les paramètres

et téléchargez ce graphique personnalisé sur vous-même - ces OHLC sont complètement synchrones

Je les télécharge dans des fichiers, et ensuite je peux les télécharger vers R, ou vers python, ou vers une DLL, ou vers un serveur distant.
 
elibrarius:

En général, mon idée est brute, et il peut y avoir des écueils - comme le prix a baissé un peu avant d'atteindre le bas, puis est monté jusqu'au haut, puis seulement jusqu'au bas.
Sans tous les ticks, il est impossible d'évaluer ce que sera le premier TP ou SL.

Bien que, dans mes modèles MO, je pense que si le TP et le SL se déclenchent tous deux sur la barre, le premier déclenché était la variante désavantageuse, c'est-à-dire le SL.


Mais c'est quelque chose à laquelle il faut penser, si quelqu'un d'autre que moi pouvait bénéficier d'une telle OHLC...

Bien sûr, sans l'heure d'arrivée des tics, vous ne serez pas en mesure d'estimer ce qui était plus tôt le haut ou le bas juste par OHLC.

c'est le même travail que j'ai fait pour moi-mêmehttps://www.mql5.com/ru/forum/282062/page34#comment_20079886

#define  OPEN   0
#define  HIGH   1
#define  LOW    2
#define  CLOSE  3

MqlTick HistoryData[];
MqlTick bar[4];
const datetime t_bar[] = {0, 20, 40, 59};
//+------------------------------------------------------------------+
int OnInit()
{
   ArrayResize(HistoryData, 1, 2000000);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   int handle = FileOpen(_Symbol + "_tick.bin", FILE_WRITE | FILE_BIN | FILE_COMMON);
   if(handle < 0)
   {
      Print("Erorr write array # ", GetLastError());
      return;
   }
   FileWriteArray(handle, HistoryData, 1);
}
//+------------------------------------------------------------------+
void OnTick()
{
   MqlTick tick;
   if(!SymbolInfoTick(_Symbol, tick)) return;
   static datetime LastBarM1 = 0;
   datetime d_minutes = tick.time / 60;
   if(LastBarM1 == 0)   // первый запускt
   {
      for(int i = 0; i < 4; i++) bar[i] = tick; // проинициализируем
      LastBarM1 = d_minutes;
   }

   if(d_minutes != LastBarM1) //--- если новая минута
   {
      if(bar[HIGH].time_msc > bar[LOW].time_msc)   // поменяем местами по времени тика
      {
         MqlTick tmp = bar[LOW];
         bar[LOW] = bar[HIGH];
         bar[HIGH] = tmp;
      }
      datetime t = LastBarM1 * 60;  // посчитаем вренмя, sec = 0
      for(int i = 0; i < 4; i++)    // подменим время тика
      {
         bar[i].time = t + t_bar[i];
         bar[i].time_msc = bar[i].time * 1000;
      }
      ArrayInsert(HistoryData, bar, ArraySize(HistoryData));   // добавим в массив
      for(int i = 0; i < 4; i++) bar[i] = tick;                // проинициализируем
      LastBarM1 = d_minutes;                                   // запомним минуты
   }

   if(tick.ask > bar[HIGH].ask) bar[HIGH] = tick;
   if(tick.ask < bar[LOW].ask)  bar[LOW]  = tick;
   bar[CLOSE] = tick;
}
//+------------------------------------------------------------------+

ce script déchargera le haut et le bas dans le bon ordre en fonction de ce qui a été fait précédemment.

 
Igor Makanu:

Bien sûr, sans l'heure d'arrivée du tick, vous ne pouvez pas estimer ce qui était haut ou bas par le seul OHLC.

c'est le même travail que j'ai fait pour moi-mêmehttps://www.mql5.com/ru/forum/282062/page34#comment_20079886

ce script déchargera le haut/bas dans la bonne séquence en fonction de ce qui a été fait précédemment.

Merci, je ferai quelque chose comme ça bientôt.
 
elibrarius:

En général, une deuxième version de ticks réels est nécessaire, mais avec seulement 6 ticks :
Open : Bid et Ask

Enchère élevée

Demande élevée

Offre basse

Demande faible

Fermer : Offre et demande

Pour tous les High et Low il est nécessaire de garder l'ordre de leur arrivée par temps, c'est-à-dire qu'ils ne peuvent pas être dans l'ordre où je les ai écrits.

Avec un tel outil, il est possible d'estimer les barres avec une précision de ticks réels. Avec beaucoup moins de trafic. Et il faut apprendre au testeur à commercer avec eux bien sûr - mais je pense que le moteur des vrais ticks fera l'affaire sans aucune modification.

fxsaber l'a fait pour MT4 il y a quelques temps.

Maintenant, ce n'est plus un problème - à partir de tics réels, on peut construire n'importe quelle version amincie dans l'outil castum, et la tester.

 
Renat Fatkhullin:

Nous allons développer une intégration directe avec WinML, comme nous l'avons fait pour OpenCL et DirectX.

En outre, nous avons un grand projet visant à inclure des modules/packages C++ similaires à d'autres langages. En d'autres termes, il sera possible de convertir un grand nombre de bibliothèques open source en paquets.

Opérations matricielles, au moins sur le CPU/Multithreads/AVX, mais peut-être aussi sur le GPU.

Les sons surlignés sont inspirants. Surtout s'il existe des bibliothèques Keras ou au moins Tenzor Flow similaires en C++. Merci.

s.w. WinML ne concerne que le travail en ligne, pas la formation, n'est-ce pas ? Mais c'est bien, les modèles sont de plus en plus lourds.

 
Maxim Dmitrievsky:

Où se trouve le vrai graphique et où se trouve le graphique généré ?


Ci-dessus, le graphique généré, ci-dessous, le graphique du marché.