[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 28

 
추가 백분율 확인을 수행하십시오.
 
TheXpert :
추가 백분율 확인을 수행하십시오.

어떤 단계에서 무엇에 대한 비율은 무엇입니까?

이것을 start()에 넣어

 if ( Digits == 5 || Digits == 3 ) {SL=SL* 10 ;TP=TP* 10 ;}

왜냐하면 init()에서 작동하지 않습니다.

여전히 포인트 를 확인할 수 있습니까?

나는 그것이 무엇을 제공하는지 볼 것입니다 ...

 
OlegTs :

어떤 단계에서 무엇에 대한 비율은 무엇입니까?

이것을 start()에 넣어

왜냐하면 init()에서 작동하지 않습니다.

여전히 포인트를 확인할 수 있습니까?

나는 그것이 무엇을 제공하는지 볼 것입니다 ...


print()에 Point가 있는 삽입된 Digits, 왜냐하면 네 개의 창에 동일한 Expert Advisor가 있는데 다음과 같은 사진이 있습니다.


저것들. 3개의 창에는 5자리 숫자가 있고 1개에는 4자리 글리치가 있습니다.

나는 모든 창문을 닫고 다시 열었고 고문을 설치하고 도처에 5 개의 표지판을 설치했습니다 ...

내가 창문을 열었을 때 DC는 약간의 케미스트리를 가지고 있었던 것 같다.

질문이 마감되었습니다...

 
보호기 및 스크립트를 삽입하는 방법 또는 위치를 알려주세요 ???
 
Roman. :


Expert Advisor에서 지표 값을 얻기 위해 프로그래밍 방식으로 가능한 시간 프레임을 열거하고 최적화할 수 있는 가능성에 대해 질문했습니다. 이것은 다음과 같은 방법으로 가능합니다 - 예를 들어 -

파일의 코드 조각 - 그러한 작업이 수행된 잡지의 전문가 - 모든 것이 주석과 함께 자세히 설명되어 있습니다.

다른 누군가가 이와 같은 유용한 정보를 찾을 수 있습니다.

고맙습니다 ! 당분간 TF 값을 수동으로 변경합니다(최적화 시간이 오래 걸리고 각 TF의 결과에 따른 분석은 별도).

도움을 줄 수 있는 사람을 위한 또 다른 질문이 있습니다. 비표준 프랙탈의 변형 및 MA 중단 후 양초의 잠재적 신호를 결정하기 위한 코드(이 디자인을 사용하면 중단 후 필요한 양초의 수를 결정할 수 있습니다.) 하지만....! 최적화가 "하기 싫다"...((1년에 1개의 매개변수 Period_MA 의 최적화만 3에서 5로 설정하면 몇 분 이상 걸립니다. 2에서 240으로 설정하면, 당신은 컴퓨터에 대해 잊을 수 있습니다 .... 거기에서 일반적으로 정지되고 얼마나 많은 시간이 필요한지 알려주지 않습니다 ... 최적화에 다른 매개 변수를 포함하는 것에 대해 말하는 것이 아닙니다 - SL, TP, MODE, PRICE_TYPE. , 가능하다면, 코드에 무엇이 잘못되었는지 ...? 최적화가 진행되지 않는 이유는.. 코드가 작동 중입니다. 확인할 수 있습니다. 실제로 코드 자체는 다음과 같습니다.

 #include <stdlib.mqh>

extern int Period_MA = 5 ,                 // Период расчётной МА
           ПрибыльФр= 10 ,                   // Не меньше 4
           HФр = 1 ,                       // Фильтр над фракталом
           Ограничение= 52 ,
           PERIOD= 1 ,                     // Период текущего графика (таймфрейм)
           MODE= 3 ,                         // Метод усреднения из методов скользящего среднего
           PRICE_TYPE= 0 ;                   // Используемая цена из ценовых констант
           
       bool Fact_вверх = false,             // Движения вверх нет
           Fact_вниз = false,             // Движения вниз нет
           Buy = false,                   // Инициализация buystop
           Sell = false,
           ПервФрвверх=false,
           ПервФрвниз=false;
           
     color вверх = SpringGreen ,           // Цвет сделки вверх
           вниз = Red ,                     // Цвет сделки вниз
           отмена = Yellow ,               // Цвет отмены сделки
           Свеча 1 C= Blue ;                   // Цвет номера 1С свечи
           
       int ticketup,                       // Ордер вверх
           ticketdown,                     // Ордер вниз
           BarTime,                       // Время текущего бара
           Tвверх,                         // Время сделки вверх
           Tвниз,                         // Время сделки вниз
           A,                             // Переменная массива вверх
           B;                             // Переменная массива вниз
           
          
   double SL,
          TP,
          PointX;
int init()
  {
   if ( Digits == 5 || Digits == 3 ) PointX = Point * 10 ; // Корректировка Point под трёх- пятизнак
   if ( Digits == 4 || Digits == 2 ) PointX = Point ;
   
   return ( 0 );
  }
//--------------------------------------------------------------------
int start()                       // Спец. функция start
  {
   double MAC1,                   // Значение МА на n баре
          MAC2,                   // Значение МА на следующей свече
          Разность,
          Lot= 0.01 ;               // Лот
          
   string Symb= Symbol (),         // Финанс. инструмент
          С 1 = "C1" ,             // Текст для обозначения ордера
          Пусто = " " ;           // Текст для обозначения ордера
     
       int n= 1 ,                   // Номер свечи, с которой начинается проверка
          Фр;
          
     bool Движ_вниз = false,
          Движ_вверх = false;
          
   if (BarTime!=Time[ 0 ])           // Условие для того, чтобы программа считала только на начале бара, а не на каждом тике
    {          
//--------------------------------------------------------------------
   while (true)                                                         // Цикл по перебору свечей вверх до изгиба МА Синей 
      {
                                                                       // Обращение к функции техн.инд. MA
     MAC1  = iMA ( Symbol (),PERIOD,Period_MA, 0 ,MODE,PRICE_TYPE,n);         // Первая сравниваемая свеча
      n++;                                                             // Переход на следующую свечу
     MAC2  = iMA ( Symbol (),PERIOD,Period_MA, 0 ,MODE,PRICE_TYPE,n);         // Последующая сравниваемая свеча
     Разность = (MAC1 - MAC2)/PointX;                               // Разница МА между соседними свечами
      
//--------------------------------------------------------------------
       if ( NormalizeDouble (Разность, Digits ) >= 1 )                   // Условие движения вверх
        {
          Движ_вверх = true;
          Движ_вниз = false;
          ПервФрвниз=false;
        } 
       if ( NormalizeDouble (Разность, Digits )<- 1 )                       // Выход на противоположное движение  
         break ;                                                         // Выход из цикла while (перебора свечей)
      }                                                               // Конец цикла while (перебора свечей)
//--------------------------------------------------------------------
   if (Движ_вверх == true)
    { 
       Print ( "Движ_вверх" );
       int Количество = OrdersTotal ();                               // Количество ордеров на данный момент      
       for ( int i=Количество- 1 ; i>= 0 ;i--)                             // Цикл перебора ордер
          {
           if ( OrderSelect (i,SELECT_BY_POS)==true)                     // Если есть следующий
            {
               int Tip=OrderType();                                     // Определения типа ордера
//--------------------------------------------------------------------                
               switch (Tip)                                             // Переключатель на типы ордеров
                {
                   case 5 : int N = OrderTicket();                     // Метка удаляемого ордера SELLSTOP
                               Закрыть(N);                             // Вызов функции удаления отложенного ордера
                   continue ;        
                }                                         
            } 
          }
   for (i= 2 ;i<=n- 2 ;i++)
       {
         if ( NormalizeDouble (High[i], Digits )> NormalizeDouble (High[i+ 1 ], Digits )
         && NormalizeDouble (High[i], Digits )> NormalizeDouble (High[i- 1 ], Digits ))
           {
             if (ПервФрвверх==false)
               {
                 ПервФрвверх=true;
                 Фр=i;
               } else
                 {
                   Фр=i;
                 }
           }
         if ( NormalizeDouble (High[i], Digits )== NormalizeDouble (High[i+ 1 ], Digits )
         && NormalizeDouble (High[i], Digits )> NormalizeDouble (High[i+ 2 ], Digits )
         && NormalizeDouble (High[i], Digits )> NormalizeDouble (High[i- 1 ], Digits ))
           {
             if (ПервФрвверх==false)
               {
                 ПервФрвверх=true;
                 Фр=i;
               } else
                 {
                   Фр=i;
                 }
           }  
       }
     if (ПервФрвверх==true)
      {   
         A++;
         Print ( "n = " ,n);
         double ОткрФрвверх=High[Фр]+HФр*PointX;
             SL=Bid-Ограничение*PointX;
             TP=Bid+ПрибыльФр*PointX;                         // Заявленная цена TP
             int Ind_max = ArrayMaximum (High,n, 0 );                               // Индекс бара макс.ц. 
             double max = High[Ind_max];                                         // Искомая макс цена
             int Min_Dist=MarketInfo( Symbol (),MODE_STOPLEVEL);                   // Мин. дистанция
             int Время_фрактала=Time[Фр];
             double Цена_рисунка=Open[Фр];
             if (Tвверх!=Time[Фр])                                                           // Если цена ещё не достигла ТP(при включении сов.)
               {
                 Tвверх=Time[Фр];                                           // Определение времени для этого условия открытия
                 while (true)                                   // Цикл открытия орд.
                  {
                    ticketup= OrderSend (Symb, OP_BUY, Lot, Ask, 0 , SL, TP, NULL ,A, 0 ,вверх); // Ордер вверх
                         int Error= GetLastError ();
                         Print ( "Error = " ,Error);
                         switch (Error)                             // Преодолимые ошибки
                          {
                           case 6 : Alert ( "Нет связи с торговым сервером. Пробуем ещё раз.." );
                           RefreshRates();                     // Обновим данные
                           Sleep ( 1 );                           // Задержка в цикле до нового тика
                         continue ;                                   // На след. итерацию
                          }
                         break ;                                     // Выход из цикла
                   }
               }
      }
    }        


모두 맞지 않았습니다. 추가하겠습니다.

캐치는 무엇입니까, 누가 알겠습니까?

 

여기 :

 //*********************************************************************************************************                         
   n= 1 ;

   while (true)                                                             // Цикл по перебору свечей вниз до изгиба МА Синей
    {
                                                                           // Обращение к функции техн.инд.
     MAC1  = iMA ( Symbol (),PERIOD,Period_MA, 0 ,MODE,PRICE_TYPE,n);               // Первая сравниваемая свеча
      n++;                                                                 // Переход на следующую свечу
     MAC2  = iMA ( Symbol (),PERIOD,Period_MA, 0 ,MODE,PRICE_TYPE,n);               // Последующая сравниваемая свеча
     Разность = (MAC1 - MAC2)/PointX;                                   // Разница МА между соседними свечами
//--------------------------------------------------------------------
       if ( NormalizeDouble (Разность, Digits ) <= - 1 )                       // Условие движения вниз
       {
         Движ_вниз = true;
         Движ_вверх = false;
         ПервФрвверх=false; 
         continue ;
       }
       if ( NormalizeDouble (Разность, Digits )> 1 )                             // Выход на противоположное движение  
         break ;                                                             //Выход из цикла while (перебора свечей)
    }                                                                       //Конец цикла while (перебора свечей)
//-------------------------------------------------------------------- 
     if (Движ_вниз == true)
      {
         Print ( "Движ_вниз" );
         Количество = OrdersTotal ();                                         // Количество ордеров на данный момент      
         for (i=Количество- 1 ; i>= 0 ;i--)                                       // Цикл перебора ордер
          {
           if ( OrderSelect (i,SELECT_BY_POS)==true)                           // Если есть следующий
            {
              Tip=OrderType();                                             // Определения типа ордера
//--------------------------------------------------------------------                
               switch (Tip)                                                   // Переключатель на типы ордеров
                {
                   case 4 : N = OrderTicket();                           // Метка удаляемого ордера BUYSTOP
                               Закрыть(N);                                 // Вызов функции удаления отложенного ордера
                   continue ;        
                }                                         
            } 
          }
   for (i= 2 ;i<=n- 2 ;i++)
       {
         if ( NormalizeDouble (Low[i], Digits )< NormalizeDouble (Low[i+ 1 ], Digits )
        &&   NormalizeDouble (Low[i], Digits )< NormalizeDouble (Low[i- 1 ], Digits ))
           {
             if (ПервФрвниз==false)
               {
                 ПервФрвниз=true;
                 Фр=i;
                 
               } else
                 {
                   Фр=i;
                 }
           }
         if ( NormalizeDouble (Low[i], Digits )== NormalizeDouble (Low[i+ 1 ], Digits )
         && NormalizeDouble (Low[i], Digits )< NormalizeDouble (Low[i+ 2 ], Digits )
         && NormalizeDouble (Low[i], Digits )< NormalizeDouble (Low[i- 1 ], Digits ))
           {
             if (ПервФрвниз==false)
               {
                 ПервФрвниз=true;
                 Фр=i;
                 
               } else
                 {
                   Фр=i;
                 }
           }  
       }
       if (ПервФрвниз==true)
         {
           B++;
             Print ( "n = " ,n);
             double ОткрФрвниз=Low[Фр]-HФр*PointX;
             SL=Bid+Ограничение*PointX- 3 *PointX;
             TP=Bid-ПрибыльФр*PointX-3*PointX;                        // Заявленная цена TP
             int Ind_min = ArrayMinimum (Low,n, 0 );                                   // Индекс бара мин.ц. 
             double min = Low[Ind_min];                                               // Искомая мин цена
             Время_фрактала=Time[Фр];
             Цена_рисунка=Open[Фр];
             if (Tвниз!=Time[Фр])                                         // Если цена ещё не достигла ТP(при включении сов.)
               {
                 Tвниз=Time[Фр];                               // Определение времени для этого условия открытия
                 while (true)                                   // Цикл открытия орд.
                   {
                         Alert ( "Bid = " ,Bid);
                        ticketdown= OrderSend (Symb, OP_SELL, Lot, Bid, 0 , SL,TP, NULL ,B, 0 ,вниз); // Ордер вверх
                        Error= GetLastError ();
                         Print ( "Error = " ,Error);
                        
                         switch (Error)                             // Преодолимые ошибки
                          {
                           case 6 : Alert ( "Нет связи с торговым сервером. Пробуем ещё раз.." );
                           RefreshRates();                     // Обновим данные
                           Sleep ( 1 );                           // Задержка в цикле до нового тика
                         continue ;                                   // На след. итерацию
                          }
                         break ;                                     // Выход из цикла
                   }
               }
         }
      }  
 BarTime=Time[ 0 ];
    }
return ( 0 );                                                                 // Выход из start()
  }

 

그리고 끝:

 //+------------------------------------------------------------------+
int deinit()
  {
     int Количество = OrdersTotal ();                                         // Количество ордеров на момент закрытия советника
     Alert ( "Количество ордеров перед циклом = " ,Количество); 
     for ( int i=Количество- 1 ; i>= 0 ;i--)                                       // Цикл перебора ордеров
     {
     Alert ( "Количество ордеров в цикле = " ,Количество, ", i=" ,i);
       if ( OrderSelect (i,SELECT_BY_POS)==true)                             // Если есть следующий
         {                                                                 // Анализ ордеров:
           bool Ордер = OrderSelect (i,SELECT_BY_POS);                       // Присвоение имени
//------------------------------------------------------ 
             Alert ( "Количество ордеров в цикле внутри if= " ,Количество, ", OrderSelect = " ,Ордер);
           int Tip=OrderType();                                             // Тип ордера
           if (Tip< 2 ) continue ;                                             // Рыночный ордер
           int N = OrderTicket();                                           // Присвоение имени
             Alert ( "Попытка удалить ордер" ,Tip, ", Номер " ,N);
           bool Ans=OrderDelete(N);                                         // Удаление ордера
//--------------------------------------------------------- 
             if (Ans==true)                                                 // Получилось :)
             {
               Alert ( "Удалён ордер " ,Tip, " " ,N);
               continue ;                                                     // Продолжение удаления оставшихся ордеров 
             }
       //--------------------------------------------------------- 
             int Error= GetLastError ();                                     // Не получилось :(
             switch (Error)                                                 // Преодолимые ошибки
              {
               case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
                 Sleep ( 3000 );                                               // Простое решение
                 continue ;                                                   // На след. итерацию
               case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
                 Sleep ( 3000 );                                               // Простое решение
                 continue ;                                                   // На след. итерацию
               case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
                 continue ;                                                   // На след. итерацию
               case 145 : Alert ( "Модификация запрещена. " ,
                               "Ордер слишком близок к рынку" );
                       Sleep ( 3000 );                                         // Простое решение
                       continue ;                                             // На след. итерацию  
              }
             switch (Error)                                                 // Критические ошибки
              {
               case 2 : Alert ( "Общая ошибка." );
                 break ;                                                     // Выход из switch
               case 64 : Alert ( "Счет заблокирован." );
                 break ;                                                     // Выход из switch
               case 133 : Alert ( "Торговля запрещена" );
                 break ;                                                     // Выход из switch
               case 139 : Alert ( "Ордер заблокирован и уже обрабатывается" );
                 break ;                                                     // Выход из switch
               case 145 : Alert ( "Модификация запрещена. " ,
                               "Ордер слишком близок к рынку" );
               break ;                                                       // Выход из switch
               default : Alert ( "Возникла ошибка " ,Error); //Другие варианты   
              }
         } else
         {
           Alert ( "Количество ордеров в цикле после if= " ,Количество, ", OrderSelect = " ,Ордер, ", i=" ,i);
         }
        
     }
//----
   return ( 0 );
  }
//***************************************************************************
       // Описание пользоват. ф-ии закрытия ордеров
      
             void Закрыть( int N)                                   
              {
                 bool Ans=OrderDelete(N,отмена);                         // Удаление ордера
 
보호기 및 스크립트를 삽입하는 방법 또는 위치를 알려주실 수 있나요???
 
DKD1000 :

보호기 및 스크립트를 삽입하는 방법 또는 위치를 알려주세요 ???

https://docs.mql4.com/ru/ 모든 것이 저장된 디렉토리가 작성됩니다.
 
abolk :

https://docs.mql4.com/ru/ 모든 것이 저장된 디렉토리가 작성됩니다.

고마워