初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 926

 
Seric29:
2つの結果を返すことができる演算子は何ですか?この条件を見つけるためにif 文を使っているのですが、複数結果を返すことができず、その場合同じ条件を2回書かなければならないので、この質問で書いています。

どのような条件でチェックされるのかがよくわかりませんが、もしかしたらswitchが 有効かもしれませんね。そしてTRUEで必要な値を割り当てる。

 
2つの変数の値を入れ替える関数はありますか?
 
pivomoe:
2つの変数の値を入れ替える関数はありますか?

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2018.08.26 19:02

フォーラムの英語版には
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }

 
Artyom Trishkin:

ありがとうございます。これらの定義を把握する必要がありますね。

 
こんにちは!Bars()関数が インジケータとエキスパートから呼び出されたときに異なる値を持つ理由と、その一致を確認する方法について教えてください。
 
Tango_X:
こんにちは!Bars()関数が インジケータとExpert Advisorから呼び出されたときに異なる値を持っている理由と、その一致を確認する方法を教えてください。

EAやインジケータからコードを表示する。

 
Alexey Viktorov:

EAやインジケータからコードを表示する。

関数 Bars(_Symbol,_Period)を呼び出すだけ です。

 
Tango_X:

Bars(_Symbol,_Period)関数を呼び 出すだけです。

結果のプリントアウトは別途依頼する必要があるのでしょうか?

違いがわからない。テスターでは、このバリエーションは、私が少し前に読んだことの曖昧な記憶しか知らない歴史についての可用性のために除外されませんが。結局、利用可能なバーの総数が判明する。でも、折に触れて聞けば、違いがあるはずはないのです。

 
Alexey Viktorov:
if文は値を返しません。

別の関数で特定の変数に値を割り当てるには、2つのオプションがあります。

1.変数は、プログラムのすべての部分で見えるようにしなければなりません。つまり、グローバル変数 レベル(コードの先頭)で宣言する必要があります。

2.ローカルに宣言された変数を参照でユーザー関数に渡すこと。つまり、変数名の前に&をつける

ある条件が真であれば、2つの同じ動作が行われなければならないことを意味する。

        if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);
}

私が宣言した変数で、この動作以外は何も行われません。Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ?Bar_Cl[iHgCL]:Bar_Op[iHgOP]; またはこの動作Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ?Bar_Cl[iLwCL]:Bar_Op[iLwOP]; 条件によって上下2つの同じ動作をさせる方法です。どうすれば短く書けるか、誰か教えてください。

 
Konstantin Nikitin:

どのような条件でチェックされるのかがよくわかりませんが、もしかしたらswitchが 有効かもしれませんね。そして、TRUEには好きな値を割り当ててください。

 if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);

Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? を実行する必要があります。Bar_Cl[iHgCL]:Bar_Op[iHgOP];およびPrice_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ?Bar_Cl[iLwCL]:Bar_Op[iLwOP];。

理由: