2つの結果を返す関数? - ページ 4

 

gordon: It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

ありがとうございます。ポインタの知識も磨かないといけませんね。

Matutinです。 とても興味深いですね。残念ながら、EAにはパラメータが必要で、時にはたくさん必要です。ですから、パラメータを避けることはできませんし、https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad で述べたような理由で気をつけなければなりません。

なぜファイルに書き込まないのか、そしてすべてのEAがそれを読むことができるのか。

gordon : この議論は、グローバルスコープで定義された変数(特殊関数 start(), init(), deinit() の外で宣言されたもの)に関するもので、GVに関するものではありません....この2つを混同しないようにしましょう。

私は、混乱を避けるために、常にグローバルスコープ変数とグローバル変数と呼んでいます。MT4とMT5では、これらを別の用語で表現したほうがよいでしょう。

 
gordon:
なぜ、存在しない問題を解決するのか?なぜ車輪を再発明するのか?なぜ、限られたケースでしか機能しないような不明確なコードを作るのか?


というのも、この関数は1から7までの配列に複数の移動平均を持ち、そのうちのどれかがシグナルラインとクロスした場合、配列のインデックス*1000 + 方向(0は上、1は下)*100を取り、各注文に対して固有のID番号を返し、3つの情報を含むのです。

例えば、3本目のMAが下向きにクロスした場合、3100のシグナルが発生し、2本目のMAが上向きにクロスした場合、2000のシグナルが発生します。

これは、ラインクロス関数がその番号をオープンオーダー関数に送ることができることを意味し、現在3つの情報を含んでいます。まず、それ自体がマジックナンバーであり、次にordertype = signal%1000/100 結果が1か0かで売りか買いかが決定されます。

int MA=magicnumber/1000 result は1から7までの値で、移動平均の元の配列のインデックスに対応するものです。

第三に、マジックナンバーは各注文のためのユニークな識別子であり、同じマジックナンバーを持つ2つの注文が許可されていないため、信号の繰り返しによる複数の注文が開かれるのを防ぎます。

プログラムの後半で、注文の種類 に基づいて操作を実行したい場合、私はtype=(magicnumber%1000)/100とします。結果が1であればそれは売り注文、0であれば買い注文、どのMAラインがその注文を作成したか知りたい場合、私はint MA=magicnumber/1000とします 明らかにインタージャーはあらゆる浮動小数点以下を取り除き、私にオリジナルのMAインデックス1〜7を教えてくれます。

これは、1つの関数の戻り値から複数の取得可能で使用可能な情報を作成する巧妙な方法だと思いました。

 
SDC:

まあ、なぜなら[...]。

それは素晴らしいことですが、もう一度言います。なぜ、直接的で、普遍的で、明確で、よく受け入れられている方法でやらないのですか。なぜ、こんな面倒なことをするのでしょう?この方が簡単だと思いませんか。

int  a,b;
void MyFunc( int& a, int& b )
   {
   //... function result should be 'passed' to a and b
 

例えば、55本の移動平均線がクロスしている時に出した全ての売り注文 を、他の注文とは無関係に決済することができます。 これらの注文のマジックナンバーは3000を基準にしています。そして、私はそれをさらに進めて、注文の種類も取り入れることにしました。つまり、そのMAラインの売り注文はマジックナンバー3100 3101 3102などです。これは、その取引基準で開いたすべての注文、その取引基準で開いたすべての買い注文、どの取引基準で開いたすべての売り注文などすべてを、特殊マジックナンバーで識別できることになります。