Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 449

 
Juer:

Как можно получить значение поля переменной типа структура, зная порядковый номер поля в этой структуре.

Я знаю, что в поле #1 (то есть double) изменилось значение. Как мне по порядковому номеру найти это поле?

Или подскажите, как можно получить поле структуры, зная его стринговое имя?

struct test
  {
   int num;
   double dval;
   string sval;			
  };

вот у меня есть значение 

string field="dval";

Я хочу запросить именно это поле структуры.

 
Juer:

Или подскажите, как можно получить поле структуры, зная его стринговое имя?

вот у меня есть значение 

string field="dval";

Я хочу запросить именно это поле структуры.

Структуры и, классы и интерфейсы

 

Спасибо, а не подскажете, где там ответ на мой вопрос?

 
Juer:

Спасибо, а не подскажете, где там ответ на мой вопрос?

struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   uchar  slippage;     // значение допустимого проскальзывания
  };
//--- создали и проинициализировали переменную типа trade_settings
trade_settings my_set={0.0,0.0,5};  
if (input_TP>0) my_set.take=input_TP;

В чем проблема, там есть примеры присваивания и получение значение из структур.

struct test
  {
   int num;
   double dval;
   string sval;                 
  };
test Test;

//...

string field=DoubleToString(Test.dval);

Вам всего навсего нужно еще преобразовать double в string. DoubleToString

 
Konstantin Nikitin:

В чем проблема, там есть примеры присваивания и получение значение из структур.

Вам всего навсего нужно еще преобразовать double в string. DoubleToString

Что вы написали и как это решает мою задачу? Непонятно.

И это всего лишь пример был. Моя структура имеет несколько полей разных типов. И я не знаю тип поля, знаю только имя поля.

У меня есть имя стринговое поля структуры. Хочу, зная это имя, запросить соответствующее поле структуры, т.е. получить значение в этом поле.

 

разбаловались, понимаешь, на джаве)

вам это надо
https://www.mql5.com/ru/code/13663

JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • голосов: 34
  • 2015.08.18
  • o_o
  • www.mql5.com
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++. Практичный пример: авторизация на сайте и парсинг ответа Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL. В протокол добавлены функции Escape / Unescape...
 
Juer:

Что вы написали и как это решает мою задачу? Непонятно.

И это всего лишь пример был. Моя структура имеет несколько полей разных типов. И я не знаю тип поля, знаю только имя поля.

У меня есть имя стринговое поля структуры. Хочу, зная это имя, запросить соответствующее поле структуры, т.е. получить значение в этом поле.

Посмотрите сюда, может это то что надо?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Можно ли программно определить тип пиременной ?

Anatoli Kazharski, 2015.06.17 17:07

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double d_value =0.0;
   int    i_value =0;
   Print("d_value: type=",GetTypeName(d_value));
   Print("i_value: type=",GetTypeName(i_value));
  }
//+------------------------------------------------------------------+
//| Возвращает в строковом виде тип                                  |
//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
  {
   return(typename(T));
  }

То-есть прежде чем читать значение переменной получаем её тип и затем читаем значение в переменную соответствующего типа.
 

Хотел бы спросить?

https://book.mql4.com/ru/build/conditions

Функция вычисляет торговые критерии. Функция возвращает следующие значения:

10 - сработал торговый критерий для открытия рыночного ордера Buy;
20 - сработал торговый критерий для открытия рыночного ордера Sell; 
11 - сработал торговый критерий для закрытия рыночного ордера Buy;
21 - сработал торговый критерий для закрытия рыночного ордера Sell;

   if(M_0>S_0 && -M_0>Opn && St_M_0>St_S_0 && St_S_0<St_min)
      return(10);                      // Открытие Buy    
   if(M_0<S_0 &&  M_0>Opn && St_M_0<St_S_0 && St_S_0>St_max)
      return(20);                      // Открытие Sell 
   if(M_0<S_0 &&  M_0>Cls && St_M_0<St_S_0 && St_S_0>St_max)
      return(11);                      // Закрытие Buy    
   if(M_0>S_0 && -M_0>Cls && St_M_0>St_S_0 && St_S_0<St_min)
      return(21);                      // Закрытие Sell  
return 10 20 11 21 возвращаемые значения

почему так зациклена программа на возвращаемых значениях для чего так сделано?

 
Alexey Viktorov:

Посмотрите сюда, может это то что надо?


То-есть прежде чем читать значение переменной получаем её тип и затем читаем значение в переменную соответствующего типа.

А у меня несколько полей однотипных. Вряд ли поможет.

Я нашёл вот это https://www.mql5.com/ru/code/16282

Решил передавать не имя поля, а его адрес (смещение) в байтах.

TypeToBytes
TypeToBytes
  • голосов: 22
  • 2016.09.13
  • fxsaber
  • www.mql5.com
Эта кроссплатформенная библиотека позволяет удобно осуществлять побайтовую работу со структурами, массивами и стандартными типами данных. Возможности Побайтовое сравнение (== и !=) между собой структур, массивов и стандартных типов данных (в MQL по умолчанию отсутствуют операторы сравнения структур) в любом сочетании. Определение байтового...
 
Seric29:

Хотел бы спросить?

https://book.mql4.com/ru/build/conditions

Функция вычисляет торговые критерии. Функция возвращает следующие значения:

10 - сработал торговый критерий для открытия рыночного ордера Buy;
20 - сработал торговый критерий для открытия рыночного ордера Sell; 
11 - сработал торговый критерий для закрытия рыночного ордера Buy;
21 - сработал торговый критерий для закрытия рыночного ордера Sell;

почему так зациклена программа на возвращаемых значениях для чего так сделано?

Цикл - многократный повтор. Здесь же разветвление. После срабатывания первого условия выполняется оператор return и выполнение программы прекращается. Если если условие окажется ложным, проверяется второе условие и так далее... Если все 4 условия будут ложными - будет выполняться далее

Причина обращения: