Gegenüberliegende Bestellung öffnen

 

Hallo zusammen,

Ich würde gerne von Ihnen Hilfe bei diesem Problem erhalten;

Wenn ein Auftrag offen ist und der Preis unter dem Preis des offenen Auftrags liegt, möchte ich einen entgegengesetzten Auftrag öffnen.

In diesem speziellen Fall versuche ich, diesen Code zu verwenden, aber ohne Erfolg. Kann mir hier jemand helfen?

Vielen Dank im Voraus

Luis

double OpenOppositeOrder() 
 {
  int Op;  
 // for(int Counter=0;Counter<=OrdersTotal()-1;Counter++)
  for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
  {
   OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   {
    if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)
    {
     Op=OrderType();
     if(Op==OP_BUY && NormalizeDouble(Bid,Digits)*UsePoint<OpenPrice)
     {      
     SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,NormalizeDouble(Bid,Digits),UseSlippage,0,0,"Sell Order",MagicNumber,0,Red);
     if(SellTicket>0)AddLimitsSell();
      }
     if(Op==OP_SELL && NormalizeDouble(Ask,Digits)*UsePoint>OpenPrice)
     {      
     BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,NormalizeDouble(Ask,Digits),UseSlippage,0,0,"Buy Order",MagicNumber,0,Green);
     if(BuyTicket>0)AddLimitsBuy();
      }
     }
    }
   }
  }
 
luisneves:

Hallo zusammen,

Ich würde gerne von Ihnen Hilfe bei diesem Problem erhalten;

Wenn ein Auftrag offen ist und der Preis unter dem Preis des offenen Auftrags liegt, möchte ich einen entgegengesetzten Auftrag öffnen.

In diesem speziellen Fall versuche ich, diesen Code zu verwenden, aber ohne Erfolg. Kann mir hier jemand helfen?

Vielen Dank im Voraus

Luis

Könnten Sie diese Frage beantworten, es wird Ihnen sehr helfen:

1. Was ist der Rückgabewert von OrderSelect() - lesen Sie die Dokumentation von OrderSelect wird Ihnen helfen, dies zu beantworten.

2. Welcher Fehler tritt auf, wenn Sie die Bestellung nicht senden können?

 
luisneves:

Hallo zusammen,

Ich würde gerne von Ihnen Hilfe bei diesem Problem erhalten;

Wenn ein Auftrag offen ist und der Preis unter dem Preis des offenen Auftrags liegt, möchte ich einen entgegengesetzten Auftrag öffnen.

In diesem speziellen Fall versuche ich, diesen Code zu verwenden, aber ohne Erfolg. Kann mir hier jemand helfen?

Was ist der Zweck der VariableUsePoint? wenn Sie erklären können, warum Sie es verwenden, werden Sie wahrscheinlich verstehen, was Ihr Problem ist ... auch ... woher kommt der Wert vonOpenPrice ?


Wollen Sie nicht wissen, ob Ihre OrderSend() funktioniert oder nicht? Und wenn sie fehlschlägt, wollen Sie nicht wissen, warum? Wollen Sie nicht wissen, welche Variablen relevant waren, als sie fehlschlug?

Lesen Sie dies:Was sind Funktionsrückgabewerte? Wie kann ich sie verwenden?

 

Hallo RaptorUK;

vielen Dank für Ihre prompte Antwort;

UsePoint soll für 5 Dezimalstellen angepasst werden, ist also Point*10

OpenPrice ist OrderOpenPrice()

Vielen Dank!

Luis

 
luisneves:

Hallo RaptorUK;

vielen Dank für Ihre prompte Antwort;

UsePoint dient zur Anpassung an 5 Dezimalstellen, ist also Point*10

Können Sie erklären, warum Sie es in dieser Situation verwenden?

 

Hallo RaptorUK,

Sie haben recht. Ich muss das nur für TakeProfit und Stoploss verwenden (denke ich...)

 
luisneves:

Hallo RaptorUK,

Sie haben recht. Ich muss das nur für TakeProfit und Stoploss verwenden (denke ich...)

Vielen Dank für die Antwort und das Nachdenken darüber :-)
 

Hallo RaptorUK,

Ich habe einen Blick auf den Link, den Sie zur Verfügung gestellt und setzen Sie auf den Code die Fehler-Routine und der Fehler, der gerade zurückgegeben sagt 2012.11.06 06:40 Marktauftrag ecn v1 EURUSDi,M5: Order Send fehlgeschlagen, Fehler # 4051.

Dann auf den Code habe ich einige Änderungen auf OrderSelect und verwenden Ticket getan, aber die Dinge immer noch nicht funktioniert. Auch habe ich eine Suche nach der Bedeutung und was ich gefunden istERR_INVALID_FUNCTION_PARAMVALUE (4051) und leider weiß ich nicht

wie man von hier aus weiterkommt...

