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

 
Alexandr Sokolov #:


2) Wenn ein Array rückwärts indiziert ist, sollten neue Zellen am Anfang des Arrays erscheinen - was nicht der Fall ist

Warum sollten neue Zellen am Anfang eines Feldes erscheinen? - Wenn ich mich nicht irre, sollte in der Hilfe stehen, dass bei der Verwendung von ArraySetAsSeries() das Array nicht physisch im Speicher neu zugewiesen wird, sondern beim Zugriff auf die Arrayelemente eine umgekehrte Indizierung vorgenommen wird

SZZ: Ihr Beispiel ist kompliziert, ich habe es skizziert:

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   int arr1[] = {1, 2, 3, 4, 5};
   int arr2[] = {1, 2, 3, 4, 5};
   ArraySetAsSeries(arr2, true);
   Print("Start size : ", ArraySize(arr1), " , ", ArraySize(arr2));
   Print("Resize : ", ArrayResize(arr1, 10), " , ", ArrayResize(arr2, 10));
   string s1 = "", s2 = "";
   for(int i = 0, j = 0; i < ArraySize(arr1) && j < ArraySize(arr2); i++, j++)
   {
      s1 += (string)arr1[i] + " , ";
      s2 += (string)arr2[j] + " , ";
   }
   Print("arr1 = ", s1);
   Print("arr2 = ", s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1: arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: Größe ändern : 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1: Startgröße : 5 , 5

 
Bitte teilen Sie uns mit, wie das in MT5 funktioniert
iClose(NULL,PERIOD_CURRENT,shift)

Ich erhalte den Fehler'iClose' - zweideutiger Aufruf einer überladenen Funktion.

Im Allgemeinen besteht das Ziel darin, die TF auszuwählen.

Ich wollte es mit MT4 aus Gewohnheit wählen

if(iClose(NULL, TF(), 1) < iOpen(NULL, TF(), 1))

int TF()
  {
   int tf;
   switch(TF)
     {
      case 1 :
         tf = 1;
         break;
      case 2 :
         tf = 5;
         break;
      case 3 :
         tf = 15;
         break;
      case 4 :
         tf = 30;
         break;
      case 5 :
         tf = 60;
         break;
      case 6 :
         tf = 240;
         break;
      case 7 :
         tf = 1440;
         break;
      case 8 :
         tf = 10080;
         break;
      case 9 :
         tf = 43200;
         break;
      default:
         tf = 10;
         Print(tf);
     }
   return(tf);
  }

Aber ich habe versagt.(

 
Александр 'iClose' - zweideutiger Aufruf einer überladenen Funktion.

Im Allgemeinen besteht das Ziel darin, die TF auszuwählen.

Ich wollte es mit MT4 aus Gewohnheit wählen

Aber ich habe versagt.

Zeiträume im MT5

if(Zeitraum()==1) return "M1";

if(Zeitraum()==2) return "M2";

if(Zeitraum()==3) return "M3";

if(Zeitraum()==4) return "M4";

if(Zeitraum()==5) return "M5";

if(Zeitraum()==6) return "M6";

if(Zeitraum()==10) return "M10";

if(Zeitraum()==12) return "M12";

if(Zeitraum()==15) return "M15";

if(Zeitraum()==20) return "M20";

if(Zeitraum()==30) return "M30";

if(Zeitraum()==16385) return "H1";

if(Zeitraum()==16386) return "H2";

if(Zeitraum()==16387) return "H3";

if(Zeitraum()==16388) return "H4";

if(Zeitraum()==16390) return "H6";

if(Zeitraum()==16392) return "H8";

if(Zeitraum()==16396) return "H12";

if(Zeitraum()==16408) return "Täglich";

if(Zeitraum()==32769) return "Wöchentlich";

if(Zeitraum()==49153) return "Monatlich";

 
Andrei Sokolov #:

Zeiträume in mt5

if(Zeitraum()==1) return "M1";

if(Zeitraum()==2) return "M2";

if(Zeitraum()==3) return "M3";

if(Zeitraum()==4) return "M4";

if(Zeitraum()==5) return "M5";

if(Zeitraum()==6) return "M6";

if(Zeitraum()==10) return "M10";

if(Zeitraum()==12) return "M12";

if(Zeitraum()==15) return "M15";

if(Zeitraum()==20) return "M20";

if(Zeitraum()==30) return "M30";

if(Zeitraum()==16385) return "H1";

if(Zeitraum()==16386) return "H2";

if(Zeitraum()==16387) return "H3";

if(Zeitraum()==16388) return "H4";

if(Zeitraum()==16390) return "H6";

if(Zeitraum()==16392) return "H8";

if(Zeitraum()==16396) return "H12";

if(Zeitraum()==16408) return "Täglich";

if(Zeitraum()==32769) return "Wöchentlich";

if(Zeitraum()==49153) return "Monatlich";

Ich danke Ihnen!

 
Александр #:

Ich danke Ihnen!

Warum mögen Sie ENUM_TIMEFRAMES nicht?

Und Sie können Variablen in Form einer Aufzählung in die Eingabe eingeben und sie nach Belieben auswählen... Warum sollten Sie so ein Durcheinander machen? Und in mql4 ist diese Aufzählung schon lange verfügbar...

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Warum mögen Sie ENUM_TIMEFRAMES nicht?

Und Sie können Variablen als Aufzählung in die Eingabe eingeben und sie nach Belieben auswählen... Warum müssen Sie sich diese ganze Mühe machen? Und in mql4 ist diese Aufzählung schon seit Ewigkeiten verfügbar...

+

 
Alexey Viktorov #:

Warum mögen Sie ENUM_TIMEFRAMES nicht?

Und Sie können Variablen in Form einer Aufzählung in die Eingabe eingeben und sie nach Belieben auswählen... Warum sollten Sie so ein Durcheinander machen? Und in mql4 ist diese Aufzählung auch schon lange verfügbar...

Ich danke Ihnen! Ich hatte keine Ahnung.

 

Kolleginnen und Kollegen, bitte nennen Sie uns den besten Algorithmus, um den Preis der zuvor platzierten Limit-Order zu finden, der dem aktuellen Preis am nächsten liegt - bzw. dem aufsteigenden Verkaufslimit, dem Geldkurs

das Kauflimit, das dem Boden am nächsten ist.

Dieses f-iio zählt die Menge, aber ich benötige den PREIS der zuvor platzierten Limit-Order, damit das f-iio zurückkehrt...


Bislang verwende ich den Mindestpreis für das Verkaufslimit und den Höchstpreis für das Kauflimit....

int Price_of_orders(int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0; // итоговое значение кол-ва ордеров
   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==Magic_)
           {
            //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko #:

Kolleginnen und Kollegen, bitte nennen Sie uns den besten Algorithmus, um den Preis der zuvor platzierten Limit-Order zu finden, der dem aktuellen Preis am nächsten liegt - bzw. dem aufsteigenden Verkaufslimit, dem Geldkurs

das Kauflimit, das dem Boden am nächsten ist.

Dieses f-iio zählt die Menge, aber ich benötige den PREIS der zuvor platzierten Limit-Order, damit das f-iio zurückkehrt...


Bislang verwende ich den Mindestpreis für das Verkaufslimit und den Höchstpreis für das Kauflimit....

Ich möchte die gewünschten Preise mit Tickets und vielleicht noch etwas anderes, z.B. Zeit, in meiner Struktur oder Array speichern und sofort nach dem Hinzufügen nach Preis sortieren. Nach Ressourcen, wenn Sie nicht oft suchen, ist es das gleiche oder ein wenig teurer, und wenn oft, ist es besser zu erinnern. Natürlich, wenn Sie nicht 100500 Aufträge haben) Dann kann es zu teuer sein. Im Allgemeinen wird das Problem der Sortierung in einer Struktur oder einem mehrdimensionalen Array leider nur für den ersten Index gelöst.

Manchmal verwende ich mehrere eindimensionale Arrays mit den gleichen Indizes, Tickets, Zeit, Preise. Und suchen Sie nach dem Index der gewünschten Eigenschaft. Zum Beispiel erhalten wir den Index einer kleineren Zeit oder eines größeren Preises und erhalten das Ticket der notwendigen Reihenfolge. Natürlich ist es eine Krücke, aber es funktioniert eindeutig.

 

Es ist eine Frage aufgetaucht, die bei der Suche nicht gefunden wurde. Ist es möglich, Algotrading im EA zu aktivieren. Abfrage der Eigenschaften des Terminals, ob es aktiviert ist oder nicht.

Und ist es möglich, einen EA in einem Terminal mit aktiviertem Algotrading laufen zu lassen und einen anderen nicht.