Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 963

 
the size of local variables is too large (more than 512 kb)

Was bedeutet dieser Kompilierfehler und wie kann ich ihn beheben? Ich habe eine Klasse mit etwa 80.000 Zeilen. Muss ich zwei Klassen daraus machen? Das ist Unsinn. Was ist der Sinn dieser 64-Bit-Version, wenn alles so eingeschränkt ist?
 
Juer:
Wie können Sie feststellen, was die Ursache für die lange Kompilierung (über 10 Minuten) ist? Die resultierende ex5-Datei wiegt etwa 12 MB, also nicht sehr viel. Wie kann ich die Gründe für eine so lange Kompilierung diagnostizieren und beheben?

https://www.mql5.com/ru/forum/165399#comment_3968004

Optimieren=0

Ich glaube, das habe ich jetzt geklärt.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
Beim Ändern einer Bestellung muss die Bestellung, auf die sich OrderGetDouble bezieht, vor point= angegeben werden.
 
Ivan Ivanov:
Wenn wir eine Bestellung ändern, sollten wir die Bestellung, auf die sich OrderGetDouble bezieht, angeben, bevor wir point=

Danke Ivan, ich probiere es aus, aber es funktioniert bei mir nicht.

Ich verstehe die Logik selbst nicht, wie man einen Auftrag zur Änderung nach Typ und nicht nach Ticket auswählt und dann auf seine Eigenschaften verweist.

Ich verstehe die Logik nicht, denn in der Auftragsänderung selbst ist das Ticket das Pflichtfeld, das ausgefüllt werden muss, und es gibt keine Auftragsart.

m_trade.OrderModify(ticket,Bid-(SHAG_s*_Point),Ask+((SLL_s-SHAG_s) *_Point),Ask-((TPP_s+SHAG_s)*_Point),0,0,0);

In meinem Fall gibt es zwei offene Aufträge: Buy_Stop und Sell_Stop. Die Reihenfolge ihrer Öffnung kann beliebig sein.

Die Ticketnummer hilft mir hier nicht weiter.

In der Prüfbedingung kann ich herausfinden, ob Sell_Stop (zum Beispiel) unter den offenen Aufträgen ist.

Aber ich kann nicht herausfinden, wie ich diesen speziellen Auftrag Sell_Stop adressieren soll, so dass, wennOrderModify aufgerufen wird

um genau Sell_Stop zu ändern, und nicht etwas, das zufällig unter dem Ticket liegt.

Ich habe das Gefühl, dass die Syntax der Sprache mich dazu bringt, alle Aufträge im Ticket durchzugehen, nur um das Ticketfeld inOrderModify auszufüllen.

Das ist der Punkt, an dem ich mit der Änderung der Bestellung durcheinander gekommen bin. Ich habe die Logik des Prozesses verloren.

 

Gibt es eine Funktion zum Anhängen an ein EA-Diagramm? Wie ChartIndicatorAdd().

Oder wie kann ich programmatisch einen EA an ein bestimmtes Diagramm anhängen, wenn es keine Vorlage gibt?

 

Wie übersetzt man in mql5?

OP_LOTS = (((AccountBalance() * _LosPercent) / 100) / MarketInfo(Symbol(), MODE_TICKVALUE)) / (pp);
        OP_LOTS = MathRound(OP_LOTS / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
        OP_LOTS = MathMax(OP_LOTS, MarketInfo(Symbol(), MODE_MINLOT));
        OP_LOTS = MathMin(OP_LOTS, MarketInfo(Symbol(), MODE_MAXLOT));
 
Sprut112:

Wie kann ich in mql5 übersetzen?

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double lotMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double lotMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
Wird in beiden Versionen funktionieren.
 

Bitte beraten Sie mich.

Es gibt ein Beispiel in der Hilfe: Allgemeiner Algorithmus der Arbeit mit Aufträgen.

  {
//--- получим общее количество ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
   {
   ResetLastError();
//--- скопируем в кэш ордер по его номеру в списке
   ulong ticket=OrderGetTicket(i);
   if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
   {
   double price_open   =OrderGetDouble(ORDER_PRICE_OPEN);
   datetime time_setup =OrderGetInteger(ORDER_TIME_SETUP);
   string symbol       =OrderGetString(ORDER_SYMBOL);
   long magic_number   =OrderGetInteger(ORDER_MAGIC);
   if(magic_number    ==m_magic)
   {
//  обработаем ордер с заданным ORDER_MAGIC
   }
   PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
   }
   else  // вызов OrderGetTicket() завершился неудачно
   {
   PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
   }
   }
  }

Bei der Kompilierung erhalte ich eine Warnung zum Typdatetime, offenbar gibt es einen Konflikt bei der Typkonvertierung.

Ich verstehe nicht, wo das Problem liegt; laut HilfehatORDER_TIME_SETUP den Typdatetime.

Was ist das Problem und wie kann es behoben werden?

 
vladzeit:

Bitte beraten Sie mich.

Es gibt ein Beispiel in der Hilfe: Allgemeiner Algorithmus der Arbeit mit Aufträgen.

Bei der Kompilierung erhalte ich eine Warnung zum Typdatetime, offenbar gibt es einen Konflikt bei der Typkonvertierung.

Ich verstehe nicht, wo das Problem liegt; laut HilfehatORDER_TIME_SETUP den Typdatetime.

Was ist das Problem und wie kann es behoben werden?

datetime time_setup =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
//....
long magic_number   =(long)OrderGetInteger(ORDER_MAGIC);

OrderGetInteger sollte in den richtigen Typ konvertiert werden, ebenso wie INT

 
Konstantin Nikitin:

OrderGetInteger muss in den richtigen Typ konvertiert werden, ebenso INT

Danke für das Beispiel.

Bitte klären Sie... wenn ich richtig verstanden habe.

mit this=(datetime)OrderGetInteger. teilen wir OrderGetInteger mit, dass es den expliziten Typdatetimeannehmen soll.?

Gilt diese Regel für alle Funktionen, die keinen expliziten Typ haben oder nicht mit dem Typ der zugewiesenen Variablen übereinstimmen, oder ist dies nur ein Sonderfall?

Ich möchte wissen, ob dies eine Regel oder nur ein Sonderfall ist, den man sich merken sollte.