Вопросы от "чайника" - страница 244

 
paladin800:
Пишу мультивалютный советник, где во входных параметрах задаётся имя инструмента, типа string Symbol0="EURUSD". Если ошибочно напишу название, то торговля не идёт. Вопрос: есть ли такая ф-ция, которая бы сравнивала названия инструмента с инструментами которые предоставляет брокер.
Нет.Надо проверять самостоятельно.
 
paladin800: Вопрос: есть ли такая ф-ция, которая бы сравнивала названия инструмента с инструментами которые предоставляет брокер.  
Вопрос в том, что Вы хотите видеть на выходе. В принципе, любая стандартная функция, использующая в качестве одного из своих параметров символьное имя инструмента, "сравнивает" указанное пользователем название с названиями инструментов брокера. И для таких функций даже предусмотрена ошибка ERR_MARKET_UNKNOWN_SYMBOL (4301).
 
Yedelkin:
Вопрос в том, что Вы хотите видеть на выходе. В принципе, любая стандартная функция, использующая в качестве одного из своих параметров символьное имя инструмента, "сравнивает" указанное пользователем название с названиями инструментов брокера. И для таких функций даже предусмотрена ошибка ERR_MARKET_UNKNOWN_SYMBOL (4301).
В принципе да, когда потом ищется хендл индикатора по не существующему символу, то выдается ошибка. В общем-то в этот момент могу вывести в алерт сообщение об ошибке во входных параметрах.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
paladin800 В принципе да, когда потом ищется хендл индикатора по не существующему символу, то выдается ошибка. В общем-то в этот момент могу вывести в алерт сообщение об ошибке во входных параметрах.  
 Можно и свою мини-функцию написать, чтоб сразу проверяла правильность указания входных string-параметров. Использовать в ней что-то типа SymbolSelect(...,true) или SymbolInfoString(...,SYMBOL_DESCRIPTION, ...) с проверкой ошибок. Т.е. реализовать "самостоятельную" проверку, как сказал Карлсон.
 
Всем добрый день.

Я пытаюсь сделать индикатор сбора тиков для последующей обработки и визуализации. MT5 AlpariUK Version 5.0 Build 756
Тестовый индикатор при обработке onCalculate печатает значения текущих BID, ASK, LAST, VOLUME, tick_volume.

//+------------------------------------------------------------------+
//|                                                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);
  }

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

Результат:

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.68000000  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.68000000  Volume=1000000  Tick volume=4
2013.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: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
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=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 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: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
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: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
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=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
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=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
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.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.68000000  Volume=1000000  Tick volume=45
2013.03.03 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

Выглядит так, что onCalculate большую часть времени срабатывает дважды на один тик, а tick_volume не имеет ничего общего с объемом тика. Он сбрасывается в 1 при переходе на новый период. Одно и то же значение может повторяться по 1, 2, 3 раза.

Для проверки запустил одновременно ЕА, который печатает тики и свой индикатор. 

Результат:

2013.03.03 19:51:56    Ticks (USDJPY,M1)    2013.03.03 19:51:56   93.684   93.677
2013.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.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.03.03 19:51:56    Ticks (USDJPY,M1)    2013.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=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: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    Ticks (USDJPY,M1)    2013.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 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
2013.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    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 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
2013.03.03 19:51:44    Ticks (USDJPY,M1)    2013.03.03 19:51:44   93.681   93.672
2013.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    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 19:51:44   93.683   93.673
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=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 19:51:42    Ticks (USDJPY,M1)    2013.03.03 19:51:42   93.683   93.674
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: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 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
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
2013.03.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 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=4000000  Tick volume=27
2013.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=6000000  Tick volume=26
2013.03.03 19:51:37    Ticks (USDJPY,M1)    2013.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

Вопрос: почему тик дублируется и как от этого избавиться?

Если onCalculate срабатывает не только при изменении  цены, но и по каким-то другим причинам, то как определить причину перехода на onCalculatе  ? И где описаны все причины срабатывания onCalculatе ?

Что я делаю не так с Tick volume?

Я что-то упустил?

Еще один вопрос - время на моем компутере отстает  довольно сильно. Разница за двое суток составила 4 секунды. В каком направлении искать решение?

Всем спасибо.

 

Еще один вопрос к уважаемой публике:


В документации на странице https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

сказано:

SYMBOL_BID  Bid - лучшее предложение на продажу

SYMBOL_ASK Ask - лучшее предложение на покупку


В моем понимании Bid - лучшее предложение на покупку, а Ask - лучшее предложение на продажу.

Вот что ответил ServiceDesk
Support Team 2013.03.04 07:39


Это означает


SYMBOL_BID  Bid - лучшее предложение на продажу (лучшая цена, по который Вы  можете продать в данный момент)

SYMBOL_ASK Ask - лучшее предложение на покупку  (лучшая цена, по который Вы  можете купить в данный момент)




Выношу на обсуждение: кто прав?

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

Еще один вопрос к уважаемой публике:


В документации на странице https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

сказано:

SYMBOL_BID  Bid - лучшее предложение на продажу

SYMBOL_ASK Ask - лучшее предложение на покупку


В моем понимании Bid - лучшее предложение на покупку, а Ask - лучшее предложение на продажу.

Вот что ответил ServiceDesk
Support Team 2013.03.04 07:39
Это означает

MZen

SYMBOL_BID  Bid - лучшее предложение на продажу (лучшая цена, по который Вы  можете продать в данный момент)

SYMBOL_ASK Ask - лучшее предложение на покупку  (лучшая цена, по который Вы  можете купить в данный момент)




Выношу на обсуждение: кто прав?

Игра слов - в обоих ситуациях есть покупатель, в обоих ситуациях есть продавец, смотря с какой позиции рассматривать
 
lazarev-d-m:
Игра слов - в обоих ситуациях есть покупатель, в обоих ситуациях есть продавец, смотря с какой позиции рассматривать

А-ааа, понял!

Когда я прошу "Купите у меня" - это предложение на покупку!

А когда я говорю "Продайте мне" - то это предложение на продажу!

LOL!

 

Начинаю осваивать ООП. Вопрос к знатокам - можно ли поместить класс в самом конце кода эксперта (также как и функции),

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

а не подключать класс к коду как:

#include <Trade\Trade.mqh>
 
paladin800:

Начинаю осваивать ООП. Вопрос к знатокам - можно ли поместить класс в самом конце кода эксперта (также как и функции),

а не подключать класс к коду как:

Это будет по идее не класс, а просто функция, вынесенная за код программы(кстати я им пользуюсь вместо ООП, по мне так удобнее)