Questions des débutants MQL5 MT5 MetaTrader 5 - page 986

 
Artyom Trishkin:

Dans OnInit() appelez la série temporelle du symbole : iTime(Symbol,Timeframe,1) ;

Au tout début de OnTick(), demandez la barre nécessaire de la série temporelle nécessaire via le iFunc() correspondant, ou si( iTime(Symbol,Timeframe,10)==0) return ;

Dans ce cas, le conseiller expert ne détectera pas de nouvelle barre et attendra le prochain tick.

Dans OnInit(), nous avons demandé les données de la série chronologique, activant ainsi la pagination des données.

Dans OnTick() nous vérifions si l'historique minimum requis est disponible pour l'EA et s'il n'est pas encore disponible, nous attendons le prochain tick.

Et jusqu'à ce que toutes les données requises par le conseiller expert soient reçues, il attendra le prochain tick.

Dès que toutes les données nécessaires sont pompées et obtenues, le conseiller expert commence à travailler avec la nouvelle barre et l'historique requis.

Pour que les données de série restent à jour, veillez à y accéder au moins une fois toutes les deux minutes. Créez une deuxième minuterie d'environ une minute et demie (90 secondes) et dans celle-ci, accédez simplement à n'importe quelle série temporelle du symbole souhaité, par exemple iTime(Symbol,Timeframe,1) ; sans vérifier les données reçues - il suffit de "déplacer" l'historique. Ainsi, toutes les données du symbole seront toujours à jour.

Bien sûr, je vais essayer de vérifier la nouvelle barre en utilisant toutes les TF mais ce n'est pas synchrone, ce n'est pas MT4. Le problème ne vient pas de la barre mais de la non-performance des indicateurs qui sont appelés depuis l'indicateur, qui à son tour est appelé depuis l'Expert Advisor.

Je travaille sur des procès-verbaux, donc l'historique doit toujours être à jour.

Et, toutes ces vérifications sont faites pour le test et elles ne feront que ralentir le travail sur un compte réel, car tout y fonctionne plus lentement que dans les conditions stationnaires du testeur, je répète que sur un compte réel l'indicateur fonctionne correctement.

 

Jusqu'à présent, j'ai résolu le problème en vérifiant l'état des indicateurs qui ont échoué avant de lancer le code principal.

//При появлении нового бара проверяем корректность расчета индикаторов
      if(isNewBar_Predv_Calc_Ind()==true)Predv_Calc_Ind=true;
      if(Predv_Calc_Ind==true)
      {
      double arr_DonUp=ZZ_Vibor(0,2,0);
      double arr_DonDown=ZZ_Vibor(0,3,0);
      double arr_DonUp_m2=ZZ_Vibor(1,2,0);
      double arr_DonDown_m2=ZZ_Vibor(1,3,0);
      double arr_DonUp_m5=ZZ_Vibor(2,2,0);
      double arr_DonDown_m5=ZZ_Vibor(2,3,0);
      double arr_DonUp_m15=ZZ_Vibor(3,2,0);
      double arr_DonDown_m15=ZZ_Vibor(3,3,0);
      if (arr_DonUp<1     || arr_DonDown<1    ||
          arr_DonUp_m2<1  || arr_DonDown_m2<1 ||
          arr_DonUp_m5<1  || arr_DonDown_m5<1 ||
          arr_DonUp_m15<1 || arr_DonDown_m15<1
         )return;
      else{Predv_Calc_Ind=false;}      
      }
//Операции выполняются только при появлении следующего бара   
   if(!isNewBar()) return;

Mais cette approche n'est pas universelle, car il faut répertorier tous les indicateurs. Existe-t-il une autre méthode, plus universelle, pour faire fonctionner correctement l'environnement du testeur ?

 
Artyom Trishkin:

Dans OnTick() nous vérifions si l'historique minimum requis est disponible pour le conseiller expert, et s'il n'est pas encore disponible - nous attendons le prochain tick.

Et jusqu'à ce que toutes les données requises par l'EA soient obtenues, il attendra le prochain tick.

Dès que toutes les données nécessaires sont pompées et obtenues, le conseiller expert commence à travailler avec la nouvelle barre et l'historique requis.

Comment proposez-vous de vérifier la disponibilité de l'historique, je ne comprends pas...

 
fxsaber:

Ajoutez cette ligne avant la fonction MQL4

et il fonctionnera dans MT5.

C'est génial. Merci beaucoup !

 
Bonjour, je suis un jeune retraité qui aimerait réaliser de tels boutons dans MT5.

Pouvez-vous dire que MT5 peut mettre en œuvre de tels boutons, peut-être en avez-vous déjà un, partagez le code ...


Le bouton "Démarrer " et le bouton "Fermer tous les ordres". MT5, toutes les paires, tous les délais, 4/5 signes. Lot initial 0.01 y compris les centimes.
Prévoir les glissements et les requêtes.

