初学者的问题 MQL4 MT4 MetaTrader 4 - 页 155

 
Vitaly Gorbunov:
我现在要去乡下的房子,星期一会在那里。如果你有兴趣,请加我为好友,我们可以在不堵塞论坛的情况下聊天。
好的。
 
nidves:

我正在通过这段代码学习如何处理数组。毕竟,这项任务在原则上并不复杂。

打开 "的引号已经存储在上面的数组中。因此,我应该只从数组中提取我需要的日期的引号。

iTime(symbolMT,periodMT,numberBar);

试图获得这样的日期

或者写一个指标,这样会更容易采取

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

日期和价格都在数组中,而且它们都已经在时间[]、开盘[]、高点[]、低点[]、收盘[]。

 
Vladimir Karputov:

谁告诉你的?用#属性indicator_chart_window 进行的最简单的测试/MQL5/Indicators/Examples/Custom Moving Average.mq5指标

根据这个指标写一个例子,并说明哪些地方不可行。

以下是该指标

我无法通过iCustom将指标(i-DRP...)与我的专家顾问(DR Test)绑定。

我做错了什么,请告诉我

谢谢

附加的文件:
 
jakhongir.mamadiev:

这里是地板。

我无法通过iCustom将指标(i-DRP...)与我的专家顾问(DR Test)连接起来。

我做错了什么,请告诉我

谢谢

请告知为什么它不能工作

 

你好

请帮我系地板。正确使用 EA 的指标 (i-DRPojection)。

我不能

地面。指标 :

 #property copyright "Ким Игорь В. aka KimIV"
#property link        "http://www.kimiv.ru"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrAqua    // Blue
#property indicator_color2 clrOrange //Salmon
#property strict
//------- Внешние параметры ------------------------------------------
extern int   NumberOfDay = 10 ;   // Количество дней
//------- Буферы индикатора ------------------------------------------
double MaxDay[];
double MinDay[];
//+---------------------------------------------------------------------------------+
void init(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+---------------------------------------------------------------------------------+
   SetIndexBuffer ( 0 , MaxDay); SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 );
   SetIndexBuffer ( 1 , MinDay); SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 1 );
   //Comment("");
   }
//+---------------------------------------------------------------------------------+
int start(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+---------------------------------------------------------------------------------+
   double po= 0 , ph= 0 , pl= 0 , pc= 0 , x= 0 ;
   int     currDay= 0 , i= 0 , j= 0 ;
     if ( Period ()> 240 ) 
     {
       Comment ( "Индикатор i-DRProjections не поддерживает ТФ более Н4 !" ); return 0 ;
     }
     while (i<=NumberOfDay) 
     {
         if (currDay!= TimeDay ( Time [j])) 
        {
         po= iOpen ( NULL , 1440 , i+ 1 );
         ph= iHigh ( NULL , 1440 , i+ 1 );
         pl= iLow   ( NULL , 1440 , i+ 1 );
         pc= iClose ( NULL , 1440 , i+ 1 );
         if (pc<po) x=(ph + pl + pc + pl)/ 2 ;
         if (pc>po) x=(ph + pl + pc + ph)/ 2 ;
         if (pc==po) x=(ph + pl + pc + pc)/ 2 ;
         i++;
        }
      currDay= TimeDay ( Time [j]);
      MaxDay[j]=x - pl;
      MinDay[j]=x - ph;
      j++;
     }
   return 0 ;   
}
//+----------------------------------------------------------------------------------+
void deinit(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+----------------------------------------------------------------------------------+
   ObjectDelete ( "LineHi" );
   ObjectDelete ( "LineLo" );
   Comment ( "" );
}

顾问(我的失败尝试):

 //--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   = 200 ;     // SL для открываемого ордера
extern int     NumberOfDay= 100 ;     // Значение DR: Кол-во дней
extern double Lots       = 0.1 ;     // Жестко заданное колич. лотов
extern double Prots      = 0.07 ;     // Процент свободных средств


