Caractéristiques du langage mql4, subtilités et techniques - page 19

 

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

Bibliothèques : Expert

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


Alternative

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

Toutes les questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


Cela ne fonctionnera pas toujours, mais le plus souvent, c'est suffisant.

 
 

La tâche consistait à sauvegarder tous les ticks (sans pertes) de la Market Watch avec le moins d'effort possible.

J'ai écrit un script de chargement, qui ouvre un graphique pour chaque symbole et exécute le collecteur d'indicateurs sur celui-ci.

L'astuce consiste à faire fonctionner l'indicateur en chargeant un tel fichier tpl (donné en entier).

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

C'est bien parce qu'il n'y a pas de bars. Par conséquent, aucune ressource n'est dépensée pour eux.

À la fin de la journée, il y a 60 graphiques. Le même nombre d'indicateurs. ~500Kb de ticks par minute sont écrits.

RAM ~450Mb, CPU ~3-8% (8 HyperThreading).


Si vous voulez faire quelque chose comme ça, je vous recommande vivement d'exécuter Expert Advisor, qui suit la fréquence des changements de données dans Market Watch. Mon EA ne se rafraîchit pas pendant plus de trois secondes, puis il est obligé de se reconnecter. Le fait est que MT4 (et MT5 également), en cas de problèmes de réseau, peut se reconnecter après 10-15 secondes, et parfois jusqu'à une minute. Ce n'est qu'ensuite que la reconnexion se fait. Afin de ne pas perdre de ticks dans ces 10-15 secondes ou même une minute, je recommande de prendre la tâche de reconnexion. Il en va de même pour les terminaux avec des CT de combat.

 
fxsaber:

Le défi consiste à sauvegarder tous les ticks (sans pertes) de la Market Watch avec le moins d'efforts possible.

Est-ce que c'est sans perte ? Ce mythe a déjà été dissipé.

 
Andrey Khatimlianskii:

Pas de pertes, alors ? Je pense que ce mythe a déjà été dissipé.

Je ne me souviens pas exactement comment je m'en suis convaincu. Je sais que j'ai comparé l'historique collecté dans MT4 avec celui du courtier. J'ai eu une correspondance à 100%.

J'utilise la solution HistoryTicks de QB. Lorsque je compare le résultat du testeur virtuel sur les ticks collectés et le résultat du testeur MT5 sur les ticks téléchargés, la correspondance est de 100%.

Les problèmes ne peuvent être dus qu'à la connectivité. Les conseillers experts, bien sûr, manquent. Les indicateurs ne le font pas.

 
fxsaber:

Je ne me souviens pas exactement comment je me suis convaincu de cela. Je sais que j'ai comparé l'historique collecté dans MT4 avec celui du courtier. Il y avait une correspondance à 100%.

J'utilise la solution HistoryTicks de QB. Lorsque je compare le résultat du testeur virtuel sur les ticks collectés et le résultat du testeur MT5 sur les ticks téléchargés, la correspondance est de 100%.

Les problèmes ne peuvent être dus qu'à la connectivité. Les conseillers experts, bien sûr, manquent. Les indicateurs ne le font pas.

Ahem... Je parlais juste de votre exposition :

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

Erreurs, bugs, questions

fxsaber, 2018.02.26 09:05

Si un paquet de trois ticks est arrivé, l'événement Calculate sera appelé trois fois, mais SymbolInfoTick renverra le dernier tick à chacun de ces trois appels. C'est-à-dire que la soi-disant collecte de ticks sans passer par des indicateurs est discutable, pour ne pas dire plus.


Quelque chose a changé ?

 
Andrey Khatimlianskii:

Ahem... Je parlais juste de votre exposition :

Est-ce que quelque chose a changé ?

Lorsqu'il y a eu des manipulations avec CopyTicks, il y a eu une comparaison entre la collecte des tics et les résultats de CopyTicks.

Je ne me souviens pas exactement, mais je pense qu'il y a eu une correspondance.

Nous devons utiliser CustomTicksAdd pour ajouter un lot de ticks et le regarder. Mais c'est MT5.


Pour MT4, on peut le vérifier de cette façon. Deux tiques enregistrées voisines doivent toujours être différentes. Et les volumes de ticks des barres sur le serveur doivent coïncider avec les barres des ticks collectés.

En 2018, je devais savoir quelque chose d'intelligent. Je ne m'en souviens plus maintenant.

 
fxsaber:

Je ne me souviens pas exactement comment je me suis convaincu de cela. Je sais que j'ai comparé l'historique collecté dans MT4 avec celui du courtier. Il y avait une correspondance à 100%.

J'utilise la solution HistoryTicks de QB. Lorsque je compare le résultat du testeur virtuel sur les ticks collectés et le résultat du testeur MT5 sur les ticks téléchargés, la correspondance est de 100%.

Les problèmes ne peuvent être dus qu'à la connectivité. Les conseillers experts, bien sûr, manquent. Les indicateurs ne le font pas.

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

Donner un conseiller pour recueillir l'historique des tiques

zenz, 2018.03.07 11:10

J'ai fait la comparaison en septembre. Les archives d'Alpari ont un délai de publication d'une semaine, donc si je fais la comparaison actuelle, je ne l'obtiendrai pas avant la semaine prochaine (et je n'en vois pas l'intérêt - j'ai déjà fait le calcul moi-même).

Voici donc deux captures d'écran du 22.09.2017. Le terminal fonctionnait sur un ordinateur vide, avec le seul indicateur qui écrivait le journal. Système d'exploitation XP SP3, version du terminal MT4 build 1090. Alpari Pro-ECN Compte réel.



À gauche, l'image provenant des archives d'Alpari, et à droite, les tics enregistrés par l'indicateur.

Ici vous pouvez remarquer que les ticks avant 17 secondes et après (16 et 18 secondes) coïncident complètement, c'est-à-dire que le cas, dans ce cas, n'est pas en désynchronisation de temps. Je répète que ce n'est pas seulement en une seconde que les tics sautent - c'est-à-dire pas seulement les tics rapides - mais que les tics "lents" sont également avalés. Je n'ai pas trouvé de caractère systématique à cela.

Explication : à droite du point après les secondes dans l'archive d'Alpari, il n'y a pas de miles ou de microsecondes, mais le nombre de tic-tac - il est fait de cette façon pour une raison quelconque.

Voici un lien vers ce fil de discussion: https://www.mql5.com/ru/forum/229889/page4#comment_6741502 Je ne pense pas que quelque chose ait changé dans MT4 depuis lors, bien que je n'aie plus vérifié, mais je suppose que les indicateurs et les EA dans MT4 manquent les ticks.

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

Voici le lien vers ce fil de discussion: https://www.mql5.com/ru/forum/229889/page4#comment_6741502. Je ne pense pas que quelque chose ait changé dans MT4 depuis lors, bien que je n'aie plus vérifié, mais je suppose que les indicateurs et les EA dans MT4 manquent les ticks.

Il n'y a aucune certitude que, du côté du serveur commercial, ces ticks "manqués" aient été envoyés.

 
fxsaber:

Il n'y a aucune certitude que, du côté du serveur commercial, ces ticks "manqués" aient été envoyés.

J'ai réfléchi à cela aussi, je suis d'accord. Je faisais simplement des recherches à l'époque et j'ai constaté que les écarts n'étaient pas isolés, mais récurrents - j'ai donc laissé tomber.