Mt4 サポート終了。 - ページ 44

 
Реter Konow:

さて、教えてほしいのですが、私は課題をクリアできたでしょうか?

あなた方(ピーターも反対派も)は、間違った方向からやってきているのですタスクは両方できる !

アセンブラがやってきて、もっと効率よく、もっと少ないコンピュータ資源でできるはずだと言うだろう!」。

しかし、それに何の意味があるのでしょうか?

私の考えでは、スピードやメモリが不足したときだけ効率を考えればいいと思っています。十分な量があれば、メンテナンスや改造が容易であることがより重要です。たとえ、プログラムの速度や使用するメモリに多少の不利益があってもです。

ロシア語の名前は気になりませんが、唯一気になるのは、見た目ですぐに変数の種類がわかるように、接頭辞をつけるのに慣れていることです。また、ロシア語か英語かの識別は、大きな差はありません(1C-ロシア語が多い)。

しかし、何よりもデバッガーを自主的に拒否していることに驚きました。ただのマゾヒズムだ...。デバッガがない場合(一時期は履歴データのデバッグができなかった)、ひねったり、デバッグメッセージを出したり、ログを取ったりしなければならないのは理解できるのですが...。しかし、デバッガがあれば、それを使って作業する方がはるかに便利で効率的です !

 
George Merts:

あなた方(ピーターも反対派も)は、間違った方面からアプローチしているのですタスクは両方できる !

アセンブラがやってきて、もっと効率よく、もっと少ないコンピュータ資源でできるはずだと言うだろう!」。

しかし、それに何の意味があるのでしょうか?

私の考えでは、スピードやメモリが不足したときだけ効率を考えればいいと思っています。十分な量があれば、メンテナンスや改造が容易であることがより重要です。たとえ、プログラムの速度や使用するメモリに多少の不利益があってもです。

ロシア語の名前は気になりませんが、唯一気になるのは、見た目ですぐに変数の種類がわかるように、接頭辞をつけるのに慣れていることです。また、ロシア語か英語かの識別は、大きな差はありません(1C-ロシア語が多い)。

しかし、何よりもデバッガーを自主的に拒否していることに驚きました。ただのマゾヒズムだ...。デバッガがない場合(一時期は履歴データのデバッグができなかった)、ひねったり、デバッグメッセージを出したり、ログを取ったりしなければならないのは理解できるのですが...。しかし、デバッガがあれば、それを使って作業する方がはるかに便利で効率的です !

ジョージ デバッガーの使い方がわからなかったんだ。何のためにあるのか、知らなかったし、不思議にも思わなかった。だから、ここにはマゾヒズムがないんです。そして、もう手遅れです。
 

ピーター 課題をすり替えたんですね。あなたのソリューションは、時には必要ですが、非常にまれで、純粋にこの形 ではなく、似たようなものです。

より頻繁に別のタスク - 新しいバーの出現は、プログラムの別の場所で追跡する必要があります。したがって、シンボルとタイムフレームを関数に渡して配列で検索するのは、全く良い解決策ではありません。isNewBar関数は静的変数を持っているので、各タイムフレームのシンボルに対して関数のコピーを作成する必要があります。最後の時間枠の変数を参照で関数に渡すことが可能である。

しかし、OOPで理想的なバリアントがあります - それは、各シンボル - 時間枠のために独自のオブジェクトを作成します。

これは、isNewBar関数が全く必要ないことを考慮しなければ、何もしない状態からステレオタイプ化するだけである。

 
Dmitry Fedoseev:

ピーター 課題をすり替えたんですね。あなたのソリューションは、時には必要ですが、非常にまれで、純粋にこの形 ではなく、似たようなものです。

より頻繁に別のタスク - 新しいバーの出現は、プログラムの別の場所で追跡する必要があります。したがって、シンボルとタイムフレームを関数に渡して配列で検索するのは、全く良い解決策ではありません。isNewBar関数は静的変数を持っているので、各タイムフレームのシンボルに対して関数のコピーを作成する必要があります。最後の時間枠の変数を参照で関数に渡すことが可能である。

しかし、OOPで理想的なバリアントがあります - それは、各シンボル - 時間枠のために独自のオブジェクトを作成します。

つまり、isNewBar関数が全く必要ないことを考慮しなければ、純粋に何もしない状態から、ゴミのような状態になってしまうのです。