Fonctions du bouton "Start
Une fois que vous avez déballé manuellement le Fibo, vous devez ouvrir 1 à 11 ordres à la fois en BAY ou SELL au prix actuel.
Si vous avez préalablement sélectionné dans les paramètres combien et quels ordres (1, 2, 5, 7 ou tous les 11) doivent être ouverts dans la direction du Fibo déplié.
Dans les paramètres, il était possible de spécifier la taille manuelle du lot pour chaque ordre, ou de l'augmenter/diminuer dynamiquement.

TP - LeTake Profit est fixé dans l'ordre ascendant de 1 à 11 ordres aux niveaux Fibo de 61.8 ; 78.6 ; 100.0 ;
161.8 ; 185.4 ; 200.0 ; 261.8 ; 285.0 ; 423.6 ; 561,8 ; 685.4

SL - Stop Loss en taille de - 2 spreads (calculé automatiquement) à partir de la ligne zéro de la fibo.

TS - Le Trailing Stop tire tous les ordres derrière lui.
1. le Trailing Stop déplace le SL de tous les ordres vers les spreads 38.2 + 2 si le prix a atteint le niveau 61.8,
2. le Trailing Stop déplace le SL de tous les ordres restants au niveau 50.0 + 2 spreads si le prix atteint le niveau 100.0,
3. SL suiveur de tous les ordres restants à 78.6+2 spreads si le prix atteint le niveau 161.8,
4. SL suiveur de tous les ordres restants au niveau du spread 100.0+2 lorsque le prix atteint le niveau 261.8. 5.
5. SL suiveur de tous les ordres restants au niveau du spread 200.0+2 lorsque le prix atteint le niveau 423.6,
6. le suivi déplace le SL de tous les ordres restants au niveau du spread 423.6+2 si le prix a atteint 561.8 ;

Lafonction du bouton "Fermer tous les ordres" est de fermer de force tous les ordres.
 

Bonjour, si les prix Ask et Bid de la classe CSymbolInfo sont plus ou moins clairs, comment obtenir par exemple SessionInterest ou SessionBuyOrdersVolume ou SessionPriceLimitMin, Cela donne des zéros, je ne comprends pas pourquoi....

 
Александр Юрин:

Bonjour, si les prix Ask et Bid de la classe CSymbolInfo sont plus ou moins clairs, comment obtenir par exemple SessionInterest ou SessionBuyOrdersVolume ou SessionPriceLimitMin, cela donne des zéros, je ne comprends pas pourquoi ...

Si le serveur de négociation diffuse cette information, vous la recevrez.

En règle générale, ces informations sont diffusées par les courtiers pour les symboles boursiers (ne pas confondre courtiers et centres de négociation).

 
Vladimir Karputov:

Si un serveur de négociation diffuse cette information, vous la recevrez.

Ces informations sont généralement diffusées par les courtiers pour les symboles boursiers (ne pas confondre courtiers et centres de négociation).

Le courtier Otkritie, le RTS Index Futures, je suppose qu'il doit diffuser au moins SessionPriceLimitMin et SessionPriceLimitMax (parce que ce sont, d'après ce que j'ai compris, les prix d'ouverture utilisés dans les ordres au marché). L'ouverture ne traduit-elle pas... Je prescris par exemple :

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()) ; - à partir de votre EA

Je n'obtiens que des prix Ask dans le journal

Dossiers :
y2a4cgbfjw.png  63 kb
 

Veuillez m'aider à écrire un morceau de code qui déterminerait correctement la date de la dernière barre avec n'importe quel décalage dans n'importe quelle TF, avec une précision par rapport à la TF actuelle.

int              N_bar=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_H1,0));//номер текущего бара
datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,N_bar+1);//только для минуток и то может быть не корректно!

Print("StopDt_Shift=",TimeToString(StopDt,TIME_DATE|TIME_MINUTES));

Ce code fonctionne généralement, mais seulement si l'heure de début de la barre actuelle coïncide avec la barre réelle (arrondie à la minute), car mon graphique actuel est M1. Et s'il ne coïncide pas, diverses mésaventures se produisent, en fonction des différentes TF. Par exemple, j'ai besoin de connaître la date de début de la dernière barre M1 de la dernière heure, si c'était 12 heures, pas de problème, l'heure sera 12:59, mais si c'était 13 heures, ce sera 13:58 parce que la barre horaire s'est ouverte à 14:05 et non à 14:00 et la fonctioniBarShift a renvoyé la barre la plus proche de 14:00, c'est-à-dire 13:59.

Ajouté : fait ceci, il semble fonctionner

datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,_Shift-1),iTime(Symbol(),PERIOD_CURRENT,0)));
 
Александр Юрин:

Courtier Otkritie, RTS index futures, je suppose qu'il devrait diffuser au moins SessionPriceLimitMin et SessionPriceLimitMax (comme je comprends qu'ils sont utilisés dans les ordres au marché par les prix d'ouverture ). L'ouverture ne traduit-elle pas... Je prescris par exemple :

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()) ; - à partir de votre EA

Je n'obtiens que des prix Ask dans le journal

Le serveur est-il réel ou une démo ?