double OpenOppositeOrder() 
 {
  int Op;  
 // for(int Counter=0;Counter<=OrdersTotal()-1;Counter++)
  for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
  {
   //OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   OrderSelect(Ticket,SELECT_BY_TICKET);
   {
    if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)
    {
     Op=OrderType();
     if(Op==OP_BUY && NormalizeDouble(Bid,Digits)<OpenPrice)
     {      
     Ticket = OrderSend(Symbol(),OP_SELL,LotSize,NormalizeDouble(Bid,Digits),UseSlippage,0,0,"Sell Order",MagicNumber,0,Red);
     if(Ticket>0)AddLimitsSell();
      } 
      if( Ticket > 0 )
   {
   Print("Order placed # ", Ticket);
   }
else
   {
   Print("Order Send failed, error # ", GetLastError() );
   }
     if(Op==OP_SELL && NormalizeDouble(Ask,Digits)>OpenPrice)
     {      
     Ticket = OrderSend(Symbol(),OP_BUY,LotSize,NormalizeDouble(Ask,Digits),UseSlippage,0,0,"Buy Order",MagicNumber,0,Green);
     if(Ticket>0)AddLimitsBuy();
      }
      if( Ticket > 0 )
   {
   Print("Order placed # ", Ticket);
   }
else
   {
   Print("Order Send failed, error # ", GetLastError() );
   }
      
      
     }
    }
   }
  }


 
luisneves:

Hallo RaptorUK,

Ich habe einen Blick auf den Link, den Sie zur Verfügung gestellt und setzen Sie auf den Code die Fehler-Routine und der Fehler, der gerade zurückgegeben sagt 2012.11.06 06:40 Marktauftrag ecn v1 EURUSDi,M5: Order Send fehlgeschlagen, Fehler # 4051.

Dann auf den Code habe ich einige Änderungen auf OrderSelect und verwenden Ticket getan, aber die Dinge immer noch nicht funktioniert. Auch habe ich eine Suche nach der Bedeutung und was ich gefunden istERR_INVALID_FUNCTION_PARAMVALUE (4051) und leider weiß ich nicht

wie man von hier aus weiterkommt...

Sie müssen die Werte überprüfen, die Sie an die Funktion OrderSend() senden ... sind das die richtigen Typen ? zum Beispiel mussUseSlippage ein int sein, es klingt wie ein bool ... ist LotSize ein double? liegt es im richtigen Bereich ? größer als Min Lot und kleiner als Max Lot und ein Vielfaches von Lot Step ?
 
RaptorUK:
Sie müssen die Werte, die Sie an die Funktion OrderSend() senden, überprüfen ... sind es die richtigen Typen ? zum Beispiel mussUseSlippage ein int sein, es klingt wie ein bool ... ist LotSize ein double? liegt es im richtigen Bereich ? größer als Min Lot und kleiner als Max Lot und ein Vielfaches von Lot Step ?


Hallo RaptorUK,

Es tut mir leid, dass ich Ihre Zeit in Anspruch nehme, wahrscheinlich werden Sie meiner überdrüssig. Also Slippage ist ein int und LotSize ist ein double....und die Dinge immer noch schlecht....

Ich gebe mir wirklich noch Mühe, das zu verstehen, aber es scheint, dass meine Unwissenheit ausgenutzt wird(...)

Mal scheint es ein Problem mit dem Tester zu sein und dann versuche ich es mit Demo. Und hier kann ich keine gegenteilige Order öffnen, wenn der Preis unter dem OrderOpenPrice (für Buy) liegt.

Könnten Sie bitte einen Blick in den beigefügten Code werfen?

Ich möchte nicht, dass Sie den Code für mich schreiben, sondern nur eine kleine Hilfe.

Ich danke Ihnen im Voraus für jede Hilfe und auch für Ihre Geduld.

Luis

Dateien:
 
luisneves:


Hallo RaptorUK,

Es tut mir leid, dass ich Ihre Zeit in Anspruch nehme, wahrscheinlich werden Sie meiner überdrüssig. Also Slippage ist ein int und LotSize ist ein double....und die Dinge immer noch schlecht....

Ich gebe mir wirklich noch Mühe, das zu verstehen, aber es scheint, dass meine Unwissenheit ausgenutzt wird(...)

Mal scheint es ein Problem mit dem Tester zu sein und dann versuche ich es mit Demo. Und hier kann ich keine gegenteilige Order eröffnen, wenn der Preis unter dem OrderOpenPrice (für Buy) liegt.

Könnten Sie bitte einen Blick in den beigefügten Code werfen?

Ich möchte nicht, dass Sie den Code für mich schreiben, sondern nur eine kleine Hilfe.

Ich danke Ihnen im Voraus für jede Hilfe und auch für Ihre Geduld.

Warum haben Sie den richtigen Code in einen falschen Code geändert?

Ihre Schleife ging durch alle Orders im Trades Pool (offene und schwebende Orders) . . . jetzt macht dieser Code keinen Sinn, woher kommt das Ticket beim ersten Durchlauf in der Schleife ?

 for(int Counter=OrdersTotal()-1; Counter>=0; Counter--)
  {
   //OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   OrderSelect( Ticket,  SELECT_BY_TICKET);


noch eine Frage an dich . ... warum ist diese Funktion vom Typ double, wenn sie nichts zurückgibt?