Diskussion zum Artikel "Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll" - Seite 5

 
Oleksii Chepurnyi:
Aber dann besteht die Gefahr, ein Geschäft zu verpassen.....
Es geht um den Markt. Also sollte es keine Fehler geben. Oder es sollte ihre angemessene Verarbeitung geben.
 
Artyom Trishkin:
Es geht um den Markt. Also sollte es keine Fehler geben. Oder es sollte ihre angemessene Verarbeitung geben.

Wenn es nicht um den Markt ginge, würde ich mir nicht viel Mühe geben :)

Ich verstehe, dass die Marge für Slippage ist?

 
Oleksii Chepurnyi:

Wenn es nicht um den Markt ginge, hätte ich mir nicht viel Mühe gegeben :)

Ich verstehe, dass die Marge für Slippage ist?

Ja, in der Tat, um die Wahrscheinlichkeit eines Fehlers im Falle von starken Preisbewegungen ein bisschen mehr zu reduzieren

 
Oleksii Chepurnyi:

Wenn es nicht um den Markt ginge, hätte ich mir nicht viel Mühe gegeben :)

Ich verstehe, dass die Marge für Slippage ist?

Slippage - bei der Ausführung, und hier - Korrektheit der Handelsanfrage zum Zeitpunkt der Marktumgebung Zustand.

Berechnet - Korrektheit geprüft, ggf. korrigiert und die Anfrage abgeschickt. Dann haben wir das Ergebnis der Anfrage überprüft. Dies geschieht auf der EA-Seite.

Und die Ausführung erfolgt auf der Serverseite, und der Slippage-Wert wird bereits vom Serverteil benötigt, um die Anfrage zu akzeptieren oder abzulehnen, wenn sich der Preis ändert.

 

Nachmittags.

Aus der Dokumentation:

SYMBOL_VOLUME_LIMIT.

Das für dieses Symbol maximal zulässige Volumen ist das Gesamtvolumen einer offenen Position und schwebender Aufträge in einer Richtung (Kauf oder Verkauf). Wenn das Limit z.B. 5 Lots beträgt, können Sie eine offene Buy-Position mit einem Volumen von 5 Lots haben und eine Sell Limit pending Order mit einem Volumen von 5 Lots platzieren. Sie können jedoch keine schwebende Kauf-Limit-Order platzieren (da das Gesamtvolumen in einer Richtung das Limit überschreitet) oder eine Verkaufs-Limit-Order von mehr als 5 Lots platzieren.


Soweit ich das verstanden habe, sollte die Berechnung das Volumen aller Positionen und Aufträge nur in der Richtung berücksichtigen, in der wir ein Geschäft eröffnen oder einen Auftrag erteilen wollen.

Aber hier wird die Begrenzung der Anzahl der Lots für ein Symbol die Richtung überhaupt nicht berücksichtigt....

Oder habe ich etwas missverstanden?

 
Vladislav Andruschenko:

Vielleicht sollte das Lot in dieser Funktion normalisiert werden, so dass es kein Disabled gibt.

und dann schreibt die Funktion, dass kein Geld vorhanden ist, aber sie sendet keine Anfrage an den Server, um Positionen zu öffnen, was den Regeln des Marktes entspricht.

Ich habe vor kurzem begonnen, eine solche Anweisung vor etwa 2 Jahren zu verwenden:

Eigentlich funktioniert alles.

Wenn ein Handel eröffnet wird, gibt der Expert Advisor einfach dieZeichenfolge Print("Not Enought Money Margin Required "+( string)margin) zurück;

Der Expert Advisor ist auf dem Markt getestet, alle sind zufrieden damit.

Vielen Dank, Vladislav!

Ihre Variante funktioniert immer noch, im Gegensatz zu meiner, die vorher gut funktionierte, und dieser, auf die uns der Validator verweist:

bool CheckMoneyForTrade(string symb, double lots,int type)
  {
   double free_margin=AccountFreeMarginCheck(symb,lots,type);
   //-- wenn nicht genug Geld vorhanden ist
   if(free_margin<0)
     {
      string oper=(type==OP_BUY)? "Buy":"Sell";
      Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError());
      return(false);
     }
   //-- der Test war erfolgreich
   return(true);
  }
 
Ramiz Mavludov:
Vielen Dank, Vladislav!

Ihre Variante funktioniert immer noch, im Gegensatz zu meiner, die vorher gut funktionierte, und zu dieser, auf die uns der Validator verweist:

Wo wird dieser Code angezeigt?

PS: Ich habe ihn in der portugiesischen und japanischen Version des Artikels gefunden und korrigiert. Es gibt auch gd
 
Oleksii Chepurnyi:

Nachmittags.

Aus der Dokumentation:

SYMBOL_VOLUME_LIMIT.

