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

何を書いて、それが私の問題をどう解決してくれるのか?理解できない。

そして、これはほんの一例です。私の構造体には、異なるタイプのフィールドがいくつかあります。しかも、フィールドタイプはわからず、フィールド名しかわかりません。

構造体のフィールド名を文字列で指定しています。この名前を知っていれば,構造体の対応するフィールドを要求できる,つまり,このフィールドの値を取得できるようにしたい.

 

javaでネタバレしてるじゃん(笑)

これが必要です。
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:

何を書いて、それが私の問題をどう解決してくれるのか?はっきりしないんです。

というのは、あくまで一例です。私の構造体には、異なるタイプのフィールドがいくつかあります。しかも、フィールドタイプはわからず、フィールド名しかわかりません。

構造体のフィールド名を文字列で指定しています。この名前を知っていれば,構造体の対応するフィールドに問い合わせる,つまり,このフィールドの値を取得したい.

ほら、これが私に必要なものなのかも?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

ピラミッド型はプログラムで定義できますか?

アナトーリ・カザルスキー さん 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- 成行買い注文を開始するための取引基準が発動されました
20- 売りの 注文を出すための 取引基準が発生しました。
11- 成行注文を決済するための 取引基準 買い 注文がトリガーされた。
21- 売りの成行注文を決済するための 取引基準が発生しました。

   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- 成行買い注文を開始するための取引基準が発動されました
20- 売りの 注文を出すための 取引基準が発生しました。
11- 成行買い 注文を決済するための 取引基準が発生します。
21- 売りの成行注文を決済するための 取引基準が発生しました。

なぜプログラムは戻り値に縛られているのか?

このサイクルは何度も繰り返されます。ここにも分岐があります。最初の条件が成立すると、演算子リターンが実行され、プログラムの実行が 停止します。偽の場合は、2番目の条件をチェックし、以下同様とする。4つの条件すべてが偽の場合、次のように実行されます。