bool Work= true ;                     // Эксперт будет работать.
string Symb;                       // Название финанс. инструмента
//--------------------------------------------------------------- 2 --
int start()
  {
   int
   Total,                           // Количество ордеров в окне 
   Tip=- 1 ,                           // Тип выбран. ордера (B=0,S=1)
   Ticket;                           // Номер ордера
   double
   UpLine,                           // Значен. DR. 
   DnLine,                           // Значен. DR.
   Lot,                             // Колич. лотов в выбран.ордере
   Lts,                             // Колич. лотов в открыв.ордере
   Min_Lot,                         // Минимальное количество лотов
   Step,                             // Шаг изменения размера лота
   Free,                             // Текущие свободные средства
   One_Lot,                         // Стоимость одного лота
   Price,                           // Цена выбранного ордера
   SL,                               // SL выбранного ордера 
   TP;                               // TP выбранного ордера
   bool
   Work,
   Ans  = false ,                     // Ответ сервера после закрытия
   Cls_B= false ,                     // Критерий для закрытия  Buy
   Cls_S= false ,                     // Критерий для закрытия  Sell
   Opn_B= false ,                     // Критерий для открытия  Buy
   Opn_S= false ;                     // Критерий для открытия  Sell
//--------------------------------------------------------------- 3 --
   // Предварит.обработка
   /*if(Bars < Period_MA_2)                       // Недостаточно баров
     {
      Alert("Недостаточно баров в окне. Эксперт не работает.");
      return;                                   // Выход из start()
     }
   if(Work==false)                              // Критическая ошибка
     {
      Alert("Критическая ошибка. Эксперт не работает.");
      return;                                   // Выход из start()
     }*/
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if ( OrderSymbol ()!=Symb) continue ;       // Не наш фин. инструм
         if ( OrderType ()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
//--------------------------------------------------------------- 5 --
   // Торговые критерии
   UpLine = iCustom ( NULL , 0 , "i-DRProjections_vr1pv1z_0_1" ,NumberOfDay, 0 , 0 );
   DnLine = iCustom ( NULL , 0 , "i-DRProjections_vr1pv1z_0_1" ,NumberOfDay, 1 , 0 );


   if (DnLine >= Ask )                           // 
     {                                           // 
      Opn_B= true ;
     }
   if (UpLine <= Bid )                           // 
     {
      Cls_B= true ;                               // 
     }
   if (UpLine <= Bid )                           // 
     {                                           // 
      Opn_S= true ;                 
     }                                           // 
   if (DnLine >= Ask )   
     { 
      Cls_S= true ;                 
     }
//--------------------------------------------------------------- 6 --
   // Закрытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Buy " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }

       if (Tip== 1 && Cls_S== true )                 // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert ( "Попытка закрыть Sell " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Ask , 2 );       // Закрытие Sell
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Sell " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates ();                               // Обновление данных
   Min_Lot= MarketInfo (Symb, MODE_MINLOT );         // Миним. колич. лотов 
   Free   = AccountFreeMargin ();                 // Свободн средства
   One_Lot= MarketInfo (Symb, MODE_MARGINREQUIRED ); // Стоимость 1 лота
   Step   = MarketInfo (Symb, MODE_LOTSTEP );       // Шаг изменен размера

   if (Lots > 0 )                                 // Если заданы лоты,то 
      Lts =Lots;                                 // с ними и работаем 
   else                                          // % свободных средств
      Lts= MathFloor (Free*Prots/One_Lot/Step)*Step; // Для открытия

   if (Lts < Min_Lot) Lts=Min_Lot;               // Не меньше минимальн
   if (Lts*One_Lot > Free)                       // Лот дороже свободн.
     {
       Alert ( " Не хватает денег на " , Lts, " лотов" );
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------- 8 --
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B== true )               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates ();                         // Обновление данных
         SL= Bid - New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,Cls_B); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S== true )               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates ();                         // Обновление данных
         SL= Ask + New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_SELL ,Lts, Bid , 2 ,SL,Cls_S); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 9 --
   return ;                                       // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error( int Error)                         // Ф-ия обработ ошибок
  {
   switch (Error)
     {                                           // Преодолимые ошибки            
       case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
         RefreshRates ();                         // Обновим данные
         return ( 1 );                             // Выход из функции
       case 136 : Alert ( "Нет цен. Ждём новый тик.." );
         while ( RefreshRates ()== false )           // До нового тика
             Sleep ( 1 );                           // Задержка в цикле
         return ( 1 );                             // Выход из функции
       case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
         Sleep ( 500 );                             // Простое решение
         return ( 1 );                             // Выход из функции
         // Критические ошибки
       case    2 : Alert ( "Общая ошибка." );
         return ( 0 );                             // Выход из функции
       case    5 : Alert ( "Старая версия терминала." );
         bool Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 64 : Alert ( "Счет заблокирован." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 133 : Alert ( "Торговля запрещена." );
         return ( 0 );                             // Выход из функции
       case 134 : Alert ( "Недостаточно денег для совершения операции." );
         return ( 0 );                             // Выход из функции
       default : Alert ( "Возникла ошибка " ,Error); // Другие варианты   
         return ( 0 );                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --
int New_Stop( int Parametr)                       // Проверка стоп-прик.
  {
   int Min_Dist= MarketInfo (Symb, MODE_STOPLEVEL ); // Миним. дистанция
   if (Parametr<Min_Dist)                       // Если меньше допуст.
     {
      Parametr=Min_Dist;                         // Установим допуст.
       Alert ( "Увеличена дистанция стоп-приказа." );
     }
   return (Parametr);                             // Возврат значения
  }
//-------------------------------------------------------------- 12 --
 
大家好。我在测试器中测试了这么多的EA,但我还没有遇到过这样的事情。我正在测试一个EA(在测试器中),代码不包含无损或追踪止损。然而,当订单被打开,价格向所需的方向移动时,它会触发追踪止损(约20点)并开始追踪止损(误差为1)。这是什么乱七八糟的东西,为什么以及如何摆脱它?
 
Youri Lazurenko:
大家好。我在测试器中测试了这么多的EA,但我还没有遇到过这样的事情。我正在测试一个EA(在测试器中),代码不包含无损或追踪止损。然而,当订单被打开,价格向所需的方向移动时,它会触发追踪止损(约20点)并开始追踪止损(误差为1)。这是什么乱七八糟的东西,为什么以及如何摆脱它?

联系专家顾问或去心灵感应者俱乐部。他们一定会帮助你。

 
Konstantin Nikitin:

专家的代码,或心灵感应者俱乐部。他们肯定会有帮助。

谢谢你。奇怪的是,你的回答很有帮助。它(回答)鼓励我再次修改代码,发现了错误(否则我可能会错过它)。有时,尽可能做好的愿望会导致相反的结果。

P.S. 是的,你是对的,没有代码你就无法回答我的问题。但既然你已经用尽了这个问题,我认为它(代码)没有任何意义。再次感谢。

 

大家好,能告诉我如何正确写代码吗(变量的类型)?基本上它的工作原理是这样的,但在出现错误的情况下。

   int День_Года=TimeDayOfYear(Time[0]);
   int Рабочий_День_Года;
   double Количество_недель_дробь=День_Года/7;

任务是计算一年中的工作天数。

 

向大家问好!

为了实验,决定运行旧的EA,但在编译的时候给出了一堆错误(编译)。我已经在一个不同的建设中待了一段时间了。关于什么问题和如何解决的任何建议。https://www.mql5.com/ru/code/9386

p.s.也许有人有旧建的终端......会更模糊......
Нейросетевой советник
Нейросетевой советник
  • www.mql5.com
В корневом каталоге диска С: создайте папку с названием "ANN", в которой будут храниться настроенные нейросети. Для того, чтобы библиотека подключилась, также необходимо в терминале Меню "Сервис" > Вкладка "Советники" включить режим: "Разрешить импорт DLL" Оптимизацию необходимо проводить при включенном генетическом алгоритме. У советника...
原因: