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

 
Artyom Trishkin:
bars[]
Wenn Sie können, zeigen Sie mir bitte den Code.
 
Vitaly Muzichenko:

Der Compiler schimpft es in den höchstenTönen. Haben Sie dieses Design getestet oder nur angenommen, dass es funktionieren sollte, oder mache ich etwas falsch?

Ja, mein Fehler. Nennen Sie es. Im Allgemeinen geht es darum, den Variablen aussagekräftige Namen zu geben, dann müssen Sie keine zusätzlichen Variablen erstellen, deren Existenz nicht immer gerechtfertigt ist.
 
Vasiliy Sokolov:
Ja, mein Fehler. Nennen Sie es. Im Allgemeinen geht es darum, den Variablen aussagekräftige Namen zu geben, dann müssen Sie keine zusätzlichen Variablen erstellen, deren Existenz nicht immer gerechtfertigt ist.

Der Grund ist nicht, etwas auszudrücken, sondern den Code bei der Arbeit mit ihnen zu verkürzen:

if(open1<close1 && close2>close3 && close1>close2 &&

Und der Rest auf die gleiche Weise, sonst wird die Länge der Zeilen größer

Vielen Dank an alle für die Klarstellungen!

 
Vitaly Muzichenko:

Ich habe sie nicht benannt, um etwas auszudrücken, sondern um den Code bei der Arbeit mit ihnen zu reduzieren:

if(open1<close1 && close2>close3 && close1>close2 &&

Und der Rest auf die gleiche Weise, sonst wird die Länge der Zeilen größer

Vielen Dank an alle für die Klarstellungen!

Wenn Sie den Code auf ein Minimum reduzieren wollen, verweisen Sie direkt auf das Datenfeld

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

Guten Tag!

Wo und wie werden erteilte Aufträge und offene Positionen beim Entladen (Löschen) eines Expert Advisors korrekt gelöscht? Wenn es nicht schwierig ist, geben Sie bitte ein Beispiel.

Ich danke Ihnen.

 

Einer der EAs hat irgendeinen seltsamen Unsinn angestellt. Der EA wird normal getestet, wenn Sie auf "Einzeltest ausführen" klicken, wird nur ein einziger, erster Test durchgeführt. Wenn Sie dann auf den einzelnen Test oder auf eine beliebige Zeile in der Optimierung klicken, wird diese im Journal angezeigt:

2017.02.08 13:31:05.165 Tester kann keine Eingaben für Pass 4234087422336 erhalten

2017.02.08 13:31:34.829 Tester kann keine Eingaben für Pass 4076312468706 erhalten

2017.02.08 13:31:47.973 Tester kann keine Eingaben für Pass 1004506640527 erhalten

Die anderen EAs verhalten sich normal. Was könnte das sein?

 

Meine Herren, Aufnahme einer riesigen 10000*10000-Matrix

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Wie effizient ist dieser Algorithmus Ihrer Meinung nach in Bezug auf die Geschwindigkeit?

Bei einer Matrix von 1000*1000 beträgt die Geschwindigkeit nur wenige Sekunden, bei einer Erhöhung auf 10000*10000 wird das System schneller.

 
Top2n:

Meine Herren, Aufnahme einer riesigen 10000*10000-Matrix

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Wie effizient ist dieser Algorithmus Ihrer Meinung nach in Bezug auf die Geschwindigkeit?

Bei einer Matrix von 1000*1000 beträgt die Geschwindigkeit nur wenige Sekunden, bei einer Erhöhung auf 10000*10000 wird das System schneller.

Wie kann man eine solche Matrix erhalten, wenn nicht mehr als vierdimensionale Arrays erlaubt sind?
Gibt es irgendwelche Unklarheiten?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Wie ist es möglich, eine solche Matrix zu erhalten, wenn nicht mehr als vierdimensionale Arrays erlaubt sind?
Gibt es da keine Verwirrung?

Ist 10000 x 10000 nicht eine zweidimensionale Matrix?

double arr[10000][10000];

und so weiter...

 
Alexey Viktorov:
Wie ist es möglich, eine solche Matrix zu erhalten, wenn nicht mehr als vierdimensionale Arrays erlaubt sind?
Gibt es irgendwelche Unklarheiten?
Ja, es ist zweidimensional, also sage ich es nicht richtig, ich sage, es ist keine Matrix, sondern ein Array. Bedeutet eine Matrix Multidimensionalität?