Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1620

 
Eine Variable, nicht ein Zitat. Es gibt eine Zählung in einer String-Variablen, und das Double wird in eine String-Variable mit der angegebenen Genauigkeit umgewandelt. Das ist natürlich stark.
 
Übrigens: Es geht um eine fünfstellige Zahl, die mit mehr als fünf Dezimalstellen angegeben wird. Ich wollte eine automatische Prüfung durchführen, aber es stellte sich heraus, dass das in dieser Sprache nicht so einfach ist. In der Zwischenzeit habe ich es manuell mit einem Drucker überprüft. Es gibt nicht mehr als fünf Dezimalstellen, wie oft kommt das vor? Vielleicht war es am Terminal 4?
 
OK, es gibt ein systematisches Ignorieren von Nachrichten. Wir sollten wieder einen Thread starten.
 
pribludilsa #:
Okay, es gibt ein systematisches Ignorieren von Nachrichten. Wir sollten wieder einen Thread starten.

Es hat bereits Themen zu diesem Thema gegeben. in eine Zeichenkette und die Anzahl der zu zählenden Zeichenketten. Sie müssen zuerst die Anzahl der Ziffern vor dem Dezimalpunkt zählen. Sie können sie in eine Ganzzahl umwandeln. Und es ist genauso umständlich, einen String))))

 
Alexey Viktorov #:

Im mt4-Tester ist es nicht möglich, Orders auf andere Paare zu eröffnen, alles andere ist ohne Probleme verfügbar.

Danke, es ist in der Tat möglich, Indikatorwerte von einem anderen Instrument im Tester zu erhalten.
Alexander #:

Prüfen Sie die Verfügbarkeit von Kursen für AUDUSD auf dem richtigen TF

Genau das war das Problem. Die Sache ist die, dass ich an einem freien Tag (Sonntag) getestet und ein Kursarchiv für das gewünschte Symbol (AUDUSD) "heruntergeladen" habe, aber es stellte sich heraus, dass sie an dem freien Tag einfach nicht heruntergeladen werden konnten, weil die Server meines Devisenhändlers an diesem freien Tag nicht verfügbar waren. Und heute am Montag war das Herunterladen des Kursarchivs und der Test erfolgreich.
MakarFX #:
Sorry, falsch, ich wusste es selbst nicht.
Das ist in Ordnung, Ihre Antworten in privaten Nachrichten waren viel wertvoller.

Es ist wirklich schön, dass die Leute hier antworten und sich gegenseitig helfen. Nicht alle Antworten sind in der Dokumentation zu finden)
 
Valeriy Yastremskiy #:

Es hat bereits Themen zu diesem Thema gegeben. in eine Zeichenkette und die Anzahl der zu zählenden Zeichenketten. Sie müssen zuerst die Anzahl der Ziffern vor dem Dezimalpunkt zählen. Sie können sie in eine Ganzzahl umwandeln. Und es ist auch etwas schwierig,)))) in eine Zeichenkette zu bringen.

Ja, das wollte ich auch tun, nur die Umwandlung von Double in String erfolgt mit der angegebenen Genauigkeit, wenn die Genauigkeit nicht angegeben wird, standardmäßig 8 Stellen.

 
Valeriy Yastremskiy #:

Es hat bereits Themen zu diesem Thema gegeben. in eine Zeichenkette und die Anzahl der zu zählenden Zeichenketten. Sie müssen zuerst die Anzahl der Ziffern vor dem Dezimalpunkt zählen. Sie können ihn in eine ganze Zahl umwandeln. Und es ist genauso umständlich, einen String))))

Die Integer-Konvertierung, ja, das ist wahrscheinlich die einzige. Ich habe auch daran gedacht, aber es schien mir zu kompliziert, eine Art Multiplikationszyklus oder Division durch 10 durchzuführen. Ich habe es noch nicht durchdacht.
 
