Экспорт "Обзор рынка" - "Символы", или списка всех доступных символов, а также "Спецификации" каждого символа в 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...
Причина обращения: