2EMAのクロスEAを作成したのですが、アドバイスが必要です。 - ページ 4

 
prupru:

今、もっと大きな問題があります。私のブローカーは、注文を部分的に実行する傾向があります。

親愛なるお客様へ

お客様の取引は価格587.318で部分的に(15.84のうち2.32ロット)開始されたことをここにお知らせします。

この問題について何かご質問がありましたら、ご遠慮なくお問い合わせください。

よろしくお願いします。

ブローカー

以下はサポートからのコメントです。

ボラティリティが高い時や流動性が低い時、指値注文が部分的に執行されることがありますので、ご了承ください。これは、価格が合致した場合、ポジションが即座に全額または一部で満たされることを意味します。お客様の場合、注文は部分的に執行されたので、通知書が届いたのです。

注文が部分的に成立しているにもかかわらず、すべての注文を決済する方法はわかりました。

edit:

シンボル注文とマジックナンバー注文をちゃんとチェックしないといけないことに今気づきました。

edit: 部分的に閉じていても注文を閉じるようにするclose all orders関数はこちらです。


//Close all my Orders
void CloseAllOrders()
{
int notMyOrders = 0;

 while (OrdersTotal()>notMyOrders)
 {
 notMyOrders = 0;
 for(int i = OrdersTotal()-1; i >= 0 ; i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
   if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) {notMyOrders++; continue;}
   if(OrderType()<= 1)CloseOrder();
         
   }
 }
return;
}  
かきなおし
 
deVries:

リライト


wow!

4、5回読み返したけど、理解できたよ。ありがとうございます。

そして...OrderSelectが falseを返したらどうなるのでしょうか?

OrderSelectがfalseを返すことはよくあることですか?それは可能ですか?

 
prupru:


わあああああああああああああああああああああああああああああああああああああああああああああああああ

4、5回読み直したけど、理解できたよ。ありがとうございます。

そして...OrderSelectが falseを返したらどうなるのでしょうか?

オーダーセレクトがfalseを返すことはよくあることですか?それは可能ですか?


for(int i = OrdersTotal()-1; i >= 0 ; i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;

i= 0

ループから戻る

i = -1

if(OrderSelect(-1,SELECT_BY_POS,MODE_TRADES)==false) break;// ==> 取引のチェックを 終了し、ループを抜けます。

次のCloseOrder()

//CloseOrder
void CloseOrder()
{double PR=0;
 while(!IsTradeAllowed()) Sleep(10);
 RefreshRates();
 if(OrderType()==OP_BUY)  PR=Bid;
 if(OrderType()==OP_SELL) PR=Ask;
 if(!OrderClose(OrderTicket(),OrderLots(),PR,Slippage,CLR_NONE))
  {
   Print("Close order error: ",GetLastError());
   Print("Type ", OrderType()," PR ",PR, " Ask ", Ask, " Bid ", Bid, " OrderTicket ", OrderTicket(), " OrderLots ", OrderLots());
  }
return;}
//--------------------------- end of close order

GetLastError() から返される一般的なエラーは何ですか?

CloseOrderが失敗した場合、次の取引も失敗している可能性があります。

このような状況を回避するためにはどうしたらよいのでしょうか?

 
deVries:


このような事態を避けるためには、どうすればいいのでしょうか?

まだわかりません。よく考えてみないと。

今、別の問題で行き詰っています。

Windows2003のVPSにEAを置いたのですが、「terminated by timeout」というエラーが返ってくるのです。

しかも、このエラーはcloseとopenを繰り返している間ではなく、expert jushがクロスをチェックしてアイドル状態になったときに出る。

つまり、プログラムは新しいバーが開くかどうかをチェックし、trailingstop = 0なのでトレーリングストップ関数は 呼ばれず、新しいバーが開いたらEMAのクロスをチェックし、クロスがないので(タイムアウトエラーが出た時はEMAラインがクロスから遠かった)プログラムはreturnes(0)になるのですが、これはどうしたことでしょう。

サイクルはありません!どうしてタイムアウトで終了してしまうのでしょうか?

 
prupru:

まだわからない。よく考えてみないと。

今、別の問題で行き詰っています。

Windows2003のVPSにEAを置いたのですが、「terminated by timeout」というエラーが返ってくるのですが、自宅のPCではこんなエラーは見たことがありません。

しかも、このエラーはcloseとopenを繰り返している間ではなく、expert jushがクロスをチェックしてアイドル状態になったときに出る。

つまり、プログラムは新しいバーが開くかどうかをチェックし、trailingstop = 0なのでトレーリングストップ関数は呼ばれず、新しいバーが開いたらEMAのクロスをチェックし、クロスがないので(タイムアウトエラーが出た時はEMAラインがクロスから遠かった)プログラムはreturnes(0)になるのですが、これはどうしたことでしょう。

サイクルはありません!どうしてタイムアウトで終了してしまうのでしょうか?


This is not a cycle ?

while(!IsTradeAllowed()) Sleep(10);
 
deVries:


これはサイクルではないのですか?


EAを終了させた時間帯はEMAラインが交差していないため、NewOrder関数が 呼ばれず、NewOrder関数内にあるサイクルが実行されなかったということです。

IsStopped条件追加

while( (!IsTradeAllowed()) && (!IsStopped()) ) Sleep(10);
while ( (LotRemains>0) && (!IsStopped()) )
while ( (OrdersTotal()>0) && (!IsStopped()) ) 
 
多分、タイムアウトエラーは、私がVPSプロセッサリソースを使い果たしたので、ポップアウトします。私はより高価なプランに変更し、私はWindowsのuodateのような重い何かを実行するまで、私はそれらを見ていません。