[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 962

 
Stellarspace:
Helfen Sie mit, den Indikator "wiederzubeleben". Nach den historischen Daten funktioniert es, aber nicht nach den neuen Daten. Ich bin mir nicht sicher, was ich damit anfangen soll.


Mir wäre es lieber, Sie würden die Idee in Worte fassen.

Und es ist nicht gut, zu spammen. Es reicht aus, eine Frage an einer Stelle zu stellen und nicht an vielen

 
Techno:
Das Problem liegt nicht im Prozessor, sondern im EA-Code, irgendwo gibt es Engpässe, aber man kann sie nicht mit Worten diagnostizieren und beheben, man braucht Code

Hier ist ein Teil des Codes, der für jedes Ticken verantwortlich ist.

//***********************************************************************     
    BarTime=Time[0];
    }else                                                                  // На каждый тик
      {
        Количество = OrdersTotal();                                        // Количество ордеров на данный момент      
        for(i=Количество-1; i>=0;i--)                                      // Цикл перебора ордер
        {
          if (OrderSelect(i,SELECT_BY_POS)==true)                          // Если есть следующий
            {
              Tip=OrderType();                                             // Определения типа ордера
              Alert("Tip ордера=",Tip,", количество по счёту = ",i);
//--------------------------------------------------------------------                
              switch(Tip)                                                  // Переключатель на типы ордеров
                {
                   case 0:  Alert("Ордер BUY",", i = ",i);                 // Если ордер BUY
                            A=OrderMagicNumber();
                            Alert("ТЛ_ТP вверх =",ТЛ_ТPвверх[A],", Bid = ",Bid,", МодифBuy = ",МодифBuy[A],", A = ",A);
                           string Номер_ордера = OrderTicket();            // Имя для создания надписи ордера на терминале
                           string текст = Номер_ордера + Пусто + С1;       // Прибавление к надписи С1
                            Alert("Номер_ордера вверх = ",Номер_ордера);   // Сообщение
                           ObjectFind(Номер_ордера);
                           ObjectCreate(Номер_ордера,OBJ_TEXT,0,Время1 Син_вверх[A],O1C[A]); // Создание надписи номера ордера
                           ObjectSetText(Номер_ордера,текст,13,"Arial",вверх);// Задание свойств надписи
                           double Выше = O1C[A]+4*Point;                   // Координата стрелки вверх
                           string Значок = Время1 Син_вверх[A]+1;           // Имя для создания рисунка стрелки
                           ObjectFind(Значок);
                           ObjectCreate(Значок,OBJ_ARROW,0,Время1 Син_вверх[A],Выше);// Создание обьекта стрелки
                           ObjectSet(Значок,OBJPROP_ARROWCODE,241);        // Создание стрелки
                           ObjectSet(Значок,OBJPROP_COLOR,вверх);          // Создание цвета стрелки
                            Alert ("Значок = ",ObjectSet(Значок,OBJPROP_ARROWCODE,241));
                           Error=GetLastError();                           // Назначение имени функции проверки ошибок
                           switch(Error)                                   // Указатель ошибки
                             {   
                               case 4200 : Alert("Объект уже существует");
                           break;                                          // Выход из switch
                               default: Alert("Другая ошибка ",Error);     //Другие варианты   
                             }
                           
 if (NormalizeDouble(Bid,Digits)>=NormalizeDouble(ТЛ_ТPвверх[A],Digits) && МодифBuy[A]==false && ТЛ_ТPвверх[A] != 0) // Если цена = или > туннельной линии
    {
      МодифBuy[A]=OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits),OrderOpenPrice()+1*Point,OrderTakeProfit(),0);//Модифи
                               Alert("МодифBuy=",МодифBuy);
                               if (МодифBuy[A]==true)                      // Получилось :)
                                 {
                                   Alert ("Ордер ",OrderTicket()," модифицирован:)");
                                    break;                                 // Из цикла модифи.
                                 }
                               //--------------------------------------------------- 7 --
                               Error=GetLastError();                       // Не получилось :(
                               switch(Error)                               // Преодолимые ошибки
                                 {
                                   case 130:Alert("Неправильные стопы");
                                   break; 
                                                    
                               // Критические ошибки
                                 case 2 : Alert("Общая ошибка.");
                                   break;                                  // Выход из switch
                                 case 133:Alert("Торговля запрещена");
                                   break;                                  // Выход из switch
                                 default: Alert("Возникла ошибка ",Error);//Др. ошибки
                                 }
                                break;                                     // Из цикла модифи.
                             }                                    
                break;                                                     // Выход из switch
                   case 1:  Alert("Ордер Sell , i = ",i);                  // Если ордер Sell
                           B=OrderMagicNumber();
                           Номер_ордера = OrderTicket();                   // Имя для создания надписи ордера на терминале
                           текст = Номер_ордера + Пусто + С1;              // Прибавление к надписи С1
                            Alert("Номер_ордера вниз =  ",Номер_ордера);   // Сообщение
                           ObjectFind(Номер_ордера); 
                           ObjectCreate(Номер_ордера,OBJ_TEXT,0,Время1 Син_вниз[B],O1C[B]); // Создание надписи номера ордера
                           ObjectSetText(Номер_ордера,текст,13,"Arial",вниз); // Задание свойств надписи
                           double Ниже = O1C[B]-4*Point;                   // Координата стрелки вверх
                           Значок = Время1 Син_вниз[B]+1;                   // Имя для создания рисунка стрелки
                           ObjectFind(Значок);
                           ObjectCreate(Значок,OBJ_ARROW,0,Время1 Син_вниз[B],Ниже); // Создание обьекта стрелки
                           ObjectSet(Значок,OBJPROP_ARROWCODE,242);        // Создание стрелки
                           ObjectSet(Значок,OBJPROP_COLOR,вниз);           // Создание цвета стрелки
                            Alert ("Значок = ",ObjectSet(Значок,OBJPROP_ARROWCODE,242));
                           Error=GetLastError();                           // Назначение имени функции проверки ошибок
                           switch(Error)                                   // Указатель ошибки
                             {   
                               case 4200 : Alert("Объект уже существует");
                           break;                                          // Выход из switch
                               default: Alert("Другая ошибка ",Error);     //Другие варианты   
                             }     
                            Alert("ТЛ_ТP вниз =",ТЛ_ТPвниз[B],", Bid = ",Bid,", МодифSell = ",МодифSell[B], ", B = ",B);
 
  if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
    {
      МодифSell[B]=OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits),OrderOpenPrice()-1*Point,OrderTakeProfit(),0);//Модифи
                               Alert("МодифSell=",МодифSell[B]);
                               if (МодифSell[B]==true)                     // Получилось :)
                                 {
                                   Alert ("Ордер ",OrderTicket()," модифицирован:)");
                                   
                                   break;                                  // Из цикла модифи.
                                 }
                               //--------------------------------------------------- 7 --
                               Error=GetLastError();                       // Не получилось :(
                               switch(Error)                               // Преодолимые ошибки
                                 {
                                   case 130:Alert("Неправильные стопы");
                                   break; 
                                                    
                               // Критические ошибки
                                 case 2 : Alert("Общая ошибка.");
                                   break;                                  // Выход из switch
                                 case 133:Alert("Торговля запрещена");
                                   break;                                  // Выход из switch
                                 default: Alert("Возникла ошибка ",Error); //Др. ошибки
                                 }
                                break;                                     // Из цикла модифи.
                             }                                    
                break;                                                     // Выход из switch
                   default: Alert("Другие ордера",", i = ",i);    
                }
            }
        }                                                                  //Конец перебора орд.
      }                                                                    // Конец условия есть новая свеча или нет 
       Alert("ТЛ_ТP вниз[",B,"] = ",ТЛ_ТPвниз[B],", ТЛ_ТP вверх[",A,"] = ",ТЛ_ТPвверх[A]);
           
