[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 28

 
Ek bir yüzde kontrolü yapın.
 
TheXpert :
Yüzde üzerinde ek bir kontrol yapın.

hangi aşamada ve neyin neye oranı?

bunu start() içine koy

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

çünkü init() içinde çalışmaz,

Hala Point'i kontrol edebilir misin?

Bakalım ne verecek...

 
OlegTs :

hangi aşamada ve neyin neye oranı?

bunu start() içine koy

çünkü init() içinde çalışmaz,

Hala Point'i kontrol edebilir misin?

Bakalım ne verecek...


print() içinde Nokta ile eklenen Rakamlar, çünkü Dört pencerede aynı Expert Advisor'a sahibim, şu resmi aldım:


onlar. üç pencerede beş basamak var ve birinde dört basamak var, böyle bir aksaklık,

Tüm pencereleri kapattım, yeniden açtım, danışmanlar kurdum, her yere beş işaret ...

Pencereleri açtığımda DC'nin biraz kimyası varmış gibi görünüyor.

Soru kapanmıştır...

 
koruyucuları ve komut dosyalarını nasıl veya nereye ekleyeceğimi söyle ???
 
Roman. :


Bir Expert Advisor'da, onlardan gösterge değerleri elde etmek için olası zaman dilimlerini programlı olarak numaralandırma ve optimize etme olasılığını sordunuz. Bu şu şekilde mümkündür - örneğin -

dosyadaki kod parçaları - böyle bir işlemin yapıldığı dergiden bir uzman - her şey yorumlarla ayrıntılı olarak anlatılıyor

Belki başka biri böyle bir şeyi faydalı bulur.

Teşekkür ederim ! Şu an için TF değerlerini manuel olarak değiştiriyorum (optimizasyon uzun sürüyor ve her TF'nin sonuçlarına göre analiz ayrı oluyor).

İşte yardımcı olabilecek herkes için başka bir soru. Standart olmayan bir fraktalın varyantları ve MA molasından sonra herhangi bir mumdan gelen potansiyel sinyalleri belirlemek için kod (bu tasarımla, aradan sonra ihtiyacım olan mum sayısını belirleyebilirim.) Ama....! Optimizasyon "istemiyor"...((Yalnızca BİR parametre Period_MA'nın optimizasyonunu bir yılda 3'ten 5'e ayarlarsam, birkaç dakikadan fazla sürer. 2'den 240'a ayarlarsanız, o zaman bilgisayarı unutabilirsin .... orada genel olarak donuyor ve ne kadar zamana ihtiyaç duyulduğunu vermiyor ... Optimizasyona diğer parametreleri dahil etmekten bahsetmiyorum - SL, TP, MODE, PRICE_TYPE. , mümkünse, kodda yanlış olan ne ...? Optimizasyon neden devam etmiyor.. Kod çalışıyor - kontrol edebilirsiniz. Aslında kodun kendisi:

 #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 ;                                     // Выход из цикла
                   }
               }
      }
    }        


Hepsi uymadı, daha fazlasını ekleyeceğim.

Yakalama nedir, bana söyleyebilir misin, kim bilir ..?

 

Burada :

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

 

Ve bitiyor:

 //+------------------------------------------------------------------+
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,отмена);                         // Удаление ордера
 
koruyucuları ve komut dosyalarını nasıl veya nereye ekleyeceğinizi söyler misiniz???
 
DKD1000 :

koruyucuları ve komut dosyalarını nasıl veya nereye ekleyeceğinizi söyler misiniz???

https://docs.mql4.com/ru/ her şeyin depolandığı dizinler yazılır
 
abolk :

https://docs.mql4.com/ru/ her şeyin depolandığı dizinler yazılır

Teşekkür
Neden: