バーの端の注文を閉めるのを手伝ってくれ!

 

それは特別なスキャルパーEAのためのものなので、ピンポイントの精度が必要です。私が何を意味するかを説明しましょう。



ここでは、例えば、M15 EUR/USD chart.Now私は右X マークろうそくのオープンでロングトレードに私を取った任意の指標を持っていた場合、それはその後弱気キャンドルが続く、非常に低いですが、それは重要ではありません、何が重要なのは、私の計算に基づいて、ここで最適な出口はバーnr 1の終値で、私は助けを必要とする方法を知らないことです!トリッキーな部分はバー 1 マークの閉じられたポイントで、注文を終了するにはわからないことであると私はここで助けを必要とする

私は今のところ考えることができる最善の解決策は、この(この架空の買い取引の場合)です。


/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

このコードは、Open[0]で正確に買い取引を終了しますが、Close[1]ではありません。あなたが画像を見て、2と マークされたバーを確認した場合、あなたはバー2が 前のものが閉じるとその価格で開かなかったことがわかりますそれはわずかに異なる価格で開かれた。そして時にはここのように大きなギャップが発生します。



だから、経験はそれを教えてくれます。

Close[1] != Open[0].

非常にまれな状況ではそうです。だから私は注文がClose[1]で正しく閉じられる必要があるのです。

私は1つの実現可能な解決策は、時間を数えることによって、例えば、これはM1とM15のチャートであり、どちらの場合でもM1のための60またはM15のための900のいずれかの秒数を数え、秒59または599で注文を閉じます。この問題点は、ティックが6秒私は推測(私は間違っている場合私を修正)、あなたは正確にこの時間の問題のために、追加のスリッページ問題は、バークローズ後に方法を取引を終了するかもしれませんからそれをヒットしないことであるということです。

では、私の質問を要約すると、上記のように時間をカウントすることは可能ですか?

あるいは、Open[0]ではなくClose[1]で注文を閉じる他の解決策を思いついたら、私はそれを受け入れる。これを助けてください、これは私のEAの非常に重要な問題です

 
Proximus:

私は、バーの終わりに正確に注文を閉じるコードを定式化するためにいくつかの助けを必要としています。

今この瞬間の最後のティックが、現在のバーの最後のティックの1つ前であることを伝えることができる状況はありません。
 

モジュラス、余りがないときを確認 する。

if( !MathMod( TimeCurrent(), PERIOD_M5 * 60 ) ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );
 
trevone:

モジュラス、余りがないときを確認する。

それはうまくいきません ... それはバーの終わりの前か後のどちらかです ... 決してバーの終わりではありません。 deVriesが 言ったように、現在のバーの終わりを検出することはできませんが、次のバーの開始を検出することはできます ... ...
 
RaptorUK:
これはうまくいきません ... バーの終わりの前か後のどちらかになります ... 決してバーの終わりにはなりません。 deVriesが 言ったように,現在のバーの終わりを検出することはできないが,次のバーの開始を検出することはできる.


もし、終値の1秒前でなく、終値に限りなく近い時間帯に終値を表示するのであれば、その解決策も受け入れられますが、終値の1秒後では、私が考えた方法と変わらないため、受け入れられませんでした。


もう一つの解決策、バーのクローズの1秒前を取るというのはどうでしょうか?

M1の場合、このように

if( Time[0]>=OrderOpenTime()+59  ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );

この場合、ティックの問題があるとすれば、どのように解決すればよいのでしょうか?

 
Proximus:

もし、終値の1秒前でなく、終値に限りなく近い時間帯に終値を表示するのであれば、その解決策も受け入れられますが、終値の1秒後では、私が考えた方法と変わらないため、受け入れられませんでした。


もう一つの解決策、バーのクローズの1秒前を取るというのはどうでしょうか?

M1の場合、このように

この場合、ティックの問題が あると すれば、どのように解決するのですか?




もし、そうでなければ、さらに1分間待つことになり、また、その場合、もし、何かあれば......。
 
Proximus:

しかし、なぜ現在のティックの後にクローズするのでしょうか?

EA(とIndicator)では、ティックがあるときだけ物事が起こります。次のバーの最初のティックがあるまで、バーの最後のティックがいつであるかを知る方法はありません ... たとえティックがH1バーの時間を過ぎて59分59秒であっても、その秒間に別のティックがあるかもしれません ... .

プロキシマス

そして、もう一つの解決策は、バーのクローズの1秒前に取るというのはどうでしょうか?

M1の場合、このようになります。

この場合、ティックの問題はどのように解決するのでしょうか。

.そして、バーの最後の5秒間はティックがない可能性があるので、バーの最後の1秒間を待つことができません。

 
RaptorUK:

EA(およびインジケータ)では、ティックがあるときだけ物事が起こります。次のバーの最初のティックがあるまで、バーの最後のティックがいつであるかを知る方法はありません ... たとえティックがH1バーの時間を過ぎて59分59秒であっても、その間に別のティックがあるかもしれません ....

..そして、バーの最後の5秒間はティックがない可能性があるので、バーの最後の1秒間を待つことはできませんので、その場合は、バーの最後の1秒間を「見る」ことはありません。

つまり、銀行間為替レートが一定期間内に変化しない場合、ブローカーは新しい価格データを呼び出さないという理解でいいのでしょうか。

MT4のティックとは、価格や数量に関係なく、X秒後に常に価格を更新することを意味します。つまり、更新レートが3秒であれば、M1では57秒前に取引を終了しなければならないことが分かります。


このような場合、.NETを使うことはできませんか?

RefreshRates();   

58秒に最後のティックをコールダウンし、59秒に終了するには?

 
Proximus:

銀行間為替レートが一定時間内に変化しない場合、ブローカーは新しい価格データを呼び出さないという理解でいいのでしょうか?

MT4のティックとは、価格や数量に関係なく、X秒後に常に価格を更新するものだと思っていました。

ブローカーの価格が変化しない場合、入札とアスク、新しいティックはありません...あまり取引されていないペアのいくつかの真夜中のGMTは、1分以上ティックがないことが できます...新しいティックは、プリセット時間の後に生成されません、それは価格、入札またはアスク(および多分いくつかの他の状況で、他のシンボルのパラメータの 変更)があるときに発生します... ...。

プロキシマス:

このような場合、.NETを使うことはできないのでしょうか?

58秒に最後のティックをコールダウンし、59秒に終了させることはできますか?

ティックがない場合、RefreshRates()はどのように呼び出されるのでしょうか?
 

MT4でティックがどのように機能するかを明確にしていただき、ありがとうございます。

RaptorUK:

ブローカーの価格が変化しない場合、BidとAskは、新しいティックはありません ... あまり取引されていないペアのいくつかの真夜中のGMTは、1分以上ティックが ありません ... 新しいティックは、プリセット時間の後に生成されません、それは価格の変化があるときに発生します、入札またはアスク(および多分他の状況で、他のシンボルパラメータの変更) ... ...

ティックがない場合、RefreshRates()はどのように呼び出されるのでしょうか?

私はRefreshRates()がブローカーに流動性プロバイダから新しいフィードのセットを呼び出すことを強制 すると思った ですが、そうではないよう です。


とにかく、誰かがこれよりも私の問題に対するより良い解決策を見つけることができれば、私とそれを共有してください、その非常に重要 です!先にありがとうございます。

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}
 
Proximus:

MT4でティックがどのように機能するかについて説明していただき、ありがとうございます。

RaptorUK

ブローカーの価格が変化しない場合、ビッドとアスクは、新しいティックはありません ... あまり取引されていないペアのいくつかの真夜中のGMTは、1分以上ティックがないことが あります ... 新しいティックは、プリセット時間の後に生成されません、それは価格の変化があるときに発生します、入札または問い合わせ(そして多分他の状況で、他のシンボルパラメータの変更) ... ...

ティックがない場合、RefreshRates()はどのように呼び出されるのでしょうか?

RefreshRates()は、ブローカーが流動性プロバイダーから新しいフィードのセットを呼び出すことを強制すると思って いましたが、そう ではないのですね。


とにかく、誰かがこれよりも私の問題に対するより良い解決策を見つけることができる場合は、私とそれを共有してください、その非常に重要!先にありがとうございます。


一番良いのは、Barの最後のティックの次のティック、つまり、次のBarの最初のティックを使うことです。