[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 371

 
Fox_RM:

AとBの制御点の取得方法が若干異なるだけで、実質的には違いはありません。すでに配列で試しています。

そうすると、AとBの間でも、小節をループさせなければなりません。他に方法がないから聞いているんです。

誰かヒントをくれないかな。もしかして、コード書きのロジックに問題があるのでは?


1.コード内の行を(階段状に)保存しないようにする。

2.短い条件文を繰り返す代わりに、if(...) ...という構文を使ってください。でないと...

3.グラフィカルオブジェクト形成関数の呼び出しを インナーループ(メインブレーキ)の外に出す。

 
Chiripaha:

これ



...とか、もっといいのは、これだ。

if (AOBuffer3[i]<=0){
   ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;
}
else{
   ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;
}
 
tara:

...のどちらかを選ぶとよいでしょう。

はい、そうですね。

私の提案はすべて「旧」コメントに集めます(何かあれば)。- かなり「正しい」かもしれませんが、散漫になることはないでしょう。

問題は、テキストの蓄積だと思います。

 
tara:

3.グラフィカルオブジェクト形成関数呼び出しを内部ループから取り出す(メインブレーキ)。

さて、私も不思議に思うのですが、どうやっているのでしょうか?実装

ふむ...。そのとおりです。- スタッキングが可能です。また、中間値は重要ではありません。

      if (shift_up > shift_dn)
       {
        for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
           Vol_AO_up += Volume[dn_br]; 
          }   
         ObjectDelete ("Awesome_super_volumes"+up_koaf);        // Заодно и удалить старый текст, чтобы не копился
         SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
       }

それなら、いっぱいあるわけでもないだろうし......。

 

init関数の中でこのような呼び出しをしています。

GetMarketInfo();

こちらの機能です。

//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
   gd_spread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
   gd_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)  * Point;
   gd_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}

変数gd_spread,gd_stopLevel,gd_tickSize 今までグローバルに宣言していたものです。さて、これらの変数を使うライブラリをいくつか書いてみることにした。これらの変数をヘッダーファイルに移動したことが判明しました。ということは、ライブラリコンパイル時のエラーを回避するために、GetMarketInfo() 関数もライブラリに移した方がいいんですよね?

 
hoz:

init関数の中でこのような呼び出しをしています。

こちらの機能です。

変数gd_spread,gd_stopLevel,gd_tickSize 今までグローバルに宣言していたものです。さて、これらの変数を使うライブラリをいくつか書いてみることにした。これらの変数をヘッダーファイルに移動したことが判明しました。ということは、ライブラリコンパイル時のエラーを回避するために、GetMarketInfo() 関数もライブラリに移した方がいいんですよね?

initの中でこの関数を呼び出すのは絶対にやめてください - spreadとstoplevelは時間的に変化する可能性があります
 
artmedia70:
確かにイニシャルではありません。スプレッドとストップレベリングは時間とともに変化します。


実際の取引でのトラブルを避けるためにも、イニテは捨てるべきだと思います。DCで接続が切断され、その後表示された場合、再初期化が行われず、実トレードで作業する際にエラーや不具合が発生しますよね?

じゃあ、どうすればいいんだ?これらの市場変数を返す各関数で、常に何らかの関数を呼び出す?

 
hoz:


実際の取引で誤動作がないように、initは放棄した方がいいと思う。結局、DCで接続が切れて、その後現れたら、再初期化は起きないわけで、これはもう実作業ではエラーや故障の原因になりますよね?

じゃあ、どうすればいいんだ?各関数で常に何らかの関数を呼び出し、これらの市場変数を返しますか?

このような情報は、変更可能なものと不変なものに分けられるはずです。

イミュータブルなデータはどこにでも書き込むことができ、たとえ接続が切れたとしても、データは関連性を保つことができるからだ。- もちろん、フクロウに不必要な負担をかけないように、最初からそうしないほうがいい。

しかし、変数の方は、(ライブラリが使用されていれば)関数呼び出しによるか、関数開始時に更新するだけでよい。

 

それもそうですね。脳は常に生産性について考えています。心が一番どうしたらいいのかわからない時期に。短気なんです...双子なんです :(

そうですね、一度にどちらかを切り離す必要がありますね。

それから、でも。マーケット環境の変数gd_stopLevel,gd_tickSize が異なる関数(変更、注文送信などの関数)で使用されている場合、ライブラリ関数で常に指定値を取得する関数を呼び出す のはあまり合理的ではありません。何か統一する方法はないでしょうか?結局、スプレッドと違って、ストップロスとティックサイズは常に同じになります。

 
hoz:

それもそうですね。脳は常に生産性について考えています。心が一番どうしたらいいのかわからない時期に。短気なんです...双子なんです :(

そうですね、一度にどちらかを切り離す必要がありますね。

それから、でも。マーケット環境の変数gd_stopLevel,gd_tickSize が異なる関数(変更、注文送信などの関数)で使用されている場合、ライブラリ関数内で常に指定値を取得する関数を呼び出すのはあまり合理的ではありません。何か統一する方法はないでしょうか?結局、スプレッドと違って、ストップロスとティックサイズは常に同じになります。

Artemはすでに、stoplevelは浮動することもあると言っています - 一定の値ではありません- そして、ティックサイズは、そう、定数なのです。

統一するために、再度、MarketInfoConstとMarketInfoImage(変数)の2つの関数に分割する。1つはIniteに、もう1つはStart(s)の最初に置いてください。そして、それをライブラリにまとめることが可能になる。

生産性(フクロウの最適化)に対する疑問は別です。私自身は、これらの機能をすべてフクロウに詰め込むことはしていません。必要な時に必要なパラメータを取るだけです。確かに、より多くのコードを書かなければなりませんが、MarketInfoのすべてがowlで必要になるとは限らないので、owlは「余分な」ライブラリのものをあまり扱いません。