return(0);                                                                 // Выход из start()
  }
//+------------------------------------------------------------------+

Entschuldigung für die zwei Beiträge - kann nicht in einen passen.

Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?

 
volshebnik:

Entschuldigung für die zwei Beiträge - kann nicht in einen passen.

Vielleicht können Sie sehen, dass die Geschwindigkeit des Testers langsamer wird?

Nun, es ist sicher zu sagen, dass alle Fehlerbehandlungs- und Textfunktionen (Suchen, Erstellen) sowie die Warnmeldungen unnötig sind. Ohne sie wird alles schneller gehen. Das ist alles über diesen Teil des Codes.
 
volshebnik:

Entschuldigung für zwei Nachrichten - es passt nicht in eine.

Vielleicht können Sie sehen, dass es die Zählgeschwindigkeit im Testgerät verlangsamt?


Die Grafik wird definitiv langsamer.

Und vergessen Sie nicht, dass es in mql4 eine vollständige Berechnung der Bedingungen in if() gibt, d.h. wenn Sie mehrere && haben, werden alle Werte berechnet und verglichen, obwohl ein false ausreicht, damit die Konstruktion mit && falsch ist

if (NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && МодифSell[B]==false && ТЛ_ТPвниз[B] != 0) // Если цена = или > туннельной линии
    

