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);
}
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);
2つの結果を返すことができる演算子は何ですか?この条件を見つけるためにif 文を使っているのですが、複数結果を返すことができず、その場合同じ条件を2回書かなければならないので、この質問で書いています。
どのような条件でチェックされるのかがよくわかりませんが、もしかしたらswitchが 有効かもしれませんね。そしてTRUEで必要な値を割り当てる。
2つの変数の値を入れ替える関数はありますか?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特徴、微妙なニュアンスとコツ
fxsaber さん 2018.08.26 19:02
フォーラムの英語版にはありがとうございます。これらの定義を把握する必要がありますね。
こんにちは!Bars()関数が インジケータとExpert Advisorから呼び出されたときに異なる値を持っている理由と、その一致を確認する方法を教えてください。
EAやインジケータからコードを表示する。
EAやインジケータからコードを表示する。
関数 Bars(_Symbol,_Period)を呼び出すだけ です。
Bars(_Symbol,_Period)関数を呼び 出すだけです。
結果のプリントアウトは別途依頼する必要があるのでしょうか?
違いがわからない。テスターでは、このバリエーションは、私が少し前に読んだことの曖昧な記憶しか知らない歴史についての可用性のために除外されませんが。結局、利用可能なバーの総数が判明する。でも、折に触れて聞けば、違いがあるはずはないのです。
if文は値を返しません。
別の関数で特定の変数に値を割り当てるには、2つのオプションがあります。
1.変数は、プログラムのすべての部分で見えるようにしなければなりません。つまり、グローバル変数 レベル(コードの先頭)で宣言する必要があります。
2.ローカルに宣言された変数を参照でユーザー関数に渡すこと。つまり、変数名の前に&をつける
ある条件が真であれば、2つの同じ動作が行われなければならないことを意味する。
私が宣言した変数で、この動作以外は何も行われません。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つの同じ動作をさせる方法です。どうすれば短く書けるか、誰か教えてください。
どのような条件でチェックされるのかがよくわかりませんが、もしかしたらswitchが 有効かもしれませんね。そして、TRUEには好きな値を割り当ててください。
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];。