Moins de code, plus d'action... l'écriture d'un EA - page 5

 
Vladimir Simakov:

Que voulez-vous en retirer ? Pour être honnête, je ne comprends pas. J'ai d'abord pensé qu'un cadre de travail était prévu, mais non, pas de classes enveloppantes pour les indicateurs, les ordres, les algorithmes standard de prise de décision, rien. Bien que la construction suivante soit beaucoup plus lisible : fast.Get(2)>=slow.Get(1) ; (c'est juste pour l'exemple), mais la déclaration :

CMA fast=new CMA(NULL,0,12,...) ;

CMA slow=new CMA(NULL,0,100,...) ;

Maintenant, nous pouvons en discuter, tandis que vous, IMHO, piétinez sur place.

par exemple, au lieu de fast.Get(2)>=slow.Get(1) ; c'est un code tout à fait légal et fonctionnel :

table[FAST_MA][1] >=table[SLOW_MA][2]

il fonctionne comme une feuille de calcul, avec excel. Elle est résumée dans un tableau, et non par poignées individuelles, car les données (formules) peuvent être interdépendantes.

C'est possible (je ne l'ai pas encore fait dans une bibliothèque spécifique) :

fast=table[FAST_MA]; slow=table[SLOW_MA];

et puis fast[2]>slow[1] est encore plus facile à lire

et tous les calculs internes seront effectués "à la demande".

 
Maxim Kuznetsov:

également par exemple, au lieu de fast.Get(2)>=slow.Get(1) ; code tout à fait légal et fonctionnel :

table[FAST_MA][1] >=table[SLOW_MA][2]

ça fonctionne comme avec une feuille de calcul, avec Excel. Elle est résumée dans un tableau, et non par poignées individuelles, car les données (formules) peuvent être interdépendantes.

C'est possible (je ne l'ai pas encore fait dans une bibliothèque spécifique) :

fast=table[FAST_MA]; slow=table[SLOW_MA];

et puis fast[2]>slow[1] se lit encore plus facilement

et tous les calculs internes seront effectués "à la demande".

C'est une sorte de béquille. Aux tampons d'effacement, que le terminal créera de toute façon, nous ajoutons également des tableaux de doubles. Je comprends que vous leur réserverez de la mémoire jusqu'à la profondeur totale de l'historique (pour M1 USHORT_MAX, si je me souviens bien *8 octets) ou prévoyez-vous d'utiliser régulièrement des ArrayResize coûteux dans le processus ?
 
Vasiliy Sokolov:

Je suis d'accord, il est très difficile de lire votre code, même si vous connaissez le langage.

En fait, cette règle fonctionne pour tout code tiers. La seule question est de savoir quel code n'est pas difficile mais plus facile à lire.

Et ici, il est plus facile de lire et de modifier presque toujours le code MQL4. Les développeurs l'ont deviné une fois.

 
fxsaber:

En fait, cette règle fonctionne pour tout code tiers. La seule question est de savoir quel code n'est pas difficile mais plus facile à lire.

Et il est plus facile de lire et de modifier presque toujours le code MQL4. Les développeurs l'ont deviné une fois.

Mais laissez-moi vous poser une question. Quelle était la supposition ? Le C/C++ standard, sauf pour les requêtes spécifiques liées au trading et aux graphiques, peut être considéré comme "windows.h" en C++.

Donc, respect aux développeurs pour ne pas réinventer la roue, bien qu'interdire les liens soit un moins sans équivoque, quand je suis tombé dans le C/C++ après mql, je ne pouvais pas me réjouir. C'est pourquoi, si un miracle se produit, vous devriez peut-être envisager, comme alternative, comme C# usafe, surtout pour les gens comme moi, comme si vous voulez frapper le mur, tuez-vous, nous vous avons prévenu.

 
Vladimir Simakov:

Laissez-moi vous poser une question. Quelle est l'hypothèse ?

Kodobase est rempli d'EAs MT5 qui sont des remakes d'EAs MT4. Comparez le code de l'original et du remake.


Évidemment, il est beaucoup plus facile de comprendre la logique de l'original MT4. Mais c'est encore plus facile lorsqu'il s'agit de corriger quelque chose en TS. Ce n'est pas pour rien que MQL4 est un standard pour la discussion des algorithmes de trading sur les forums du monde entier. Aucun autre langage, mais MQL4. Et il a joué un grand rôle dans la popularité de MT4, et non l'inverse.


