Экспорт "Обзор рынка" - "Символы", или списка всех доступных символов, а также "Спецификации" каждого символа в Excel - страница 2

 
В смысле прочитайте. Цифра - номер в словаре. 
 
Алексей Тарабанов:
Автор - Рустам (XRust), 2012 год. 

можете подсказать какая именно его публикация (индикатор, советник или что еще) имеет тот пример кода который Вы привели в предыдущем посте? Перерыл несколько аккакунтов Рустама и не нашел откуда этот кусок кода?

Получается нет функции, которая возвращает информацию о типе символа (тип рынка), как приведено на картинке выше? Например, чтоб возвращало FOREX для форекс, а CFD для акций. По крайней мере я прошелся по всем функциям Справочника MQL5 "Получение рыночной информации" и не нашел.
 
Алексей Тарабанов:

Сначала сформируйте массив символов, после - превратите его в кортеж характеристик, затем - экспортируйте в таблицу. 

Вот первый этап: 

а то получается по Вашему описанию я должен сначала создать массив символов. Но ведь я пишу его и так в CSV используя функции "Получение рыночной информации" и построчно заполняю созданную таблицу.

Вот теперь например нужно значение Calculation (Способ расчетов) из Спецификации Символа. Для форекс пары в Спецификации любого символа в терминале там сейчас forex, для акций CFD. Но так чтоб функция возвращала именно "forex" или "CFD" - не могу найти такую функцию.



пытался так

int MarketType=SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE);

но это возвращает только цифру. Я так понял каждая цифра это определенный тип (рынок) символа. Я так понял посмотрев на ENUM_SYMBOL_CALC_MODE, там первое SYMBOL_CALC_MODE_FOREX, второе SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE и т.д. Возможно я не правильно понял. Как получить именно вот такой текст о типе (рынке) символа?

Дело в том что в SymbolInfoString() такой информации не нашел.
 
Alexey Kolybelnikov:

а то получается по Вашему описанию я должен сначала создать массив символов. Но ведь я пишу его и так в CSV используя функции "Получение рыночной информации" и построчно заполняю созданную таблицу.

Вот теперь например нужно значение Calculation (Способ расчетов) из Спецификации Символа. Для форекс пары в Спецификации любого символа в терминале там сейчас forex, для акций CFD. Но так чтоб функция возвращала именно "forex" или "CFD" - не могу найти такую функцию.



пытался так

но это возвращает только цифру. Я так понял каждая цифра это определенный тип (рынок) символа. Я так понял посмотрев на ENUM_SYMBOL_CALC_MODE, там первое SYMBOL_CALC_MODE_FOREX, второе SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE и т.д. Возможно я не правильно понял. Как получить именно вот такой текст о типе (рынке) символа?

Дело в том что в SymbolInfoString() такой информации не нашел.

есть замечательная фича (не совсем функция) EnumToString :-) и есть оператор языка switch, комбинируя их можно получить требуемое.. по заранее известным константам отдать строковые константы, по прочим вырезать "SYMBOL_CALC_MODE_" и получить в остатке FOREX,FOREX_NO_LEVERAGE и так далее

 
Maxim Kuznetsov:

есть замечательная фича (не совсем функция) EnumToString :-) и есть оператор языка switch, комбинируя их можно получить требуемое.. по заранее известным константам отдать строковые константы, по прочим вырезать "SYMBOL_CALC_MODE_" и получить в остатке FOREX,FOREX_NO_LEVERAGE и так далее

я не могу понять, почему в MQL5 для того чтоб взять обычное значение из спецификации нужно делать непонятные танцы с бубном?! Это же просто значение в таблице по каждому символу. Для любой другой информации можно получить значение, а для Calculation (Способ расчетов) из Спецификации Символа такой функции (возможности) нет?! Я не могу в это поверить ((( Ведь этому полю в Спецификации должна быть обычная функция которая вернет значение этого поля, разве нет?!
 
Alexey Kolybelnikov:
я не могу понять, почему в MQL5 для того чтоб взять обычное значение из спецификации нужно делать непонятные танцы с бубном?! Это же просто значение в таблице по каждому символу. Для любой другой информации можно получить значение, а для Calculation (Способ расчетов) из Спецификации Символа такой функции (возможности) нет?! Я не могу в это поверить ((( Ведь этому полю в Спецификации должна быть обычная функция которая вернет значение этого поля, разве нет?!

даже если делаю так

long MarketType; int CalcMethod=SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE,MarketType);
и потом записываю в CSV значение MarketType, переменная возвращает цифру ((( Пожалуйста помогите с этой загадкой Спецификации Символа
 
Alexey Kolybelnikov:

Пожалуйста помогите с этой загадкой Спецификации Символа

Загадка не в спецификации. Разберитесь, что такое перечисление.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
  • www.mql5.com
После объявления перечисления появляется новый целочисленный 4-байтовый тип данных. Объявление нового типа данных позволяет компилятору строго контролировать типы передаваемых параметров, так как  перечисление вводит новые именованные константы. В приведенном примере именованная константа January имеет значение 0, February имеет значение 1...
 
Andrey Khatimlianskii:

Загадка не в спецификации. Разберитесь, что такое перечисление.

Я правильно понял? - получить "текст" как в Спецификации не получится. Придется создавать список с названиями из enum и присваивать каждому номеру название из этого перечисления? Например, "если 0 то это forex, если 1 то это no-leverage-forex"  и т.д. в таком же духе?

 
Alexey Kolybelnikov:

Я правильно понял? - получить "текст" как в Спецификации не получится. Придется создавать список с названиями из enum и присваивать каждому номеру название из этого перечисления? Например, "если 0 то это forex, если 1 то это no-leverage-forex"  и т.д. в таком же духе?

Да, или StringSubString + EnumToString, как советовали выше.

 

Даже если сделать как в одном из примеров здесь https://www.mql5.com/en/forum/333100

string SymbolCalcMode(int Mode)
 {
 switch(Mode)
  {
  case 0: return("Forex");
  case 1: return("Forex(no leverage)");
  case 2: return("Futures");
  case 3: return("CFD");
  default: return("Unknown Margin Calc.");
  }
 return("tried");
 }
string SymbolCalcMode(int Mode)
 {
 switch(Mode)
  {
  case 0: return("Forex");
  case 1: return("Forex(no leverage)");
  case 2: return("Futures");
  case 3: return("CFD");
  case 4: return("CFD Index");
  case 5: return("CFD Leverage");
  case 6: return("Exch Stocks");
  case 7: return("Exch Futures");
  case 8: return("Exch Future Forts");
  case 9: return("Exch Bonds");
  case 10: return("Exch Stocks MoEx");
  case 11: return("Exch Bonds MoEx");
  case 12: return("Serv Collateral");
  default: return("Unknown Margin Calc.");
  }
 return("tried");
 }

Все равно получаем не то что показывает в Спецификации брокер.

Margin calculation modes
Margin calculation modes
  • 2020.02.19
  • www.mql5.com
This seem like it was easy to accomplish by laying out all the different kinds of the margin assessments for MT4 that could be called by market inf...