MakarFX #:
//+----------------------------------------------------------------------------+
//| Модификация ордеров                           |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
{
 double
   BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, 
   SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;

   int
   BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;

   double
   op = 0, lt = 0, order_lots = 0;

   int
   tk = 0, b = 0, s = 0;
   price = 0;tp = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol() &&  OrderType() == otype)
              {
               op = NormalizeDouble(OrderOpenPrice(), Digits());
               lt = NormalizeDouble(OrderLots(), 2);
               tk = OrderTicket();
               if(otype == OP_BUY)
                 {
                  b++;
                  if(op > BuyPriceMax || BuyPriceMax == 0)
                    {
                     BuyPriceMax    = op;
                     BuyPriceMaxLot = lt;
                     BuyPriceMaxTic = tk;
                    }
                  if(op < BuyPriceMin || BuyPriceMin == 0)
                    {
                     BuyPriceMin    = op;
                     BuyPriceMinLot = lt;
                     BuyPriceMinTic = tk;
                    }
                 }
               
               if(otype == OP_SELL)
                 {
                  s++;
                  if(op > SelPriceMax || SelPriceMax == 0)
                    {
                     SelPriceMax    = op;
                     SelPriceMaxLot = lt;
                     SelPriceMaxTic = tk;
                    }
                  if(op < SelPriceMin || SelPriceMin == 0)
                    {
                     SelPriceMin    = op;
                     SelPriceMinLot = lt;
                     SelPriceMinTic = tk;
                    }
                 }
               if (otype == OP_BUY || otype == OP_SELL) 
                  {
                   price += OrderOpenPrice() * OrderLots();
                   order_lots += OrderLots();
                  }
              }
//*************************************************************//
double   AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;
      if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/
         (BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Point(), Digits());
      if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/ 
         (SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());
      if (Drawdown < DrawdownClosingMinMaxOrder) 
         avg_price = NormalizeDouble(price / order_lots, Digits);
//*************************************************************//
   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol())
              {
               op  = NormalizeDouble(OrderOpenPrice(), Digits());
               tp = NormalizeDouble(OrderTakeProfit(), Digits());
               lt  = NormalizeDouble(OrderLots(), 2);
               tk  = OrderTicket();

                  if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)
                        if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                  if(otype == OP_SELL && s >= 2  && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == SelPriceMaxTic || tk == SelPriceMinTic)
                        if(Ask > AwerageSelPrice && tp != AwerageSelPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                 if (Drawdown < DrawdownClosingMinMaxOrder)    
                 if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
                 if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits); 
                    {
                    if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
                      Print("Ордера успешно модифицированы!");
                      else Print("Ошибка модификации ордеров!");
                    } 
             } 
}
 
Valeriy Yastremskiy #:

Gibt es etwas, das ich nicht weiß? Es ist auch nicht möglich, Taktdaten von anderen Instrumenten nach der Zeit des Testers zu erhalten, sie werden nach der aktuellen Zeit empfangen. Deshalb kann ich die Mehrwährungsfähigkeit nicht einmal nur im Berechnungsteil von 4ka testen.

Ich dachte immer, dass der MT4-Tester die Umgebung eines einzelnen Instruments vollständig emuliert, und der MT5 die gesamte verfügbare Umgebung.

Oder ist das nicht so?

Valery, achten Sie auf die Zeile

  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);

in meinem Code... Ich verwende die Hex-Funktionen schon seit langem, aber hier ist eine ähnliche Funktion

SymbolInfoInteger("EURJPY", SYMBOL_DIGITS);

gab einen Stackey 0.

Also, denken Sie darüber nach, wo der Fehler liegt... Und da mt4 sich weigert, ihn zu unterstützen, können Sie davon ausgehen, dass er nie behoben werden wird...

Alles andere muss geprüft werden. Ich habe mich schon so lange nicht mehr darum gekümmert, dass ich mich gar nicht mehr daran erinnern möchte.

 

Alexey Viktorov #:

Ich benutze die Freitagsfunktionen schon seit langem

Können Sie vorschlagen, wo ich MQL5 (auf Russisch) lernen kann?