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

 
rosomah:

Können Sie mir sagen, ob Sie bei Verwendung der Standardbibliothek, wenn Sie Ask und Bid erhalten, mysymbol.RefreshRates() ausführen müssen;

d.h. aktualisieren oder für Daten aus der Bibliothek nicht aktualisieren müssen?

oder

wenn Sie aktuelle Preise benötigen, brauchen Sie nichts zu tun

if((Bid-Xprice)/Point>=Step)

 

Ich verstehe etwas nicht) Ich habe an diesem Code für 3 Stunden gearbeitet. es ist eine Funktion für ein Raster. es wird beim Öffnen eines neuen Auftrags im Raster aufgerufen, sein Zweck ist es, TP neu zu berechnen und es für alle Aufträge im Raster zu ändern

Es werden jedoch nur die TP der ältesten Reihenfolge im Raster geändert.

Was bringe ich da nur durcheinander?))

void ModifyOrders()
  {
   double avg= 0;
   int count = 0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OP_SELL)
              {
               avg+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   int Tcount=count-1;        // Print("204");
   avg=(Tcount*Step*0.4);
//     avg=NormalizeDouble(avg/count,Digits);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               double Bprice=FindLastBuyPrice();//Print("215");
               TP=NormalizeDouble(Bprice+avg*Point,Digits); //Print("216");
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Blue);// Print("217");
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }

            if(OrderType()==OP_SELL)
              {
               double Sprice=FindLastSellPrice();
               TP=NormalizeDouble(Sprice-avg*Point,Digits);
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Red);
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }
           }
        }
     }

  }
 
Leanid Aladzyeu:

Ich verstehe etwas nicht) Ich habe an diesem Code für 3 Stunden gearbeitet. es ist eine Funktion für ein Raster. es wird beim Öffnen eines neuen Auftrags im Raster aufgerufen, sein Zweck ist es, TP neu zu berechnen und es für alle Aufträge im Raster zu ändern

Es werden jedoch nur die TP der ältesten Reihenfolge im Raster geändert.

Was bringe ich da nur durcheinander?))

Wann werden Sie den Browser wechseln? Genau wie ein Kind.
 
Karputov Vladimir:
Wann werden Sie Ihren Browser wechseln? Genau wie ein Kind.

Es ist ein Problem mit der Website, dass sie nicht an meinen Browser angepasst wurde. Service Desk wie üblich, 0 Hilfe. Ich komme mit meinem Browser gut zurecht.

 
Leanid Aladzyeu:

Es ist ein Problem mit der Website, dass sie nicht an meinen Browser angepasst wurde. Service Desk wie üblich, 0 Hilfe. Ich komme mit meinem Browser gut zurecht.

Sie können immer den Internet Explorer zum Einfügen von Code verwenden - er fügt den Code exakt ein. Denken Sie an Ihre Mitmenschen - es ist peinlich, den Code als Text zu lesen, den Sie einfügen.
 

Können Sie mir den Code für MT4 mitteilen. Wenn ein neuer Balken eingetroffen ist, wird der Chart-Indikator neu gezeichnet.

Ich glaube, ich habe den Code gefunden und setze ihn an den Anfang

if(IsNewBar())
   {
    Print("Новый бар");
    RefreshRates();
    WindowRedraw();

   }

// функция за кодом

 bool IsNewBar()

{

   static datetime BARflag = 0;

   datetime now = Time[0];

   if(BARflag < now)

   {

      BARflag = now;         

      return(1);

   }

   

   else

   {

      return(0);

   }

}


Der Druck geht aus, aber das Diagramm wird nicht neu gezeichnet =(

 
twiling1983:

Können Sie mir den Code für MT4 mitteilen. Wenn ein neuer Balken eingetroffen ist, wird der Chart-Indikator neu gezeichnet.

Ich glaube, ich habe den Code gefunden und setze ihn an den Anfang


Der Druck geht aus, aber das Diagramm wird nicht neu gezeichnet =(

Wahrscheinlich, weil RefreshRates und WindowRedraw keine Auswirkungen auf Indikatoren haben. Sie müssen die Indikatoren ausgraben.
 

Wie man feststellt, was wir auf dem aktuellen Chart kaufen und wofür (krumme Russen, sorry). Im EURUSD-Diagramm beispielsweise ist die Basiswährung (was wir kaufen) der EUR und die notierte Währung (wofür wir kaufen) der USD. Sie können identifiziert werden:

string first = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE);
string second = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT);

Was ist zum Beispiel mit Gold? In einem GOLD-Chart sind beide Werte USD. Und ich muss feststellen, dass wir Gold für USD kaufen. Die Analyse der Zeichenfolge des Symbolnamens ist nicht angemessen.

 
Alexey Viktorov:
Wahrscheinlich, weil RefreshRates und WindowRedraw keine Auswirkungen auf Indikatoren haben. Sie müssen sich mit den Indikatoren befassen.

Nun, wenn Sie im Terminal auf die Schaltfläche "Aktualisieren" klicken, wird alles neu berechnet.

Wie drückt man die gleiche Taste im Code? =)

So sehe ich das auch.

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);

 

Ich habe angefangen, Arrays zu studieren.

Ich habe eine Pro-Order-Funktion mit Arrays geschrieben, 3 Arrays = 0 Kauf, 1= Verkauf, 2= Summe der Kauf- und Verkaufstransaktionen.

Dann schrieb ich eine Bedingung zu kaufen, wenn ( die erste Bedingung & & array [0] == 0 )dann öffnen wir einen Kauf

und beim Verkauf, wenn ( die erste Bedingung && array [1]== 0) dann eröffnen wir eine Verkaufsposition.

Aber der Tester gibt einen Fehler aus und der Test bricht ab. Wo liegt das Problem? ( Fehler " array exit " )