Problem mit der Gesamtzahl der offenen Aufträge - Seite 3

 
Sie müssen Ihren gesamten geänderten Code zeigen.
 
Drucken Sie Ihre Variablen vor und innerhalb von if-Anweisungenaus und finden Sie heraus, warum.
 
WHRoeder:
Drucken Sie Ihre Variablen vor und innerhalb von if-Anweisungen und finden Sie heraus, warum.

Ok, danke, ich werde das tun und mehr recherchieren. Ich habe auch dieses Stück Code gefunden, das mich interessiert, weil SL und TP von OrderSend getrennt sind. Ich werde mir das auch ansehen

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

Hallo zusammen

ich habe die meisten meiner Probleme behoben und der EA funktioniert gut im Tester, aber ich habe immer noch Probleme mit OrdersTotal. Im Demomodus werden manchmal beide ausstehenden Stop-Orders geöffnet, aber meistens nur die Kauf- oder die Verkaufsorder. Ich möchte, dass beide ausstehenden Orders gleichzeitig geöffnet werden (innerhalb von ein paar Sekunden), aber nur, wenn keine anderen Orders oder ausstehenden Orders geöffnet sind. Ich denke, was passiert, ist, dass manchmal beide ausstehenden Orders geöffnet werden, bevor es eine Chance hat, die Anzahl der Orders zu berechnen, und andere Zeiten, die es tatsächlich erkennen, dass eine ausstehende Order gesendet wurde, und wird nicht öffnen, die andere. Ich dachte, wenn ich die Ordersends in geschweifte Klammern setze, werden beide ausgeführt, wenn die if-Bedingung erfüllt ist... Ich weiß jetzt auch, dass er weiterhin schwebende Orders öffnet, wenn ich sie lösche, solange die letzte Kerze gebildet wird, d.h. solange die Time-Variable mit der Time[0]-Kerze übereinstimmt, sind Ticks irrelevant.

Hier ist dieser Teil des Codes:

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);
     }

Gibt es einen besseren oder einfacheren Weg, dies zu tun? Vielen Dank

 
Trader3000:

Hallo zusammen

ich habe die meisten meiner Probleme behoben und der EA funktioniert gut im Tester, aber ich habe immer noch Probleme mit OrdersTotal. Im Demomodus werden manchmal beide ausstehenden Stop-Orders geöffnet, aber meistens nur die Kauf- oder die Verkaufsorder. Ich möchte, dass beide ausstehenden Orders gleichzeitig geöffnet werden (innerhalb von ein paar Sekunden), aber nur, wenn keine anderen Orders oder ausstehenden Orders geöffnet sind. Ich denke, was passiert, ist, dass manchmal beide ausstehenden Orders geöffnet werden, bevor es eine Chance hat, die Anzahl der Orders zu berechnen, und andere Zeiten, die es tatsächlich erkennen, dass eine ausstehende Order gesendet wurde, und wird nicht öffnen, die andere. Ich dachte, wenn ich die Ordersends in geschweifte Klammern setze, werden beide ausgeführt, wenn die if-Bedingung erfüllt ist... Ich weiß jetzt auch, dass er weiterhin schwebende Orders öffnet, wenn ich sie lösche, solange die letzte Kerze gebildet wird, d.h. solange die Time-Variable mit der Time[0]-Kerze übereinstimmt, sind Ticks irrelevant.

Hier ist dieser Teil des Codes:

Gibt es einen besseren oder einfacheren Weg, dies zu tun? Vielen Dank

Überprüfen Sie den Wert von buystop_ticket und sellstop_ticket? Wenn nur ein Ticket offen ist, wird das zweite nie offen sein (es sei denn, Sie entfernen das erste manuell).
 
Trader3000 Ich habe auch diesen Teil des Codes gefunden, der mich fasziniert, weil SL und TP von OrderSend getrennt sind. Ich werde mir das auch ansehen
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
Als ECN-Broker anfingen, schlug der OrderSend bei gesetztem SL/TP fehl. Die meisten haben dies seit Build 600 behoben.
 
zirkoner:
Überprüfen Sie den Wert von buystop_ticket und sellstop_ticket? Wenn nur ein Ticket geöffnet ist, wird das zweite nie geöffnet sein (es sei denn, Sie entfernen das erste manuell).

Vielen Dank für die Antwort. Tatsächlich öffnen sich sowohl Kauf- als auch Verkaufsstopp-Aufträge in etwa 50 % der Zeit. In den anderen 50 % der Zeit wird entweder der Kauf- oder der Verkaufsauftrag gesendet. Aber ich habe etwas herausgefunden. Ich habe nach dem letzten Fehler gefragt, und in den Fällen, in denen beide gesendet werden, gibt es keine Fehler, aber wenn nur einer geöffnet wird, erhalte ich den Fehler 130 für denjenigen, der nicht geöffnet wurde. Es scheint also, als ob meine Stops ungültig sind, aber ich weiß nicht warum. Hier ist der Code für 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);
     }

Außerdem habe ich die Funktion Print hinzugefügt. Ist es das, was Sie mit "Überprüfen Sie den Wert von buystop_ticket und sellstop_ticket? "Sie gibt nämlich zwei Werte zurück:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop-Ticket =49644335



 
WHRoeder:
Als ECN-Broker anfingen, schlug der OrderSend bei gesetztem SL/TP fehl. Die meisten haben dies seit Build 600 behoben.
Vielen Dank für Ihre Antwort. Ich habe dies auch versucht, aber es hat keinen Unterschied gemacht. Ich bin auf Build 950
 
Trader3000:

Vielen Dank für die Antwort. Tatsächlich öffnen sich sowohl Kauf- als auch Verkaufsstopp-Aufträge in etwa 50 % der Zeit. In den anderen 50 % der Zeit wird entweder der Kauf- oder der Verkaufsauftrag gesendet. Aber ich habe etwas herausgefunden. Ich habe nach dem letzten Fehler gefragt, und in den Fällen, in denen beide gesendet werden, gibt es keine Fehler, aber wenn nur einer geöffnet wird, erhalte ich den Fehler 130 für denjenigen, der nicht geöffnet wurde. Es scheint also, als ob meine Stops ungültig sind, aber ich weiß nicht warum. Hier ist der Code für SL:

Außerdem habe ich die Funktion Print hinzugefügt. Ist es das, was Sie mit "Überprüfen Sie den Wert von buystop_ticket und sellstop_ticket? "Sie gibt nämlich zwei Werte zurück:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop-Ticket =49644335



Sie müssen RefreshRates() zwischen Ihren 2 OrderSend() einfügen.
 
zirkoner:
Sie müssen RefreshRates() zwischen Ihre 2 OrderSend() einfügen.
Wow Wow Wow, das hat funktioniert, vielen Dank!
Grund der Beschwerde: