[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 962

 
Stellarspace :
표시기를 "소생"하도록 도와주세요. 과거 데이터에 따르면 작동하지만 새로운 데이터에 따르면 작동하지 않습니다. 최소한 이유를 대십시오.


아이디어는 말로 쓰는 것이 좋습니다.

예, 스팸은 좋지 않습니다. 여러 곳이 아닌 한 곳에서 질문하는 것으로 충분합니다.

 
Techno :
문제는 프로세서가 아니라 어드바이저 코드 어딘가에 느린 곳이 있는데 진단하고 말로 고칠 수 없으니 코드가 필요하다

다음은 각 틱 을 담당하는 코드입니다.

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

용서하십시오. 두 개의 메시지에서 - 하나는 얻지 못합니다.

테스터에서 카운팅 속도가 느려지는 것을 볼 수 있습니까?

 
volshebnik :

용서하십시오. 두 메시지에서 - 하나는 얻지 못합니다.

테스터에서 카운팅 속도가 느려지는 것을 볼 수 있습니까?

글쎄, 당신은 경고뿐만 아니라 모든 오류 처리 및 텍스트 기능(찾기, 생성)이 불필요하다고 확실히 말할 수 있습니다. 그것들이 없으면 모든 것이 더 빨리 작동합니다. 이것이 이 코드의 전부입니다.
 
volshebnik :

용서하십시오. 두 개의 메시지에서 - 하나는 얻지 못합니다.

테스터에서 카운팅 속도가 느려지는 것을 볼 수 있습니까?


그래픽이 정말 느려집니다

그리고 mql4에는 if()의 조건에 대한 완전한 계산이 있다는 것을 잊지 마십시오. &&가 여러 개인 경우 모든 값이 계산되고 비교되지만 &&가 있는 구성은 false로 충분합니다.

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

여러 if()로 나눌 수 있습니다.

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

이 경우 첫 번째 if()가 실패한 후 아래의 전체 구성이 고려되지 않습니다.

 
사실, 이 코드에서는 2차 수정만이 수행되고, 다른 모든 것은 명백히 불필요합니다.
 
Techno :
사실, 이 코드에서는 2차 수정만이 수행되고, 다른 모든 것은 명백히 불필요합니다.
니콜라이, 고마워. 경고 및 오류 처리 를 제거했습니다. 속도의 시각적 증가는 눈에 띄지 않습니다. 네, 여기에서 주문을 수정하고 시장가 주문 번호와 개시 조건의 장소가 그래픽으로 표시됩니다. 나는 텍스트 기능을 남겼습니다. 결국 차트에 어떤 주문이 열렸는지 표시합니다(이는 후속 분석에 필요함).
 
volshebnik :
니콜라이, 고마워. 경고 및 오류 처리를 제거했습니다. 속도의 시각적 증가는 눈에 띄지 않습니다. 네, 여기에서 주문을 수정하고 주문건수와 개봉조건의 장소가 그래픽으로 표시됩니다. 나는 텍스트 기능을 남겼습니다. 결국 차트에 어떤 주문이 열렸는지 표시합니다(이는 후속 분석에 필요함).
분석을 찾는 다른 방법이 필요합니다. 그래픽 기능이 매우 느립니다.
 
Techno :
분석을 찾는 다른 방법이 필요합니다. 그래픽 기능이 매우 느립니다.
전체 그래픽을 별도의 함수로 가져오고 조건과 함께 호출할 수 있습니다. 최적화 할 때 그래픽 기능과 경고가 작동하지 않고 테스트 속도를 줄이지 않는다고 생각했지만.
 
granit77 :
전체 그래픽을 별도의 함수로 가져오고 조건과 함께 호출할 수 있습니다. 최적화 할 때 그래픽 기능과 경고가 작동하지 않고 테스트 속도를 줄이지 않는다고 생각했지만.

최적화가 아니라 간단한 테스트입니다. 시험의 달은 7분 동안 지속됩니다.