MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1473

 
Alexey Viktorov:

例としてフラクタルをあげました。そして、(あなたの場合)最低限をどう定義するかは、おそらく軍事機密か...あるいは問われていることを完全に誤解しているのでしょう。

私のコードはいくつかの文字列で構成されており、最小値がどのように定義されているかは肉眼で見ることができる

最小値は黄色の線で定義されています

void OnTick()//484
{
if (Bid<LoU)
LoU=Bid;
//**************************************************************||TimeCurrent()==1262568096
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Print("---------------------КАЖДЫЙ ТИК ------Tick---------=     "    ,   Tick);
Pr=LoU;
LoU=Bid;
}
}
 
MakarFX:

棒を数える必要はありません

注文が開始された後、変数に値Low[0](現在のバーの最小値)を代入し、バーが閉じられた後、Low[1]の値が変数より低ければ、新しい値を代入します。

でない場合は,古い値,すなわち最小値が保持される。

このアルゴリズムは、私も以前から理解して使っていたのですが......。つまり、最小値をティックではなく、ローソク足でチェックするのです。しかし、もっと経済的なアルゴリズム、つまり前回説明したような、ミニマムを前ではなく後にチェックするアルゴリズムがあると思うのです。しかし、BIDAから50本目までのローソクの本数を素早く経済的に数える方法がわからない。はい、50本目まで......ロウソクの本数の数え方は知っています。LOUが最も低いキャンドルまでの数の数え方 .つまり、BIDAからこのキャンドルまで

 
ANDREY:

私のコードは数行で構成されており、肉眼でどのように最小値を定義しているかを示しています。

最小値は黄色の線で定義されています。

で、何が問題なんだ?ここで重要なのは、LoUの変数が どのように宣言されて いるかです。世界レベルならいいんですけどね。ローカル変数であれば、staticでなければならない。そして、この変数の価格と現在の価格の差を各ティックでチェックすると、マイクロ秒のコストは、それについて話をする意味がないほど僅少になります。

 
ANDREY:

これは私が昔から理解して使っているアルゴリズムなのですが...。つまり、最小値をティックではなく、ローソク足でチェックするのです。しかし、もっと経済的なアルゴリズム、つまり前回説明した、最小値が現れる前にチェックするのではなく、現れた後にチェックするアルゴリズムがあると思うのです。しかし、BIDAから50本目までのローソクの本数を素早く経済的に数える方法がわからない。はい、50本目まで......ロウソクの本数の数え方は知っています。LOUが最も低いキャンドルまでの数の数え方 .つまり、BIDAからそのキャンドルまで.

なぜ50本も数えるのか、その論理は異常です。50でなかったら?

 
ANDREY:

これは私が昔から理解して使っているアルゴリズムなのですが...。つまり、最小値をティックではなく、ローソク足でチェックするのです。しかし、もっと経済的なアルゴリズム、つまり前回説明した、最小値が現れる前にチェックするのではなく、現れた後にチェックするアルゴリズムがあると思うのです。しかし、BIDAから50本目までのローソクの本数を素早く経済的に数える方法がわからない。

どのように考えても、チェックは各ティックごとに行われます。これはOnTick()関数の 機能です。

 
MakarFX:

どのようなチェックを行ったとしても、それは毎回のティックで行われます。これはOnTick()関数の 機能です。

確認することと、最低限を見つけることは別物です...。

 
Alexey Viktorov:

で、何が問題なんだ?ここで重要なのは、変数 LoUの宣言の 仕方です。グローバルレベルであれば、問題ありません。ローカル変数であれば、staticでなければならない。そして、各ティックでチェックすると、この変数の価格と現在の価格の差は非常に小さくなり、それについて話すことは意味がありません。

私にとって新しい貴重な情報をありがとうございます......知りませんでした。

 
Alexey Viktorov:

これは異常なロジックで、なぜ50本でもカウントするのか?50でなかったら?

50は抽象的なケースの場合です。つまり、現在のBIDEと現地の安値の間に何本のバーがあるか・・・このBIDEと現地の安値の間に注文を出すのに必要な30ポイントがある場合、どうやって知るかです。To open orderif ( Bid - Low[ 50] >= 30 pips)- 注文をオープンする。

 
MakarFX:

どのようなチェックを行ったとしても、それは毎回のティックで行われます。これはOnTick()関数の 機能です。

ありがとうございます。もし私がそれを知っていたら.というのも、私ならここまで気にしないかもしれません。

ですから、LOWのチェックを1ティック毎ではなく、ローソク足毎にしても、プログラムは1ティック毎の処理に時間を費やし、1ティック毎にチェックしたのと同じように見えてしまうのです。

この機能をコードで回避する方法はないのでしょうか?ティック毎ではなく、例えば分足ロウソクのLOU毎に実行する必要があります。

 
ANDREY:

ありがとうございます。もし私がそれを知っていたら.もしかしたら、ここまで悩むことはなかったかもしれません。

では、LOWのチェックを毎ティックではなく、ローソク足で行っても、プログラムは毎ティックの処理に時間を費やし、結果は毎ティックでチェックした場合と同じになるのでしょうか?

この機能をコードで回避する方法はないのでしょうか?ティック毎ではなく、例えば分足ロウソクのLOU毎に実行する必要があります。

void()