Das für dieses Symbol maximal zulässige Volumen ist das Gesamtvolumen der offenen Position und der anhängigen Aufträge in einer Richtung (Kauf oder Verkauf). Wenn das Limit zum Beispiel 5 Lots beträgt, können Sie eine offene Buy-Position mit einem Volumen von 5 Lots haben und eine Sell Limit Pending Order mit einem Volumen von 5 Lots platzieren. Sie können jedoch weder eine schwebende Buy-Limit-Order platzieren (da das Gesamtvolumen in einer Richtung das Limit übersteigt) noch eine Sell-Limit-Order von mehr als 5 Lots platzieren.


Soweit ich verstanden habe, sollte die Berechnung das Volumen aller Positionen und Aufträge nur in der Richtung berücksichtigen, in der wir ein Geschäft eröffnen oder einen Auftrag erteilen wollen.

Aber hier wird die Begrenzung der Anzahl der Lots für ein Symbol die Richtung überhaupt nicht berücksichtigt....

Oder habe ich etwas missverstanden?

Sie haben recht, in diesem Beispiel wird die Richtung nicht berücksichtigt. Sie können versuchen, es zu tun, indem Sie das Vorzeichen berücksichtigen: Kaufaufträge werden positiv, Verkaufsaufträge - negativ berücksichtigt. Der Wert und das Vorzeichen in der Ausgabe geben uns das Volumen und die Richtung an.

Wir müssen korrigieren

 
Rashid Umarov:

Wo wird dieser Code angezeigt?

PS Ich habe ihn in der portugiesischen und japanischen Version des Artikels gefunden und korrigiert. Es gibt auch rd

Ich kann ihn jetzt nicht zeigen, denn als ich ihn zur Überprüfung geschickt habe, kam ich im Bericht durch Anklicken des 148-Fehlers auf die

bool CheckMoneyForTrade(string symb, double lots,int type)
  {
   double free_margin=AccountFreeMarginCheck(symb,lots,type);
   //-- wenn nicht genug Geld vorhanden ist
   if(free_margin<0)
     {
      string oper=(type==OP_BUY)? "Buy":"Sell";
      Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError());
      return(false);
     }
   //-- der Test war erfolgreich
   return(true);
  }
Die Version der Website war noch auf Russisch.
 
Rashid Umarov:

Sie haben recht, in diesem Beispiel wird die Richtung nicht berücksichtigt. Wir können versuchen, es zu tun, indem wir das Vorzeichen berücksichtigen: Kaufaufträge werden positiv, Verkaufsaufträge - negativ - aufgenommen. Der Wert und das Vorzeichen am Ausgang geben uns das Volumen und die Richtung an.

Das muss korrigiert werden

Ich verstehe das mit dem Vorzeichen nicht...

Ich schrieb dies

//--- maximale Lautstärke für alle Artikel
   double max_volume = SymbolInfoDouble(CheckSymb,SYMBOL_VOLUME_LIMIT);
   if(ED(max_volume,0)) return(true);
//---
   double sum_volume = 0;
   int    oper = 0;
   if(CheckOperation==ORDER_TYPE_BUY  || CheckOperation==ORDER_TYPE_BUY_LIMIT  || CheckOperation==ORDER_TYPE_BUY_STOP  || CheckOperation==ORDER_TYPE_BUY_STOP_LIMIT)  oper = 1;
   if(CheckOperation==ORDER_TYPE_SELL || CheckOperation==ORDER_TYPE_SELL_LIMIT || CheckOperation==ORDER_TYPE_SELL_STOP || CheckOperation==ORDER_TYPE_SELL_STOP_LIMIT) oper = 2;
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(!pst.SelectByIndex(i)) ShowError;
      if(pst.Symbol()==CheckSymb)
        {
         if(oper==1 && pst.PositionType()==POSITION_TYPE_BUY)  sum_volume += pst.Volume();
         if(oper==2 && pst.PositionType()==POSITION_TYPE_SELL) sum_volume += pst.Volume();
        }
     }
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(!ord.SelectByIndex(i)) ShowError;
      if(ord.Symbol()==CheckSymb)
        {
         if(oper==1 && (ord.OrderType()==ORDER_TYPE_BUY  || ord.OrderType()==ORDER_TYPE_BUY_LIMIT  || ord.OrderType()==ORDER_TYPE_BUY_STOP  || ord.OrderType()==ORDER_TYPE_BUY_STOP_LIMIT))  sum_volume += ord.VolumeCurrent();
         if(oper==2 && (ord.OrderType()==ORDER_TYPE_SELL || ord.OrderType()==ORDER_TYPE_SELL_LIMIT || ord.OrderType()==ORDER_TYPE_SELL_STOP || ord.OrderType()==ORDER_TYPE_SELL_STOP_LIMIT)) sum_volume += ord.VolumeCurrent();
        }
     }
   if(sum_volume+CheckVolume > max_volume)
     {
      Alert(OrdersText(0010),DoubleToString(max_volume,VolumeDigits(CheckSymb)));
      return(false);
     }
//---
   return(true);