[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 28

 
パーセンテージのチェックを追加してください。
 
TheXpert:
パーセンテージの追加チェックを行う。

どの段階で、何をどのような割合で?

これをstart()に記述します。

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

というのも、init()では動作しないためです。

は、Point(?)をチェックしてみてはいかがでしょうか。

どうなることやら...。

 
OlegTs:

どの段階で、何をどのような割合で?

これをstart()に記述します。

というのも、init()では動作しないためです。

は、Point(?)をチェックしてみてはいかがでしょうか。

どうなることやら...。


同じExpert Advisorを4つのWindowsで動かしているので、print()にDigits with Pointを入れたら、以下のような画像になりました。


つまり、3つのウィンドウは5桁で、1つのウィンドウは4桁 なので、不具合と言えます。

窓を全部閉めて、また開けて、5桁の数字を書いたアドバイザーをあちこちに置いて......。

窓を開けたら、証券会社に騙された気分です。

質問は終了しました...

[Deleted]  
スベトニキとスクリプトをどこにどう挿入するのか?
 
Roman.:


Expert Advisor で指標値を取得するために、プログラムによって可能な TF を列挙し、最適化する可能性について質問されました。これは次のような方法で可能です - たとえば

この操作を行うファイルのExpert Advisorのコードスニペットを以下に示します。すべてそこにコメント付きで記述されています。

もしかしたら、誰かが役に立つかもしれません。

ありがとうございました。これまでTFの値を手動で変更してきた(最適化は長いプロセスであり、各TFの結果は別々に分析される)。

そして、ここでまた、助けてくれる皆さんに質問です。非標準のフラクタルとMAのブレーク後の任意のキャンドルから潜在的な信号の決定のためのバリアント用のコード(そのようなデザインで、私はブレーク後に必要なろうそくの数を決定することができます)。しかし......!?最適化が進まない...(( 1つのパラメータPeriod_MAを 1年間で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,отмена);                         // Удаление ордера
[Deleted]  
スベトニキとスクリプトをどこにどう挿入するのか?
 
DKD1000:

スベトニキとスクリプトをどこにどう挿入するのか?

https://docs.mql4.com/ru/ 保存されているものが書き込まれるディレクトリー
[Deleted]  
abolk:

https://docs.mql4.com/ru/ 保存されているものが書き込まれるディレクトリー

シーピー