"ダミー "からの質問 - ページ 86 1...798081828384858687888990919293...277 新しいコメント x572intraday 2011.11.04 06:39 #851 レナット 実践的というより、理論的な質問でしたね。迷子にならないように、iFractalsのヘルプにある例を参考にさせていただきます。確かにそこにインジケーターがあるのですが、ここではスクリプトによるグラフィックレイアウトの計算一本に作業を簡略化してみましょう。例えば、歴史全体(またはフラクタルがたくさんある中間の時間枠の相当部分)のトップサイドのすべてのフラクタルバーの時間を調べることを意図しているとします。FrUpBuffer[shift]!=EMPTY_VALUEでループ内のCopyTimeを 1要素の深さまで繰り返し妨害するのが良いというのは正しい理解でしょうか?handle=iFractals(_Symbol,PERIOD_H4); // вызов FillArraysFromBuffers(...) // ... // прочёс буфера for(int shift=0; shift<BarsCalculated(handle); shift++) { if(FrUpBuffer[shift]!=EMPTY_VALUE) { CopyTime(_Symbol,PERIOD_H4, shift, 1, Arr); Print(Arr[0]); } } bool FillArraysFromBuffers(double &up_arrows[], int ind_handle, int amount ) { if(CopyBuffer(ind_handle,0,0,amount,up_arrows)<0) return(false); return(true); } で、CopyTime by depth of FrUpBufferで一気に履歴を食べるよりも高速に結果が得られます。handle=iFractals(_Symbol,PERIOD_H4); // вызов FillArraysFromBuffers(...) // ... // прочёс буфера for(int shift=0; shift<BarsCalculated(handle); shift++) { if(FrUpBuffer[shift]!=EMPTY_VALUE) Print(TimeUpBuffer[shift]); } bool FillArraysFromBuffers(double &up_arrows[], int ind_handle, int amount ) { if(CopyBuffer(ind_handle,0,0,amount,up_arrows)<0) return(false); else CopyTime(_Symbol,PERIOD_H4,0,amount,TimeUpBuffer); return(true); } で、同じループで同じifでフラクタルバーの時間値を表示するだけ?どちらも同じタスクで、実装が少し違うだけです。直感的には、バータイムの膨大な文字列(フラクタルも空も)を配列にコピーする方が時間とコストがかかることは理解できます。一方、CopyTimeを1要素の深さまで繰り返し引っ張るのは疑問があります。もし最初の variant の方が速いなら、それは絶対的な利益なのか、それとも遭遇するフラクタル の総数によるのか(たとえば、小さな TF ではもっとたくさんある)。 x572intraday 2011.11.05 16:53 #852 こちらhttps://www.mql5.com/ru/forum/3775/page59#comment_94865 同じ型の複数のバッファに対する宣言、リンク、初期化などの動作をループに入れることで、コードの削減と可読性・管理性の向上を図ることについて質問させていただきました。例題(クラス、構造)で回答してもらい、理解できた。今度は同じ原理で、#property型の多重代入を抑制しようとしたのです。#property indicator_label1 "FractalUp1" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_label2 "FractalDown1" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrGreen // --- #property indicator_label3 "FractalUp2" #property indicator_type3 DRAW_ARROW #property indicator_color3 clrBlue #property indicator_label4 "FractalDown2" #property indicator_type4 DRAW_ARROW #property indicator_color4 clrBlue [...]と、少なくとも2つの問題に遭遇しました。1.グローバルレベルでのForは禁止、つまりOnInit()よりも早く使うことはできないが、#propertyは他の関数より先にグローバルレベルで宣言されることが知られて いる。2.OnInit()のループ内で、インジケータにプロパティを割り当てようとした場合。// понимаю, что сочинил бред for (int i=0; i<NUMBER; i++) { #property Property_Array[i].indicator_label (string)("Fractal"+i) #property Property_Array[i].indicator_type DRAW_ARROW #property Property_Array[i].indicator_color clrArr[i] } コンパイラは '#' に悪態をつきます(予想通り):'#property' - 想定外のトークン です。 このアイデアが原理的に実現可能かどうか、またどのように実現可能なのかを教えてください。 Anatoli Kazharski 2011.11.05 18:32 #853 2次元配列の配列の宣言方法を教えてください。こんな感じ。double Buffers[6][3]={ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] }; Igor Makanu 2011.11.05 18:54 #854 tol64:2次元の配列を宣言することは可能かどうか教えてください。フィールドを配列とした構造体の配列を宣言すると、コンパイラは構造体内の動的 配列をスキップすることさえできる。struct arr{double arr_str[];}; arr buffers[6][3]; Документация по MQL5: Основы языка / Типы данных / Объект динамического массива www.mql5.com Основы языка / Типы данных / Объект динамического массива - Документация по MQL5 x572intraday 2011.11.05 18:58 #855 tol64:2次元配列の配列の宣言方法を教えてください。こんな感じ。#define DIM1_NUMBER 6 #define DIM2_NUMBER 3 struct TBuffer { string Buffer[3]; // для нагляднсти поменяем double на string }; TBuffer Buffer_Array[DIM1_NUMBER]; string prefixArr[6]={"a","b","c","d","e","f"}; int OnInit() { for (int j=0; j<DIM1_NUMBER; j++) { for (int i=0; i<DIM2_NUMBER; i++) { string t; StringConcatenate(t,prefixArr[j],i); Buffer_Array[j].Buffer[i]=t; } } Print(Buffer_Array[0].Buffer[0],", ", Buffer_Array[0].Buffer[1],", ", Buffer_Array[0].Buffer[2],"; ", Buffer_Array[1].Buffer[0],", ", Buffer_Array[1].Buffer[1],", ", Buffer_Array[1].Buffer[2],"; ", Buffer_Array[2].Buffer[0],", ", Buffer_Array[2].Buffer[1],", ", Buffer_Array[2].Buffer[2],"; ", Buffer_Array[3].Buffer[0],", ", Buffer_Array[3].Buffer[1],", ", Buffer_Array[3].Buffer[2],"; ", Buffer_Array[4].Buffer[0],", ", Buffer_Array[4].Buffer[1],", ", Buffer_Array[4].Buffer[2],"; ", Buffer_Array[5].Buffer[0],", ", Buffer_Array[5].Buffer[1],", ", Buffer_Array[5].Buffer[2] ); return(0); } [修正しました] Anatoli Kazharski 2011.11.05 19:09 #856 IgorM、 x100intradayオプションをありがとうございました。これなら大丈夫だと思うので、試してみます。 Mykola Demko 2011.11.05 19:49 #857 tol64:IgorM、 x100intradayオプションをありがとうございました。これならいけると思うので、試してみます。ちなみに、「Buffer」という名称は「_」などのなぞなぞに変えると、通話が完全にクリアになります。Buffer_Array[0]._[0] Buffer_Array[0].¦[0] Anatoli Kazharski 2011.11.05 19:58 #858 Urain:ちなみに、"Buffer "という名前は"_"などに変更することで、呼び出しは完全にクリアになります。Urain さん、ありがとうございます。また、興味深いのは追加要素です。その方が親しみやすいからです)) x572intraday 2011.11.05 20:03 #859 しかし、#propertyでこれをすべて行うにはどうしたらよいのでしょうか。- どうなんだろう...。わからない? Mykola Demko 2011.11.05 21:15 #860 x100intraday:しかし、#propertyで これをすべて行うにはどうしたらよいのでしょうか。- どうなんだろう...。わからない? デクリプト 1...798081828384858687888990919293...277 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
レナット 実践的というより、理論的な質問でしたね。
迷子にならないように、iFractalsのヘルプにある例を参考にさせていただきます。確かにそこにインジケーターがあるのですが、ここではスクリプトによるグラフィックレイアウトの計算一本に作業を簡略化してみましょう。
例えば、歴史全体(またはフラクタルがたくさんある中間の時間枠の相当部分)のトップサイドのすべてのフラクタルバーの時間を調べることを意図しているとします。FrUpBuffer[shift]!=EMPTY_VALUEでループ内のCopyTimeを 1要素の深さまで繰り返し妨害するのが良いというのは正しい理解でしょうか?
で、CopyTime by depth of FrUpBufferで一気に履歴を食べるよりも高速に結果が得られます。
で、同じループで同じifでフラクタルバーの時間値を表示するだけ?どちらも同じタスクで、実装が少し違うだけです。
直感的には、バータイムの膨大な文字列(フラクタルも空も)を配列にコピーする方が時間とコストがかかることは理解できます。一方、CopyTimeを1要素の深さまで繰り返し引っ張るのは疑問があります。
もし最初の variant の方が速いなら、それは絶対的な利益なのか、それとも遭遇するフラクタル の総数によるのか(たとえば、小さな TF ではもっとたくさんある)。
こちらhttps://www.mql5.com/ru/forum/3775/page59#comment_94865 同じ型の複数のバッファに対する宣言、リンク、初期化などの動作をループに入れることで、コードの削減と可読性・管理性の向上を図ることについて質問させていただきました。例題(クラス、構造)で回答してもらい、理解できた。
今度は同じ原理で、#property型の多重代入を抑制しようとしたのです。
と、少なくとも2つの問題に遭遇しました。
1.グローバルレベルでのForは禁止、つまりOnInit()よりも早く使うことはできないが、#propertyは他の関数より先にグローバルレベルで宣言されることが知られて いる。
2.OnInit()のループ内で、インジケータにプロパティを割り当てようとした場合。
コンパイラは '#' に悪態をつきます(予想通り):'#property' - 想定外のトークン です。このアイデアが原理的に実現可能かどうか、またどのように実現可能なのかを教えてください。
2次元配列の配列の宣言方法を教えてください。
こんな感じ。
2次元の配列を宣言することは可能かどうか教えてください。
フィールドを配列とした構造体の配列を宣言すると、コンパイラは構造体内の動的 配列をスキップすることさえできる。
2次元配列の配列の宣言方法を教えてください。
こんな感じ。
IgorM、 x100intraday
オプションをありがとうございました。これなら大丈夫だと思うので、試してみます。
IgorM、 x100intraday
オプションをありがとうございました。これならいけると思うので、試してみます。
ちなみに、「Buffer」という名称は「_」などのなぞなぞに変えると、通話が完全にクリアになります。
ちなみに、"Buffer "という名前は"_"などに変更することで、呼び出しは完全にクリアになります。
しかし、#propertyでこれをすべて行うにはどうしたらよいのでしょうか。- どうなんだろう...。
わからない?
しかし、#propertyで これをすべて行うにはどうしたらよいのでしょうか。- どうなんだろう...。
わからない?