未決済注文の総量に関する問題 - ページ 3

 
修正したコード全体を表示する必要があります。
 
if 文の前と中で変数をプリントして、その理由を調べてみてください。
 
WHRoeder:
if 文の前と中にある変数をプリントして、原因を探ってみてください。

OK ありがとうございます、それをやってもっと研究します。 SLとTPがOrderSendから分離されているので、私は興味をそそられるこのコードのビットも見つけました。 これについても調べてみます。

ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

皆さん、こんにちは。

ほとんどの問題を解決し、EAもテスターで問題なく動作していますが、OrdersTotalにまだ問題があります。デモモードでは、時々、保留中のストップオーダーを両方開きますが、ほとんどの場合、買いか売りしか開きません。 私は、両方の保留中のオーダーを同時に(数秒以内に)開きたいのですが、他のオーダーや保留中のオーダーが開いていない場合のみです。 何が起こるかというと、オーダー 数を計算する前に両方の保留中のオーダーを開くことがあり、他の時は、保留中のオーダーが送られたことに実際に気づいて、もう一方を開かないのだと思います。私は、Ordersendsを中括弧で囲むと、if条件が満たされたときに両方が実行されると思いました。 また、私がそれらを削除しても、最後のローソクが形成されている限り、つまり、時間変数が時間[0]のローソクに一致する限り、ティックは無関係で、保留中の注文を開き続けることがわかりました。

これがそのコードの一部です。

extern datetime StartTime1 = D'2016.03.15 15:05';
int start(){
int buy_ticket=0, sell_ticket=0, buystop_ticket=0, sellstop_ticket=0, total=0;
   for(int i= OrdersTotal()-1; i>= 0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()==Symbol())
        {
         total++;
         if(OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if(OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if(OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if(total==0 && Time[0]==StartTime1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
     }

もっと簡単な方法はないでしょうか? ありがとうございます。

 
Trader3000:

皆さん、こんにちは。

ほとんどの問題を解決し、EAもテスターで問題なく動作していますが、OrdersTotalにまだ問題があります。デモモードでは、時々、保留中のストップオーダーを両方開きますが、ほとんどの場合、買いか売りしか開きません。 私は、両方の保留中のオーダーを同時に(数秒以内に)開きたいのですが、他のオーダーや保留中のオーダーが開いていない場合のみです。 何が起こるかというと、オーダー数を計算する前に両方の保留中のオーダーを開くことがあり、他の時は、保留中のオーダーが送られたことに実際に気づいて、もう一方を開かないのだと思います。私は、Ordersendsを中括弧で囲むと、if条件が満たされたときに両方が実行されると思いました。 また、私がそれらを削除しても、最後のローソクが形成されている限り、つまり、Time変数がTime[0]のローソクと一致する限り、ティックは無関係で、保留中の注文を開き続けることを知りました。

これがそのコードの一部です。

もっと簡単な方法はないでしょうか? ありがとうございます。

buystop_ticketとsellstop_ticketの値をチェックして いますか?もし、1つしか開いていなければ、2つ目は決して開きません(1つ目を手動で削除しない限り)。
 
Trader3000 また、SLとTPがOrderSendから分離されているので、興味をそそられるこのコードのビットを見つけました。 これも調べてみるつもりです。
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
ECNブローカーがスタートしたとき、SL/TPが設定されているとOrderSendは 失敗していました。ほとんどの場合、ビルド600以降、これを修正しました。
 
zirkoner:
buystop_ticketとsellstop_ticketの値を確認していますか?1つしか開いていない場合、2つ目は絶対に開きません(1つ目を手動で削除しない限り)。

ご回答ありがとうございます。 実はバイストップとセルストップの両方の注文が開くのは50%ほどで、残りの50%は買いか売りのどちらかが送信されます。 しかし、私はあることを発見しました。最後のエラーを聞いたところ、両方が送信される場合はエラーはありませんが、片方だけが開くと、開かなかった方のエラー130が出ます。 つまり、私のストップが無効であるように見えますが、理由はわかりません。 SLのコードは以下のとおりです。

extern int StopLossOriginal=11;

int start(){
int stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;
   if(StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point=Point*10,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if(total==0 && (Time[0]==time1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      Print("Buystop ticket =",buystop_ticket);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
      Print("Sellstop ticket =",sellstop_ticket);
     }

また、Print関数を 追加しました。 "buystop_ticketとsellstop_ticketの値をチェックしていますか?「という2つの値を返します。

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: バイストップチケット =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335 です。



 
WHRoeder:
ECNブローカーがスタートしたとき、SL/TPが設定されているとOrderSendが 失敗することがありました。ビルド600以降、ほとんどがこれを修正しています。
ご返答ありがとうございます。 私も試してみましたが、違いはありませんでした。 私はビルド950です。
 
Trader3000:

ご回答ありがとうございます。 実はバイストップとセルストップの両方の注文が開くのは50%ほどで、残りの50%は買いか売りのどちらかが送信されます。 しかし、私はあることを発見しました。最後のエラーを聞いたところ、両方が送信される場合はエラーはありませんが、片方だけが開くと、開かなかった方にエラー130が出ます。 つまり、私のストップが無効であるように見えますが、理由はわかりません。 これがSLのコードです。

また、Print関数を追加しました。 "buystop_ticketとsellstop_ticketの値をチェックしていますか?「という2つの値を返します。

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: バイストップチケット =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335 です。



2つのOrderSend()の間にRefreshRates()を追加する必要があります。
 
zirkoner:
2つのOrderSend()の間にRefreshRates()を追加する必要があります。
うまくいきました、ありがとうございました。