[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 28

 
对百分比做一个额外的检查。
 
TheXpert:
做一个额外的百分比检查。

在什么阶段,什么与什么的比例?

把这个放在start()中

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

因为它在init()中不起作用。

也许检查一下Point(?

我将看看会发生什么...

 
OlegTs:

在什么阶段,什么与什么的比例?

把这个放在start()中

因为它在init()中不起作用。

也许检查一下Point(?

我将看看会发生什么...


我在print()中加入了带点的数字,因为我在四个窗口上运行同一个专家顾问,我得到了以下图片。


即三个窗口有五位数,一个窗口有四位数,所以这是一个故障。

我关闭了所有的窗户,重新打开,把顾问到处都是五位数......。

我觉得我的经纪公司在我打开窗户时作弊了。

这个问题已经结束了...

 
你如何或在哪里插入svetniki和脚本?
 
Roman.:


你问的是能否以编程方式列举和优化可能的TF,以便在专家顾问中获得其指标值。这可以通过以下方式实现--例如

下面是执行该操作的文件中专家顾问的一些代码片断--那里的一切都有注释描述。

也许其他人会发现它很有用。

谢谢你!到目前为止,我已经手动改变了TF值(优化是一个漫长的过程,每个TF的结果都是单独分析的)。

这里还有一个问题,请大家帮忙解答。用于非标准分形的变体和定义突破MA后的任何蜡烛的潜在信号的代码(在这样的设计中,我可以定义我需要的突破后的蜡烛数量)。But....!优化不 "想 "走......((如果我只为一个参数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,отмена);                         // Удаление ордера
 
你如何或在哪里插入svetniki和脚本?
 
DKD1000:

你如何或在哪里插入svetniki和脚本?

https://docs.mql4.com/ru/ 存储的内容被写入的目录。
 
abolk:

https://docs.mql4.com/ru/ 存储的内容被写入的目录。

cp