半分の区画を閉鎖する。 - ページ 17

 
SDC:

論理的な思考が全くできていませんね。マジックナンバーを修正することが、OrderOpenTime()を知ることよりもどのように役に立つのでしょうか?それは全く同じことになります。


なぜなら、1つの注文で複数の部分決済を行う必要があるからです...もし、OrderClose()を1回行い、OrderOpenTime()と比較して、同じ注文で別のOrderClose()を行い、またOrderOpenTime()を使用して比較すると、うまくいかないでしょう。履歴には、クローズした注文があり、2番目のOrderClose()関数を 閉じることができませんから...。 ここで、マジックナンバー1234を使ってOrderClose()を行い、OrderClose()が完了した後に、注文のマジックナンバーを12345に変更すれば、マジックナンバー1234を呼び出した最初の関数は、残りの注文にマジックナンバー12345が割り当てられたので、残りの注文に適用されなくなるのです。この MagicNumber 12345 を使って、別の OrderClose() 関数(適用可能であると仮定)を作成し、思い通りに動作するまでこのプロセスを繰り返すことができます。それまでは、OrderOpenTime()は一度しか動作しませんが...。
 
もし間違っていたら指摘してほしいのですが、OrderOpenTime() AND OrderCloseTime()を使用した場合はどうなるのでしょうか?

もし私が現在のOrderOpenTime()と同じSymbol()の過去に決済されたポジションを比較し、一致しないことがわかれば、CloseOrder()が実行されます。ここで、2つ目のCloseOrder()関数が 呼ばれた場合(最初のCloserOrder()よりも高い価格で、同じ注文でさらに何枚か決済したい)、OrderOpenTime()とOrderCloseTime()を比較することができました。If the OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition)THEN OrderClose() the second function...?
 

あなたは以前、複数の部分決済について何も言わず、ただ注文を半分だけ決済したいと言っていましたが、いずれにせよ、あなたはこれを考えすぎで、明白なことを完全に見逃しています。

なぜOrderOpenTime()は一度だけ動作するのでしょうか?

static datetime partclosedonce;

staticdatetime partclosedtwice;

もし注文が部品閉鎖基準レベル1を満たし、opentimeがpartclosedonceと一致しない場合、それを部品閉鎖し、タイムスタンプをpartclosedonceに追加します。

もしオーダーが部品閉鎖基準レベル1を満たし、そのopentimeがpartclosedonceと一致するならば、それはすでに一度部品閉鎖されているので、まだ部品閉鎖をしないこと。

もし注文が部品閉鎖基準レベル2に合致し、partclosedtwiceに合致しない場合、それを部品閉鎖し、タイムスタンプを変数partclosedtwiceに追加する。

 

また、OrdersHistoryを使用することは避けるべきです。長いバックテストを行う場合、履歴には何百、何千もの注文があり、EAは毎ティック ごとにあなたのオープンオーダーとそれらすべてを比較することになります。これは非常に遅い処理で、バックテストが長くなればなるほど、履歴が大きくなり、遅くなるのは目に見えています。

 
SDC:

また、OrdersHistoryを使用することは避けるべきです。長いバックテストを行う場合、履歴には何百、何千もの注文があり、EAは毎ティックごとにあなたのオープンオーダーとそれらすべてを比較することになります。これは非常に遅い処理で、バックテストが長くなればなるほど、履歴が大きくなり、遅くなるのは目に見えています。


では、他にどうすればいいのでしょうか...?
 

私はその方法を示しただけです! もっとわかりやすいやり方があれば教えてほしいです。ヒストリーでやりたいならやればいいし、その方法について私の意見を言っただけです。

 
SDC:

私はその方法を示しただけです! もっとわかりやすいやり方があるなら教えてほしいです。ヒストリーでやりたいならやればいいし、その方法について私の意見を言っただけです。


静的なdatetimeはOrderClose()の日時を保持しているので、履歴を見るのではなく、現在の注文の最初の開始時刻 と比較することができるのですね。
 

 
いいねー、ありがとうございます。

Static Datetimeは私にとってかなり新しいものなので、明日からこれに取り組んで、どこまでできるかを見てみたいと思いますうまくいけば、私のコードのこの厄介な部分を解決できるかもしれません :)
 
SDC:

あなたは以前、複数の部分決済について何も言わず、ただ注文を半分だけ決済したいと言っていましたが、いずれにせよ、あなたはこれを考えすぎで、明白なことを完全に見逃しています。

なぜOrderOpenTime()は一度だけ動作するのでしょうか?

static datetime partclosedonce;

staticdatetime partclosedtwice;

もし注文が部品閉鎖基準レベル1を満たし、opentimeがpartclosedonceと一致しない場合、それを部品閉鎖し、タイムスタンプをpartclosedonceに追加します。

もしオーダーが部品閉鎖基準レベル1を満たし、そのopentimeがpartclosedonceと一致するならば、それはすでに一度部品閉鎖されているので、まだ部品閉鎖をしないこと。

もし注文が部品閉鎖基準レベル2に合致し、partclosedtwiceに合致しない場合、それを部品閉鎖し、タイムスタンプを変数partclosedtwiceに追加する。


バンザイ!想像していたよりずっと簡単で、とても役に立ちました。想像していたよりずっと簡単でした!見始めてから5分後には動きました。)本当にありがとうございました。これから、複数のOrderClose()関数を 組み込んで、動作させられるかどうか見てみたいと思います。これができたら、ここで他の人から受けた助けを返すために、別のスレッドを作るつもりです。これは、一度の簡潔な投稿で、他の人が使えるようになることは間違いないと思います。まだ、解決していませんが、その静的なdatetimeは、今回のorderclose()で完全に動作しています。私はそれが他のものにもそうであってはならない理由を理解していません :)