MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 420

 
igrok333:
変数の種類を返す関数はありますか?

例えば、こう書きますね。

int a=10;

と書くと

functia(a);

と表示され、INT!

:)
string functia(int a) { return "INT!"; }.// 突然
string functia(double a) { return "DABLE!"; }.// また、不意に
 
igrok333:
変数型を返す関数はありますか?

例えば、こう書きますね。

int a=10;

と書くと

functia(a);

と表示され、INT!

:)

ヘルプより

void OnStart() 
  { 
//---  
   CTrade trade;    
   double d_value=M_PI; 
   int i_value=INT_MAX; 
   Print("d_value: type=",GetTypeName(d_value), ",   value=", d_value); 
   Print("i_value: type=",GetTypeName(i_value), ",   value=", i_value); 
   Print("trade: type=",GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template<typename T> 
string GetTypeName(const T &t) 
  { 
//--- вернем тип в виде строки 
   return(typename(T)); 
//--- 
  }
 
WinProject:

もっとシンプルでいい。表示ボタンを作成する(または既存のボタンのいずれかを使用する)。さらに追い打ちをかけるように、すべてのTFに必要なオブジェクトの可視化フラグが設定されています。ボタンを離すと、全てのオブジェクトが全てのTFに表示プロパティを設定する(必要な場合は必要な分だけ)。削除/再配置の必要はありません。この操作の後、チャートを再描画するだけです。

オブジェクトプロパティOBJPROP_TIMEFRAMES

 

インジケーターのデータを配列に取り込む方法を教えてください。すなわち、配列を宣言する必要があることは明らかです。

double num_array[];

この先どうすればいいのか、よくわからない...。

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // インデックス [0] の配列は MA と同じだが、インデックスを [1] にすると num_array[1] は等しいことが判明する

num_array[0]と同じデータをインジケータから取得します。これではいけないと思います。配列は順次埋めていく必要があります。1日を24に分割することしか考えていない

時間、2次元の配列を宣言し、各時間に独自の文字列でインデックスを割り当てるなど......。

もしかしたら、もっとシンプルな方法や、面倒くさくない方法があるのでは?

 
Corvin85:

インジケーターのデータを配列に取り込む方法を教えてください。すなわち、配列を宣言する必要があることは明らかです。

double num_array[];

この先どうすればいいのか、よくわからない...。

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // インデックス [0] の配列は MA と同じだが、インデックスを [1] にすると num_array[1] は等しいことが判明する

num_array[0]と同じデータをインジケータから取得します。これではいけないと思います。配列は順次埋めていく必要があります。1日を24に分割することしか考えていない

時間、2次元の配列を宣言し、各時間に独自の文字列でインデックスを割り当てるなど......。

もしかしたら、もっとシンプルな方法や、面倒くさくない方法があるのでは?


私はこのように考えています。

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
 
Vladislav Andruschenko:

私はこのように考えています。

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
ああ、ArrayResizeで 配列の最大インデックス数を設定し、ループで実行すればいいことがわかりました。ありがとうございました。しかし、その後、質問があります。すべてのインデックスがインジケータからのデータで満たされたとき、それらはArrayFreeを介して クリアされるべきですか、それはそれ自身を書き換えますか? または24倍後にすべてがすべてで停止しますか?馬鹿な質問で申し訳ないのですが、配列は機能が未知数でダークホースみたいなものです。
 
Corvin85:
あ、ArrayResizeで 配列のインデックスの最大数を設定してループを回せばいいんですね。ありがとうございました。しかし、その後、質問があります。すべてのインデックスがインジケータからのデータで満たされたとき、私はArrayFreeを介して それらをクリアする必要がありますか、それは自分自身を書き換えます? または24日後にすべてが停止します?ぶしつけな質問で申し訳ないのですが、配列は機能が未知数でダークホースみたいなものなんです。
まあ、どんな目的を追求するかによりますが。配列に 過去24本のバーのmAデータを入れるコードを書きました。今後も継続的に更新していく予定です。
 
Corvin85:
あ、ArrayResizeで 配列のインデックスの最大数を設定してループを回せばいいんですね。ありがとうございました。しかし、その後、質問があります。すべてのインデックスがインジケータからのデータで満たされたとき、私はArrayFreeを介して それらをクリアする必要がありますか、それは自分自身を書き換えます? または24日後にすべてが停止します?ぶしつけな質問で申し訳ないのですが、配列は機能が未知数でダークホースみたいなものなんです。

配列=インデックス参照に便利なように一列に並べられた単純な変数の集合。インデックスとは、ループを構成するために、配列の項目を 番号でアクセスするための整数型変数です。インデックス=数値カウンター。ArrayFree = 配列の破壊 - ボロ屋の上をブルドーザーで移動するようなものです。しかし、ArrayResizeで 再び復元することができます。 さて ArrayResizeは住宅用配列の周りにある柵 です。 うちのはここだけど、よそ者は柵の向こう、入るのは禁止だよ。それぞれの家に何度も入ることができる(配列の要素に 新しい値を代入する)。 配列は非常にシンプルで、いろいろな用途に使える便利なものです。そして、アレイを怖がる人たち、つまり、それらの ...だから、しっかり把握したほうがいいんです。

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
次のようなスクリプトを実行してみてください - そして練習してください
 
Artyom Trishkin:

参考文献より

シーピー