Questions d'un "mannequin - page 244

 
paladin800:
J'écris un Expert Advisor multi-devises où dans les paramètres d'entrée je définis le nom de l'instrument, comme la chaîne Symbol0="EURUSD". Si j'écris le mauvais nom, l'échange ne se fait pas. Ma question est la suivante : existe-t-il une telle fonction, qui permettrait de comparer les noms des instruments avec les instruments proposés par le courtier ?
Non. Vous devez le vérifier vous-même.
 
paladin800: Question : existe-t-il une fonction qui permettrait de comparer le nom de l'instrument avec les instruments fournis par le courtier.
La question est de savoir ce que vous voulez voir dans la sortie. Fondamentalement, toute fonction standard utilisant un nom symbolique d'un instrument comme l'un de ses paramètres, "compare" le nom spécifié par l'utilisateur avec les noms des instruments du courtier. Et il existe même une erreur ERR_MARKET_UNKNOWN_SYMBOL (4301) pour ces fonctions.
 
Yedelkin:
La question est de savoir ce que vous voulez voir dans la sortie. Fondamentalement, toute fonction standard qui utilise un nom d'instrument symbolique comme l'un de ses paramètres, "compare" le nom spécifié par l'utilisateur avec les noms d'instruments du courtier. Et il existe même une erreur ERR_MARKET_UNKNOWN_SYMBOL (4301) pour ces fonctions.
En gros, oui, lorsque la poignée de l'indicateur est ensuite recherchée pour un symbole qui n'existe pas, l'erreur est générée. En général, à ce stade, je peux produire un message d'erreur dans les paramètres d'entrée de l'alerte.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
paladin800 En fait, oui, lorsque la poignée de l'indicateur est ensuite recherchée pour un symbole qui n'existe pas, une erreur est générée. En général, à ce stade, je peux produire un message d'erreur dans les paramètres d'entrée de l'alerte.
Vous pouvez écrire votre propre mini-fonction, qui vérifiera l'exactitude des paramètres de chaîne. Utilisez quelque chose comme SymbolSelect(...,true) ou SymbolInfoString(...,SYMBOL_DESCRIPTION, ...) avec vérification des erreurs. C'est-à-dire, mettre en place un contrôle "indépendant", comme l'a dit Carlson.
 
Bonjour à tous.

J'essaie de créer un indicateur de collecte de tics pour un traitement et une visualisation ultérieurs. MT5 AlpariUK Version 5.0 Build 756
L' indicateur de test imprime les valeurs actuelles BID, ASK, LAST, VOLUME, tick_volume lors du traitement onCalculate.

//+------------------------------------------------------------------+
//|                                                TickCollector.mq5 |
//|                                             Copyright 2013, MZen |
//|                                             http://www.almex.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MZen"
#property link      "http://www.almex.net"
#property version   "1.00"
#property indicator_chart_window


string   time_toprint, tick_bid, tick_ask, tick_last, tick_vol;
string   par1, par2, par3;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

            time_toprint = TimeToString(SymbolInfoInteger(_Symbol,SYMBOL_TIME),TIME_DATE|TIME_SECONDS);
            tick_bid = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            tick_ask = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);            
            tick_last = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_LAST)); 
            tick_vol = IntegerToString(SymbolInfoInteger(_Symbol,SYMBOL_VOLUME));
            
            par1 = IntegerToString(tick_volume[(rates_total-1)]);
            
            Print("Server Time=",time_toprint,"   ","Bid=",tick_bid,"   ","Ask=",tick_ask,"   Price=",tick_last,"  Volume=",tick_vol,"  Tick volume=",par1);
           
//--- return value of prev_calculated for next call
   return(rates_total);
  }

//+------------------------------------------------------------------+

Résultat :

2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=5
2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=4
2013.03.03 03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
201303.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=2
2013.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=1
2013.03.03 03 19:45:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03.03 19:45:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03 19:45:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:59 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1800000 Tick volume=53
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1700000 Tick volume=52
201303.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:53 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:57 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=500000 Tick volume=50
201303.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=400000 Tick volume=49
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
201303.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=200000 Tick volume=47
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
201303.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Price=93.68000000 Volume=1000000 Tick volume=45
2013.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Price=93.680000 Volume=1000000 Tick volume=45
2013.0303 19:45:48 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:52 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=1000000 Tick volume=44

Il semble que onCalculate soit déclenché deux fois par tick la plupart du temps, et tick_volume n'a rien à voir avec le volume du tick. Il est remis à 1 lorsque vous passez à une nouvelle période. La même valeur peut être répétée 1, 2, 3 fois.

Pour vérifier, j'ai lancé l'EA qui imprime les ticks et son propre indicateur en même temps.

Résultat :

