La décélération linéaire est-elle une erreur de programmation ou une caractéristique de MT4 ? - page 4

 

la construction ci-dessous vaut à elle seule le coup.


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

un peu plus

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

et nous savons déjà ce qui est exécuté dans quelle séquence. C'est juste du formatage. Mais vous pouvez également décomposer le code en opérations logiquement cohérentes et les séparer en fonctions distinctes. L'algorithme principal est ainsi libéré des piles de code enchevêtrées.

 
micle:

Le problème est la duplication du code, le nombre excessif d'instructions conditionnelles. En fait, le code est constitué de 99% de lignes incluant d'une manière ou d'une autre l'opérateur conditionnel If ; je suis sûr que si vous vous y penchez, le nombre de comparaisons pourrait être réduit de 10 fois. Non seulement cela ralentit l'exécution, mais ce code est également difficile à lire. Une personne qui y apporte des ajouts a au moins 2 tâches principales :

1 - pour ne pas le casser

2 - Ajouter les fonctionnalités nécessaires.

De toute façon, un code illisible entraîne une duplication supplémentaire de toutes sortes de contrôles et de comparaisons, ce qui constitue également une dépense supplémentaire. En regardant le code, je me souviens personnellement de moi il y a environ 25 ans, lorsque j'ai commencé à programmer, et que j'ai appris à partir du manuel de l'Atari 800XL PC sans aucun professeur, juste parce que c'était intéressant.

Bien sûr, il est intéressant de savoir de quel "si" nous parlons, il y a probablement mon RPT - où j'écris "si, alors, alors", et le programmeur l'interprète dans le code, et il y a un "si" lié au travail direct avec les ordres, et il y a beaucoup d'opérations avec les ordres...

Bien sûr, je pensais qu'il s'agissait d'une sorte de boucle dont l'exécution conduit à de multiples vérifications des conditions d'ordre. Et il s'avère que la situation ne peut être corrigée qu'en réécrivant le code à partir de zéro ?

 
micle:

la construction ci-dessous vaut à elle seule le coup.

un peu plus

et vous pouvez déjà voir ce qui est exécuté dans quel ordre. C'est juste du formatage. Mais vous pouvez également décomposer le code en opérations logiquement cohérentes et les séparer en fonctions distinctes. Ainsi, il soulagera l'algorithme principal des piles de code enchevêtrées.

Mais cela n'affecte-t-il pas les performances de quelque manière que ce soit ?

 
micle:

Problème avec le code dupliqué

La duplication n'a rien à voir avec cela et rien à voir avec les "si". Le véritable ralentissement vient du travail avec les mandats.
 
micle:

la construction ci-dessous vaut à elle seule le coup.


un peu plus

et nous savons déjà ce qui est exécuté dans quelle séquence. C'est juste du formatage. Mais vous pouvez également décomposer le code en opérations logiquement cohérentes et les séparer en fonctions distinctes. L'algorithme principal est ainsi libéré des piles de code enchevêtrées.

Des arguments très forts, votre code, où puis-je voir un programmeur expérimenté ?
 

rev 1.1

Pour définir un stop loss et le filtrage des ordres en attente, nous utilisons deux options d'utilisation d'une MA miroir.
maMirror - calculé en utilisant la fonction iMA standard, fonctionne une fois par barre, les données sont prises à partir des prix d'ouverture de la barre.
Algorithme de calcul :

Pour vendre :
point de calcul initial maMirror=iMA+pipsXHmaM(o/b)
point de calcul ultérieur maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
le calcul est terminé après le point final du calcul.

A acheter :
point de calcul initial maMirror=iMA-pipsXHmaL
points de calcul suivants maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
Le calcul est terminé après le point final du calcul.


Pour simplifier le cahier des charges, il est nécessaire de mettre en place deux blocs de calcul, qui seront indépendants l'un de l'autre en termes de fonctionnement et de variables, et qui peuvent être définis par l'utilisateur.
maMBlock=0 - ne pas utiliser les blocs (le stop loss standard est utilisé)
maMBlock=1 - utiliser uniquement le bloc n°1.
maMBlock=2 - utiliser le bloc #2 uniquement (le stop loss standard est utilisé)
maMBlock=3 - utiliser les deux blocs

Bloc 1
Calculer le stop loss. Le stop loss est recalculé et l'ordre est mis à jour à chaque barre par la valeur de maMirror.
1 La variable StartPoint est utilisée pour déterminer le point de départ du calcul, si StartPoint=1 (le calcul est effectué après que le maT soit touché), si StartPoint=2 (le calcul est effectué après l'ouverture de l'ordre).
1.1 Si StartPointO=1, le calcul est terminé après que maT ait été touché ;
1.2 Si StartPointO=2, le règlement se termine après la clôture de l'ordre ;
1.3 Si le stop loss ne peut être fixé par maMirror, l'ordre est fermé.
1.4. Levl_Zerro=0 (non utilisé), Levl_Zerro!=0 (le stop loss est actualisé à la valeur maximale spécifiée en comptant à partir du prix d'ouverture, une valeur négative signifie que le stop loss est converti en une valeur positive)

Bloc 2
Calcul du filtrage pour les ordres en attente
0.1 Pour acheter un ordre, l'ordre est placé si maMirror>prix d'ouverture de l'ordre en attente
0.2 Pour vendre, les ordres sont placés si maMirror<prix d'ouverture de l'ordre en attente
1 La variable StartPoint est utilisée pour déterminer le point de départ du calcul si StartPoint=1 (le calcul est effectué après que le maT soit touché), si StartPoint=2 (le calcul est effectué après l'ouverture de l'ordre).
1.1 Si StartPointB=1, le calcul est terminé après que maT ait été touché ;
1.2 Si StartPointB=2 (le règlement se termine après la clôture de l'ordre) ;
2. Si maMirrorDell=0 (non utilisé) maMirrorDell=1 (tous les ordres ouverts sont supprimés si les conditions du point 0 ne correspondent pas)

Variables d'utilisateur
maMirrorO (réglages par iMA)
maMirrorB (paramètres iMA)
Point de départO
Point de départB
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
maMBlock

maMirrorDell

Aide à l'estimation de la mission, le client veut un nouveau travail, je ne sais pas combien estimer) Comme je ne suis pas un programmeur, je suis un ingénieur d'académie aérospatiale)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Le premier problème, et peut-être le plus important, est que le code est illisible et non structuré. Votre cahier des charges est peut-être très clair. Si vous comprenez les TdR et écrivez le code dans le bon sens, cela donne (en règle générale) un gain significatif en vitesse d'exécution, mais cela coûte aussi d'autres choses.
 
-Aleks-:

Cela affecte-t-il les performances de quelque manière que ce soit ?

Dans cet exemple particulier, il n'a aucun effet. Il n'est pas nécessaire de traiter ce type de formatage dans l'ensemble du script d'évaluation environnementale, ni de le reformater entièrement.
 
zfs:
Des arguments très forts, votre code, où puis-je voir un programmeur expérimenté ?
Mon code n'est pas dans le domaine public. Les développements commerciaux fonctionnent sur et autour de serveurs web très chargés. En particulier, mon code calcule les embouteillages sur les routes de "plusieurs" villes dans le cadre du projet DorogaTV
 
TheXpert:
La duplication n'a rien à voir avec cela, ni les "si". Le véritable ralentissement est donné par le travail sur commande.

Travailler avec des ordres dans le code TK, ou peut-être TK lui-même, ou MT4 travaillant avec des ordres en général ?