何も変えていないんです。ただ、私はこの課題を別の方法で解決しました。先生の論理に従えば、私は必然的にOOPの必要性に行き着くのでしょうね。しかし、どのように考えても、私のソリューションを安全に使用することができます。どの関数でも、いつでも、プログラム内のどの場所からでも、どのシンボル、どの時間枠の新しいバーイベントでも、グローバル配列にアクセスできます。

シンボルの数やタイムフレームの数は関係なく、私のソリューションでは、それらの数がシステムの負荷を増加させることはありません。新しいバーイベントがあるかどうかという配列だけを見てください。

シンボルをマーケットレポートから取得せず、Symbols[]配列に手入力すると、シンボルのリストを減らすことができます。お願いします。


追加されました。

ところで、注意していただきたいのは、New_bar()関数はもう存在しないことです。本当に不要なものとなってしまいました。あなたの言うとおりでした。

 
Реter Konow:

私の仕事は、OOPなしで、シンボルのセットとタイムフレームの セットの 新しいバー イベントを取得できるようにし、短くて効率的なコードに することでした。

さて、教えてほしいのですが、私は課題をクリア できたでしょうか?

絶対にYESです。しかし!!!たまたま、私の提案が少し捻じ曲げられ、その結果、あなたが理解したように理解されたのです。FXでは、今ここで必要なデータにしか興味がない。私は1つのシンボルと現在の期間についての情報が必要です。別のシンボルとある期間の情報が必要な場合、同じコードで取得できるはずです。また、今必要でない情報を受け取ることで、システムに過大な負荷をかける必要もありません。

あなたのせいではなく、そうなってしまったんです。止めようとしたけど、無理だった。

 
Dmitry Fedoseev:

ピーター 課題をすり替えたんですね。

切り替えてはいなかった。そのように理解したのは、文章の言い換えの仕方だった。

 
Alexey Viktorov:

絶対にYESです。しかし!!!たまたま、私の提案が少し捻じ曲げられ、その結果、あなたが理解したように理解されたのです。FXでは、今ここで必要なデータにしか興味がない。私は1つのシンボルと現在の期間についての情報が必要です、それだけです。別のシンボルとある期間の情報が必要な場合、同じコードで取得できるはずです。また、今必要でない情報を受け取るために、システムに過剰な負荷をかける必要はありません。

あなたのせいではなく、そうなってしまったんです。止めようとしたけど、無理だった。

必要な記号の説明をSymbols[]配列に書き込むだけなので、全く問題ありません。

OnInit()からレコードを削除する。

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

そして、グローバルスコープで配列を初期化 する。

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

また、Timeframes[]配列から不要なタイムフレームを削除する。

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

変数を変更する。

int    All_Timeframes = 3;

そして、All_Symbols変数を変更します。

int    All_symbols = 3;

こうすることで、適切なシンボルと適切な時間枠のイベントのみを受け取ることができます。

追加されました。

また、シンボル数がわかっているので、OnInit()から配列のサイズ設定を削除してください。

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

何も代えませんでした。ただ、私はこの問題を違う方法で解決しました。先生の論理に従うと、必然的にOOPの必要性に行き着くことになりますね。しかし、どのように考えても、私のソリューションを安全に使用することができます。どの関数でも、いつでも、プログラム内のどの場所からでも、どのシンボル、どの時間枠の新しいバーイベントでも、グローバル配列にアクセスできます。

シンボルの数やタイムフレームの数は関係なく、私のソリューションでは、それらの数がシステムの負荷を増加させることはありません。新しいバーイベントがあるかどうかという配列だけを見てください。

シンボルをマーケットレポートから取得せず、Symbols[]配列に手入力すると、シンボルのリストを減らすことができます。お願いします。


追加されました。

ところで、New_bar()関数が無くなっていることにお気づきでしょうか。本当に不要なものになりました。あなたの言うとおりでした。


もしそうなら、太字で強調されているように - ビンで。

 
Dmitry Fedoseev:

太字でハイライトされている場合は、ゴミ箱行きです。

なぜ?
 
Реter Konow:

問題ありません。Symbols[]配列に、必要なシンボルの名前を書けば完了です。

OnInit()からエントリーを削除する。

そして、グローバルスコープで配列を初期化 する。

また、Timeframes[]配列から不要なタイムフレームを削除する。

変数を変更する

そして、All_Symbols変数を変更します。

こうすることで、必要なシンボル、必要な時間帯のイベントのみを受け取ることができます。


ピーター やめて新しいバーを定義するための関数は、自分以外には必要ない。そうか......せっかくの苦労が水の泡になってしまったか......残念だ。