[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 768

 
FoxUA:


Ich brauche nur die Funktion aufzurufen, das ist alles, was ich brauche, eine Zeile "Wenn es mehr Bestellungen als eine gibt .... und das ist alles" - und Sie bieten mir eine ganze Funktion an

So speichere ich meine Auftragsdaten


Es ist ganz einfach: Legen Sie es in die Bibliothek.

Gibt man die Art des zu zählenden Auftrags und seinen Master ein, so erhält man die Anzahl der offenen oder gesetzten Aufträge.

int ChPos( int TypePos,int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return(count);
}

Sie können es folgendermaßen verwenden

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak:


Es ist nicht kompliziert, es in die Bibliothek zu stellen.

Die Eingabe ist die Art des zu zählenden Auftrages und sein Master, sie liefert die Anzahl der offenen oder gesetzten Aufträge.

Dies kann folgendermaßen genutzt werden

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

Ich habe eine solche Funktion, aber ich brauche sie nicht, ich brauche nur
nur eine Zeile "wenn es mehr Aufträge gibt als einen .... dann" und das war's

Meine Daten für dieselbe Funktion, die Sie gezeigt haben, sind hier gespeichert

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

und so sieht es aus

void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
 

Ich glaube, ich habe es.

static int aaa = OrdersHistoryTotal()+ OrdersTotal()

if (Ihre Bedingung && aaa < OrdersHistoryTotal()+ OrdersTotal() )

{

Betreiber

aaa=AuftragshistorieSumme()+Auftragssumme()

}

Wenn ja, ist es immer noch besser, sie in eine Funktion für Magier zu integrieren. Können Sie uns sagen, woran Sie gerade arbeiten? Die Logik ist etwas seltsam, wenn ich es richtig verstanden habe. Wenn ein weiterer Auftrag eröffnet wird, ist es dann nicht einfacher, Aufträge zu eröffnen, die nicht größer sind als die OpenPosition?

Ihre Funktion gibt die Gesamtzahl der offenen und schwebenden Aufträge zurück. Wie viele Aufträge OP_BUY, OP_BUYLIMIT OP_SELLLIMIT OP_SELL usw. sind, wird nicht angezeigt.

 
ivandurak:

Ich habe es herausgefunden, jetzt das Problem mit der Funktion if ist, dass ich nicht herausfinden kann, was das Problem ist.

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

es geht darum, dass der erste Wert ausgeführt wird.

Diese funktioniert nicht , wenn (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS); // Auswählen
} }

mit anderen Worten, wenn es einen Auftrag HaveBuyLimitOrderEnd gibt, ändern Sie ihn mit einer Preisänderung PRAskS

Ich kann nicht herausfinden, was falsch ist. Der Wert von HaveBuyLimitOrderEnd wird aus der void Myorders() im obigen Code übernommen

der Wert if(bt==1&&bl==7) ist main, d. h. wenn er wahr ist, sind alle folgenden Angaben zu machen


höchstwahrscheinlich haveBuyLimitOrderEnd== true weil ich OrderLots()==3*Lot eingestellt habe alles funktioniert nur es ändert Aufträge mit 0.3 Lot

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
Bitte beachten Sie, dass diese in rot hervorgehoben ist. Die Art der Handelsaufträge ist die gleiche und die Variablen in der Pipe sind unterschiedlich gesetzt, so sollte es sein.
 
ivandurak:
Beachten Sie, was rot hervorgehoben ist. Die Art der Handelsaufträge ist die gleiche und die Variablen in der Pipe sind unterschiedlich gesetzt, so sollte es sein.

Ja, es sollte sein, denn es gibt verschiedene Funktionen zu öffnen und ich nicht eine Anforderung für OrderType () und forderte die Flagge, ob es offen ist, aber das Problem ist wahrscheinlich nicht in dieser Funktion, weil die anderen Anforderungen auch nicht funktionieren dies warf ich zuerst, und auf der gleichen Funktion öffnen NORMAL

DAS PROBLEM LIEGT ALSO BEI DER ANFRAGE DES BETREIBERS

 

Das Problem scheint woanders zu liegen. Aber Sie sollten sich den Code ansehen.

 
Vinin:

Das Problem scheint woanders zu liegen. Aber ich glaube, ich muss den Code sehen.


Es ist definitiv nicht anderswo, alles andere funktioniert, das Problem ist, dass die Anforderung (HaveBuyLimitOrderEnd== true) falsch ist, so dass ich mich frage, wie sonst zu sagen, es zu ändern und zu löschen,

oder die Abfrage selbst ist falsch

if(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);

if (HaveBuyLimitOrderEnd== true)

{ModifyBuyStopOrder(PRAskS);
} }

 
FoxUA:

Ja, es sollte sein, denn es gibt verschiedene Funktionen zu öffnen und ich nicht eine Anforderung für OrderType () und forderte die Flagge, ob es offen ist, aber das Problem ist wahrscheinlich nicht in dieser Funktion, weil die anderen Anforderungen auch nicht funktionieren dies warf ich zuerst, und auf der gleichen Funktion öffnen NORMAL

DAS PROBLEM LIEGT ALSO BEI DER ABFRAGE IM OPERATOR

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


Ich frage mich, ob in rot markierten Funktionen HaveBuyLimitOrderEnd in der Pipe gesetzt ist. Wenn nicht, müssen Sie Myorders() vor if aufrufen. Andernfalls haben Sie keine Ahnung, was sich dort befindet. Und nur für den Fall, dass die Flaggen (Variablen)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
muss auf globaler Ebene definiert werden.

 
ivandurak:


Ich frage mich, ob das HaveBuyLimitOrderEnd-Flag in der Pipe rot gesetzt ist. Wenn nicht, müssen Sie Myorders() vor if aufrufen. Sonst weiß man nicht, was da ist. Und für den Fall der Fälle: Flags (Variablen)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
muss global definiert werden.

sie befindet sich auf einer glabalen Ebene


bool HaveBuyOrder; // Flagge, ob Kaufaufträge auf dem offenen Markt vorhanden sind
bool HaveSellOrder; // Flagge für offene Marktaufträge zum Verkauf
bool HaveBuyStopOrder; // Flagge für offene, ausstehende Kaufaufträge
bool HaveSellStopOrder; // Flagge für offene schwebende Verkaufsaufträge
bool HaveBuyLimitOrder; // Flagge für offene, ausstehende Kaufaufträge
bool HaveSellLimitOrder; // Flagge für offene, ausstehende Verkaufsaufträge
bool HaveBuyLimitOrderEnd; // Flagge für das Vorhandensein offener, schwebender Kaufaufträge
bool HaveSellLimitOrderEnd; // Kennzeichnung offener Verkaufsaufträge

es ist in der Funktion zur Auftragseröffnung.

ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE);
wenn (Ticket > 0) {
HaveBuyStopOrder = true;

if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("Funktion zum Platzieren einer BuyStop-Order: ", OrderOpenPrice())
}
else Print("Error # ", GetLastError(), " function for placing BuyStop order",MarketInfo(Curr_symb,MODE_ASK));
zurück(ticket);
}

DAMIT ALLES ANDERE FUNKTIONIERT

Grund der Beschwerde: