[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 962

 
Stellarspace :
Göstergeyi "canlandırmaya" yardım edin. Tarihsel verilere göre çalışıyor, yenilere göre çalışmıyor. En azından bir sebep söyle.


Fikri kelimelerle yazmak daha iyidir.

Evet ve spam yapmak iyi değil. Soruyu tek bir yerde sormak yeterlidir, pek çok yerde değil

 
Techno :
sorun işlemcide değil, danışman kodunda, bir yerlerde yavaş yerler var, ancak bunları teşhis etmek ve kelimelerle düzeltmek imkansız, bir koda ihtiyacınız var

İşte her bir onay işaretinden sorumlu bir kod parçası.

 //***********************************************************************     
    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()
  }
//+------------------------------------------------------------------+

Affedin, iki mesajda - bir tane almıyor.

Belki test cihazında sayma hızını neyin yavaşlattığını görebilirsiniz?

 
volshebnik :

Affedin, iki mesajda - bir tane almıyor.

Belki test cihazında sayma hızını neyin yavaşlattığını görebilirsiniz?

Tüm hata işleme ve metin işlevlerinin (bulma, oluşturma) Uyarıların yanı sıra gereksiz olduğundan emin olabilirsiniz. Onlar olmadan, her şey daha hızlı çalışacak. Hepsi bu kod parçasıyla ilgili.
 
volshebnik :

Affedin, iki mesajda - bir tane almıyor.

Belki test cihazında sayma hızını neyin yavaşlattığını görebilirsiniz?


grafikler gerçekten yavaşlıyor

ve unutmayın mql4'te if()'de koşulların tam bir hesaplaması vardır, yani. birden fazla && varsa, tüm değerler hesaplanır ve karşılaştırılır, ancak && ile yapılan yapının yanlış olması için bir yanlış yeterlidir

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

birkaç if()'ye bölünebilir

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

bu durumda, ilk if()'nin başarısızlığından sonra, aşağıdaki yapının tamamı dikkate alınmayacaktır.

 
aslında, bu kodda sadece 2 sipariş değişikliği yapılır, diğer her şey açıkça gereksizdir..
 
Techno :
aslında, bu kodda sadece 2 sipariş değişikliği yapılır, diğer her şey açıkça gereksizdir..
Nikolay, teşekkürler. Kaldırılan uyarılar ve hata işleme . Hızdaki görsel artış fark edilmez. Evet, emirler burada değiştirilir ve bir piyasa emrinin sayısı ve açılma koşullarının yeri grafiksel olarak gösterilir. Metin işlevlerini bıraktım - sonuçta, hangi sıranın açıldığını grafikte işaretlerler (bu sonraki analiz için gereklidir).
 
volshebnik :
Nikolay, teşekkürler. Kaldırılan uyarılar ve hata işleme. Hızdaki görsel artış fark edilmez. Evet, siparişler burada değiştirilir ve sipariş numarası ve açılma koşulunun yeri grafiksel olarak belirtilir. Metin işlevlerini bıraktım - sonuçta, hangi sıranın açıldığını grafikte işaretlerler (bu sonraki analiz için gereklidir).
analizi bulmak için başka bir yola ihtiyacınız var, grafik işlevleri çok yavaş
 
Techno :
analizi bulmak için başka bir yola ihtiyacınız var, grafik işlevleri çok yavaş
Tüm grafikleri ayrı bir işleve çekebilir ve bir koşulla çağırabilirsiniz. Her ne kadar optimize ederken grafiksel işlevlerin ve uyarıların çalışmadığını ve test hızını düşürmediğini düşündüm.
 
granit77 :
Tüm grafikleri ayrı bir işleve çekebilir ve bir koşulla çağırabilirsiniz. Her ne kadar optimize ederken grafiksel işlevlerin ve uyarıların çalışmadığını ve test hızını düşürmediğini düşündüm.

Bu optimizasyonla ilgili değil, basit testlerle ilgili. Testin ayı 7 dakika sürer.