Et si nous parlons des conversions MT5, elles sont tordues - elles ne fonctionnent pas toujours. Un exemple simple. Vous envoyez une demande de clôture d'une position mais recevez un ordre de transaction au lieu de la clôturer. Il y a beaucoup d'astuces à résoudre pour accéder au compte réel. Avec MT4, c'est simple et fiable.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

La base de données Kodobase est pleine de MT5 EAs qui sont des remakes de MT4 EAs. Comparez le code de l'original et du remake.


Il est évidemment beaucoup plus facile de comprendre la logique de l'original MT4. Mais c'est encore plus facile lorsqu'il s'agit de corriger quelque chose en TS. Ce n'est pas pour rien que MQL4 est un standard pour la discussion des algorithmes de trading sur les forums du monde entier. Aucun autre langage, mais MQL4. Et il a joué un grand rôle dans la popularité de MT4, et non l'inverse.


Et si nous parlons des conversions MT5, elles sont tordues - elles ne fonctionnent pas toujours. Un exemple simple. Vous envoyez une demande de clôture d'une position mais recevez un ordre de transaction au lieu de la clôturer. Il y a beaucoup d'astuces à gérer pour accéder au compte réel. Avec MT4, c'est simple et fiable.

C'est donc une folie de travailler avec les ordres/positions par analogie. Dans mql4 j'ai une classe wrapper pour cela, dans mql5 j'en ai deux différentes, parce que dans mt4 c'est une entité, et dans mt5 il y en a deux différentes, maintenant le plan est d'implémenter une classe wrapper sur eux et d'oublier de travailler avec les commandes, comme je l'ai fait pendant six mois sur mql4.
 
Et oui, mt5 a été créé pour travailler sur la bourse, et il y a un principe différent de travail avec les ordres/positions, donc apprenez les maths et ne pleurnichez pas, tout fonctionne bien et sans problème là-bas, mais les mécanismes de trading de la bourse et du forex doivent être appris en premier et prendre en compte leurs différences. Tout ce qui est nécessaire pour ce faire, les développeurs l'ont donné et décrit dans les docks, et ensuite c'est à vous de jouer.
 
Vladimir Simakov:
C'est donc un non-sens de travailler avec les ordres/positions par analogie. J'ai une classe wrapper pour cela dans mql4 et deux différentes dans mql5 parce que c'est une entité dans mt4 et deux différentes dans mt5. Maintenant je prévois d'implémenter une classe wrapper pour eux et d'oublier de travailler avec les commandes comme je l'ai fait pendant six mois dans mql4.
Vladimir Simakov:
Vous savez, mt5 aussi a été créé pour travailler en bourse et là ils ont un autre principe de travail avec les ordres/positions, donc apprenez les maths et ne râlez pas, tout est bon et fonctionne bien là, mais d'abord nous devons apprendre les mécanismes de trading de la bourse et du forex et prendre en compte leurs différences. Tout ce qui est nécessaire pour ce faire, les développeurs l'ont donné et décrit dans les docks, et ensuite c'est à vous de jouer.

Essayez d'élargir vos horizons car ce que vous avez écrit est vraiment une plainte.

 
Vladimir Simakov:
Il semble que ce soit une béquille. Outre les tampons d'essuyage, que le terminal créera de toute façon, nous ajoutons également des tableaux doubles. Je comprends que vous allez leur réserver de la mémoire jusqu'à la profondeur totale de l'historique (pour M1 USHORT_MAX, si je me souviens bien *8 octets) ou prévoyez-vous d'utiliser régulièrement le coûteux ArrayResize en cours d'opération ?

Je leur alloue de la mémoire, bien sûr. A une profondeur ne dépassant pas celle nécessaire aux calculs et au débogage. Dans le fragment donné, il est de 30, ce qui est plus que suffisant. Si quelque part il sera nécessaire de calculer par exemple l'écart-type de la profondeur 50, alors le cache doit être augmenté. Et ce, uniquement pour accélérer les calculs.

 
fxsaber:

Essayez d'élargir vos horizons car ce que vous avez écrit est vraiment une plainte.

Je suis d'accord avec l'esprit, mais c'est ainsi que la connexion entre la position et l'ordre est implémentée dans mql5 (dans le cadre du dernier travail, en principe, il ira déjà dans la bibliothèque pour les comptes de couverture sous cette forme).

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}