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

 
MakarFX:

それでも、すべてのティックに チェックが入る

で、最小値の計算が狂ってしまい、2小節分ロールバックしてしまう。

私の最小限の計算では、写真のように被弾していました。しかし、その後、LoY1変数を追加したら、このエラーは出なくなりました。その結果、すべての注文は、私の最初のコードと同じ方法(時間、金額、価格)で、つまり私が必要とする方法で開かれます。私のコードは別の場所で失敗しました.でも、同じところで直しました


double LoU,LoY1,Pr;
int x;
void OnTick()
{
if (Low[1]>Low[2]&&Time[2]>x&&Low[2]<LoY1)
{
LoU=Low[2];
LoY1=Low[2];
}
//**************************************************************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
LoY1=Bid;
x=TimeCurrent();
}
}

また、成行注文ではなく、LoUから30ポイント単位で注文を出すことも可能です。 そうすれば、毎ティックBidを確認する必要はありません。しかし、保留中の注文の場合、LoUが 変わるたびに、古い保留中の注文を削除して新しい注文を設定するか、現在の保留中の注文を削除せずにパラメータを変更する必要が あります。そして、これらのことは、Bid tickごとにチェックするよりもはるかに少ない頻度で行う必要があります

私の場合、どのバリアントが一番コード実装の手間がかからないでしょうか?

1.ビッドが LoUから 30ポイント離れているかどうかを各ティックでチェックする

2.LoUを 変更するたびに、古い保留を削除し、新しい保留を設定して ください。

3.LoUを 変更するたびに、アクティブポーズのパラメータを変更する

よろしく
お願いします。

 
ANDREY:

最小値の計算が、写真のように狂ってしまったのです。でも、LoY1という変数を入れたら、それが止まりました。

標準機能として、iLowest、iHighestが あります。

 
ANDREY:

最小値の計算が、写真のように狂ってしまったのです。しかし、変数LoY1を追加したところ、この迷走が止まりました。その結果、すべての注文は、私のオリジナルのコードと同じ方法(時間、金額、価格)で開くようになりました(つまり、私が望む方法)。私のコードは別の場所で失敗しました.でも、同じところで直しました


また、成行注文ではなく、LoUから30ポイント単位で注文を出すことも可能です。 そうすれば、毎ティックBidを確認する必要はありません。しかし、保留中の注文の場合、LoUが 変わるたびに、古い保留中の注文を削除して新しい注文を設定するか、現在の保留中の注文を削除せずにパラメータを変更する必要が あります。そして、これらのことは、Bid tickごとにチェックするよりもはるかに少ない頻度で行う必要があります

私の場合、どのバリアントが一番コード実装の手間がかからないでしょうか?

1.ビッドが LoUから 30ポイント離れているかどうかを各ティックでチェックする

2.LoUを 変更するたびに、古い保留を削除し、新しい保留を設定して ください。

3.LoUを 変更するごとに、アクティブポジションのパラメータを変更する

1) xはintではなくdatetimeである(将来的に便利になる)。

2) 初期コードに未決済注文が ない

3) これで、あなたのコードは各ティックでより多くの演算を行うようになりました。

メッセージの確認

 
Taras Slobodyanik:

iLowestとiHighestの 標準的な関数があります。

適さない...時系列アイテムの数が一定 しない
 
MakarFX:
それはない...時系列の要素数は一定ではない

えー...ハイ/ローがわからなくなるんですか?

 
Taras Slobodyanik:

えー...それでHigh/Lowが分からなくなるんですか?

iLowest 関数とiHighest 関数は、ある一定数のバー(時系列要素の数)の中から検索することを意味 します。

この場合、数値は未知数であり、毎回変化します

 
MakarFX:

1) xはintではなく、datetimeです(将来的に便利です)

2) 初期コードに未決済注文が ない

3) これで、あなたのコードは各ティックでより多くの演算を行うようになりました。

メッセージを確認する

これは私の古いコードです

これは、古いコードと同じ期間の新しいコードです。

私にとって、1ティックあたりの演算数は、この数値に費やす時間よりもずっと重要なことなのです。しかも、新しいコードでは25%も時間が短縮されている......私の記憶違いでなければ、ですが。

ありがとうございました。

 
Aleksei Stepanenko:
ここには、繊細さがあります。まずサイズを設定し、ゼロにリセットすることで固定を解除しますが、これではサイズは変わりません。 これ以外に方法はないのです。
ありがとうございました。
 
MakarFX:

それでも、すべてのティックに チェックが入る

で、安値の計算が狂う...2小節分ロールバックする。

以下は、あなたの追加を除いた私のオリジナルのコードです。

以下、最新の改良点とともに



もしかして、if(TimeSeconds(TimeCurrent())==0)は、注文が出されていない、次の最小値を探すセクションにのみ適用すべきなのでしょうか?

もし私が間違っていなければ、あなたの関数のおかげで私のコードは各分ローソクの始めにのみ実行し始め、そのため注文を正しく開くことができません。


ありがとうございました。

 
ANDREY:

以下は、あなたの追加を除いた私のオリジナルのコードです。

以下は、あなたの最新の改良を加えたコードです。



もしかして、if(TimeSeconds(TimeCurrent())==0)は、注文が出されていない、次の安値を探すセクションにのみ適用すべきなのでは?

もし私が間違っていなければ、あなたの関数は、各分ローソクの初めにのみ私のコードを実行するようになりました。


ありがとうございました。

はい