2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03 19:51:56 93.684 93.677
2013.03.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Price=93.67700000 Volume=1000000 Tick volume=2
2013.0303 19:51:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Price=93.67700000 Volume=1000000 Tick volume=2
2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03.03 19:51:56 93.683 93.674
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=201303.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
201303.03.03 19:51:55 Ticks (USDJPY,M1) 2013.03.03 19:51:55 93. 682 93.674
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:51:51 Ticks (USDJPY,M1) 2013.03.03.03 19:51:51 93.680 93.670
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:50 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:50 93.678 93.669
2013.03.03 19:51:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:54 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3500000 Tick volume=35
201303.03.03 19:51:49 Ticks (USDJPY,M1) 2013.03.03 19:51:49 93. 678 93.669
2013.03.03 19:51:49 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:49 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:46 Ticks (USDJPY,M1) 2013.03.03.03 19:51:46 93.680 93.672
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Price=93.67200000 Volume=1000000 Tick volume=33
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Price=93.67200000 Volume=1000000 Tick volume=33
201303.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 19:51:44 93.681 93.672
2013.03.03 19:51:44 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03 03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:44 93.683 93.673
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=31
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=30
2013.03.03.03 19:51:42 Ticks (USDJPY,M1) 2013.03.03 19:51:42 93.683 93.674
2013.03.0303 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:41 Ticks (USDJPY,M1) 2013.03.03.03 19:51:41 93.683 93.673
2013.03.03 19:51:41 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
201303.03.03 19:51:41 GMT TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
2013.03.0303 03 19:51:40 Ticks (USDJPY,M1) 2013.03.03 19:51:40 93.682 93.673
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:39 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:39 93.681 93.671
2013.03.03 19:51:39 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:43 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=40000 Tick volume=27
201303.03.03 19:51:38 Ticks (USDJPY,M1) 2013.03.03 19:51:38 93. 681 93.671
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=6000000 Tick volume=26
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=60000 Tick volume=26
2013.03.03 19:51:37 Ticks (USDJPY,M1) 2013.03.03.03 19:51:37 93.682 93.674
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=1000000 Tick volume=25
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=1000000 Tick volume=24

Question : pourquoi la coche est-elle dupliquée et comment puis-je m'en débarrasser ?

Si onCalculate est déclenché non seulement par un changement de prix, mais aussi pour d'autres raisons, alors comment pouvons-nous déterminer la raison du passage à opCalculate ? Et où sont les raisons du déclenchement de onCalculate ?

Qu'est-ce que je fais de travers avec le volume Tick ?

Est-ce que j'ai manqué quelque chose ?

Une autre question : le temps sur mon ordinateur est assez long. La différence en deux jours était de 4 secondes. Dans quelle direction chercher une solution ?

Merci à tous.

 

Une autre question pour le public estimé :


Dans la documentation sur https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

États :

SYMBOL_BID Bid - meilleure offre de vente

SYMBOL_ASK Demander - meilleure offre d'achat


Pour moi, l'offre est la meilleure offre d'achat et la demande est la meilleure offre de vente.

Voici ce que ServiceDesk a répondu
Équipe de soutien 2013.03.04 07:39


Cela signifie que


SYMBOL_BID Bid - la meilleure offre de vente (le meilleur prix auquel vous pouvez vendre)

SYMBOL_ASK Ask - meilleure offre d'achat (le meilleur prix que vous pouvez obtenir en ce moment)




Voici une discussion : qui a raison ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
MZen:

Une autre question pour le public estimé :


Dans la documentation sur https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

États :

SYMBOL_BID Bid - meilleure offre de vente

SYMBOL_ASK Demander - meilleure offre d'achat


Pour moi, l'offre est la meilleure offre d'achat et la demande est la meilleure offre de vente.

Voici ce que ServiceDesk a répondu
Équipe de soutien 2013.03.04 07:39
Cela signifie

MZen

SYMBOL_BID Bid - la meilleure offre de vente (le meilleur prix auquel vous pouvez vendre).

SYMBOL_ASK Ask - la meilleure offre d'achat (le meilleur prix que vous pouvez obtenir en ce moment)




Je discute : qui a raison ?

Jeu de mots - dans les deux situations, il y a un acheteur, dans les deux situations, il y a un vendeur, selon la position à laquelle on se place.
 
lazarev-d-m:
Jeu de mots - dans les deux situations, il y a un acheteur, dans les deux situations, il y a un vendeur, selon la position à laquelle on se place.

Ahhhh, je l'ai !

Quand je demande "Achetez chez moi", c'est une offre d'achat !

Et quand je dis "Vendez-moi", c'est une offre de vente !

LOL !

 

Je commence à apprendre la POO. Question pour les experts - est-il possible de mettre la classe à la fin du code de l'Expert Advisor (ainsi que les fonctions),

int OnInit()
  {
   return(0);
  }
//---
void OnTick()
  {
   ...
  }
//---
void OnDeinit(const int reason)
  {
   ...
  }
//---
   class CName 
     {
      ...
     };

et non pour relier la classe au code comme :

#include <Trade\Trade.mqh>
 
paladin800:

Je commence à apprendre la POO. Question pour les experts - est-il possible de mettre la classe à la fin du code de l'Expert Advisor (ainsi que les fonctions),

et non pour relier la classe au code comme :

Ce ne sera pas une classe mais juste une fonction, déplacée en dehors du code du programme (d'ailleurs, je l'utilise à la place de la POO, je la trouve plus pratique).