Diskussion zum Artikel "Beschränkungen und Überprüfungen in Expert Advisors" - Seite 2

 

Ich danke Ihnen.

 
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

SYMBOL_VOLUME_LIMIT' - nicht deklarierter Bezeichner.............

'SymbolInfoDouble' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden.............

Liegt es nur an mir?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
gumgum:

SYMBOL_VOLUME_LIMIT' - nicht deklarierter Bezeichner.............

'SymbolInfoDouble' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden.............

Liegt das nur an mir?

Sobald ein neuer Build veröffentlicht wird, wird alles wieder normal sein. Wir warten auf den Build.
 
Rosh:

Können Sie das tun?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

Noch eine Frage zur Funktion SeriesInfoInteger().

Beim Erstellen des Themas"AccountInfo... Informationsrelevanz" habe ich gelernt, dass es Funktionen gibt, die "in der Softwareumgebung zwischengespeicherte Daten" verwenden und es gibt Funktionen, die immer "direkten Zugriff auf aktuelle Daten" haben.

Zu welcher Kategorie von Funktionen gehört die Funktion SeriesInfoInteger()?

 

Der folgende Code wird in der Funktion CheckVolumeValue verwendet:

int ratio=(int)MathRound(volume/volume_step);

if(MathAbs(ratio*volume_step-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

volume_step,ratio*volume_step);

return(false);

}

Aber er ist korrekter:

int ratio = (int)MathRound((volume-min_volume)/volume_step);

if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

  volume_step,ratio*volume_step+min_volume);

return(false);

}

Denn der minimale Schritt der Volumenänderung muss vom Minimalwert aus gezählt werden.

 

Und vielleicht sollte der Codeschnipsel

//--- вычислим значение маржи

bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);

ersetzt werden durch:

//--- вычислим значение маржи

double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;

bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);

[Gelöscht]  
Die beigefügten Quellcodedateien und die Quellcodeeinschübe im HTML-Code sind jetzt vollständig ins Portugiesische übersetzt, um Ihnen die Arbeit zu erleichtern.
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Rashid Umarov:

Aufgrund von Änderungen in MQL5 kann nun das maximal zulässige Gesamtvolumen für ein Symbol wie folgt ermittelt werden:

Verwenden Sie nicht die alte Variante! Sie war wie folgt:

Der Artikel wurde korrigiert und der neue Expertencode Check_Order_And_Volume_Limits.mq5 wurde angehängt.

Lieber Admin

ich versuche, diese Funktion zu verwenden, aber sie gibt in allen Fällen 0 zurück.

Mein MT5-Build ist 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


gibt Fehler, keine solche Funktion

Und nachdem ich die Funktion so modifiziert habe, dass sie keine schwebenden Aufträge berücksichtigt, ergibt sie 0


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- die Begrenzung des Höchstvolumens eines Auftrags
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- Ermittlung der Volumenbegrenzung durch ein Symbol
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- Ermitteln des Volumens der offenen Position für ein Symbol
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- wenn wir bereits verfügbares Volumen verwendet haben
      if(max_volume-opened_volume<=0)
         return(0);

      //--- das Volumen der offenen Position überschreitet nicht max_volume
      //double orders_volume_on_symbol=PendingsVolume(symbol);
      //allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

Das liegt daran, dass max_volume 0 ist und opened_volume 0;

Warum ist das maximale Volumen 0, wenn es keine offenen Positionen gibt?

Build 2715

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5