Fehler, Irrtümer, Fragen - Seite 2218

 
fellow:

Was sind das für Zahlen in Anführungszeichen?

wahrscheinlich der Wert des Feldes

 
Georgiy Merts:

Ganz genau.

Meiner Meinung nach sollten alle strukturellen Teile von Programmen zu plattformunabhängigen Blöcken gemacht werden (virtuelle Schnittstellen eignen sich meiner Meinung nach sehr gut dafür), so dass sich Änderungen in den Plattformen auf kleine isolierte Bereiche des Codes auswirken. Hinzu kommt der Vorteil, dass neue Plattformen angeschlossen werden können.

Was die neuen i-Funktionen angeht, so sehe ich mir nur eine an - die Suche nach einer Bar zu einer bestimmten Zeit. Vielleicht funktioniert diese Funktion schneller als meine. Der Rest - da bin ich mir sicher - wird keinen Geschwindigkeitszuwachs im Vergleich zu mir bringen, was bedeutet, dass man nicht nach dem Guten im Schlechten sucht.

Ich habe meine Bibliothek schon vor langer Zeit geschrieben und werde die Neuerungen wahrscheinlich nicht nutzen.

 
Alexey Volchanskiy:

Ich habe meine Bibliothek schon vor langer Zeit auf Barren geschrieben und werde wahrscheinlich keine Innovationen verwenden.

Die systemeigene Suche nach Bar nach Zeit kann wirklich schneller sein.

Jetzt wird sie als Berechnung des gewünschten Taktindexes durch die Zeit des ersten Taktes, des letzten Taktes und der gewünschten Zeit mit anschließender Korrektur eingeschränkt.

Früher habe ich auch die binäre Suche verwendet, aber die direkte Berechnung mit Korrektur erwies sich als schneller.

Und die Entwickler haben vielleicht einen Index, der den richtigen Balken viel schneller findet als diese beiden Optionen.

 
fellow:

Was sind das für Zahlen in Anführungszeichen?

ein String ist ein uchar-Array

In Anführungszeichen steht ein Zeichen, links von den Anführungszeichen steht ein Zeichencode.


genauer gesagt :

void OnStart()
  {
   string s;
   uchar u[1];
   for(int i=32; i<=255; i++)
     {
      u[0]=(uchar)i;
      if(i%16==0) s="";
      s+=IntegerToString(u[0],3)+"-"+CharArrayToString(u)+"  ";
      if (i==152) s+=" ";
      if(i%16==15)  Print(s);
     }
  }
 

die auf 1860 aktualisiert haben, bestätigen Sie das Problem, auf das mehrere Benutzer beim Testen hingewiesen haben?

denn dies ist das zweite Mal, dass der Makler Otkritie diese Aktualisierung übermittelt hat ))

 
Vitaly Muzichenko:

Wenn Sie kostenlose Software verwenden, dann halten Sie sie auf dem neuesten Stand, und wenn es in Zukunft Werbung gibt, ist das auch in Ordnung (kostenlose Software). Niemand schuldet Ihnen etwas.

Die Software ist nicht kostenlos - sie kostet den Makler eine Menge Geld. Ich als Händler zahle dem Makler eine Provision, von der die Entwickler bezahlt werden. Ich bin Gewerbetreibender und möchte angemessen behandelt werden.

Ich kümmere mich nicht um die Funktionen (zur Hölle mit ihnen - ich habe sie neu geschrieben), aber der Tester fing an, alle 2-3 Durchläufe abzustürzen, du hättest eine stabile Version hochladen können

 
Nehmen Sie zumindest die Tatsache, dass sie der Software in 10 Jahren nie beigebracht haben, wie man Drawdowns korrekt berechnet. Ich musste alles selbst schreiben.
 
// Воспроизведение ситуации, когда OrderSend успешно выполнилась, но ордера нет ни среди живых, ни среди мертвых.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
/*
  // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() &&
         (OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0) != -1) &&
         OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ;
*/

  MqlTradeResult Result;
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_DEAL;
  Request.symbol = _Symbol;
  
  do
  {
    Request.position = PositionSelect(Request.symbol) ? PositionGetInteger(POSITION_TICKET) : 0;  
    Request.type = Request.position ? (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)) : ORDER_TYPE_SELL;
    Request.price = Request.position ? PositionGetDouble(POSITION_PRICE_CURRENT) : Bid;
    Request.volume = Request.position ? PositionGetDouble(POSITION_VOLUME) : 1;
          
  } // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() && (OrderSend(Request, Result) ? OrderSelect(Result.order) || HistoryOrderSelect(Result.order) : true));
  
  PRINT(Result.order);
  PRINT(OrderSelect(Result.order));
  PRINT(HistoryOrderSelect(Result.order));
}


Ergebnis zuForexTimeFXTM-Demo01

Result.order = 2210942086
OrderSelect(Result.order) = false
HistoryOrderSelect(Result.order) = false


Das Skript öffnet und schließt Positionen, bis es einen "Phantomauftrag" entdeckt - weder unter den aktuellen noch in der Historie. Sollte ich es als Fehler oder als Plattformfunktion betrachten?


Das Drehbuch ist so geschrieben, dass sich aufgrund dieser Nuance mehrere Stellen öffnen können. Sie verhindert jedoch nicht, dass ein "Phantomauftrag" eingeht.

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.02.08
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
So war es auch bei BCS Forex vor einem Jahr, nachdem die dc etwas in ihrem Berater geändert hatte
 

Hallo. Heute habe ich auf Version 1860 aktualisiert und bin bei der Optimierung des Expert Advisors auf dieses Problem gestoßen:

Verzögerung bei der Optimierung

Die Verzögerung zwischen den Durchgängen beträgt 1 Minute! Können Sie mir bitte sagen, was das Problem sein könnte?

p.s. Vor dem Update funktionierte alles wie am Schnürchen.