ist es möglich, sie in mehrere if() aufzuteilen

if (МодифSell[B]==false) // Если цена = или > туннельной линии
    { if(NormalizeDouble(Bid,Digits)<=NormalizeDouble(ТЛ_ТPвниз[B],Digits) && ТЛ_ТPвниз[B] != 0)
          {
...........

in diesem Fall wird nach dem ersten if() das gesamte folgende Konstrukt nicht mehr berücksichtigt

 
Im Wesentlichen führt dieser Code nur 2 Auftragsänderungen durch, alles andere ist offensichtlich überflüssig...
 
Techno:
Tatsächlich führt dieser Code nur 2 Auftragsänderungen durch, alles andere ist offensichtlich überflüssig...
Nikolay, ich danke dir. Ich habe Warnungen und Fehlerbehandlung entfernt. Ich kann keinen sichtbaren Geschwindigkeitsgewinn feststellen. Ja, die Aufträge werden hier geändert, und die Nummer des Marktauftrags und der Ort, an dem er geöffnet wurde, werden grafisch dargestellt. Ich habe die Textfunktionen belassen, da sie auf dem Diagramm markieren, welcher Auftrag geöffnet wurde (dies ist für die weitere Analyse notwendig).
 
volshebnik:
Nikolai, ich danke dir. Ich habe alle Warnungen und Fehlerbehandlungen entfernt. Es gibt keine sichtbare Erhöhung der Geschwindigkeit. Ja, die Aufträge werden hier geändert und die Auftragsnummer und der Ort der offenen Bedingung werden grafisch angezeigt. Ich habe die Textfunktionen belassen, da sie auf dem Diagramm markieren, welcher Auftrag geöffnet wurde (wir brauchen sie für die weitere Analyse).
Wir müssen einen anderen Weg der Analyse finden, grafische Funktionen sind sehr langsam
 
Techno:
Sie müssen einen anderen Weg zur Analyse finden, grafische Funktionen sind sehr langsam.
Sie könnten alle Grafiken in eine separate Funktion ziehen und diese mit einer Bedingung aufrufen. Allerdings dachte ich, dass grafische Funktionen und Warnmeldungen bei der Optimierung nicht funktionieren und die Prüfgeschwindigkeit nicht verringern.
 
granit77:
Sie könnten alle Grafiken in eine separate Funktion ziehen und diese mit einer Bedingung aufrufen. Allerdings dachte ich, dass grafische Funktionen und Warnmeldungen bei der Optimierung nicht funktionieren und die Prüfgeschwindigkeit nicht verringern.

Ich spreche nicht von Optimierung, ich spreche von einfachen Tests. Ein Monatstest dauert 7 Minuten.