Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 155

 
Vitaly Gorbunov:
Я сейчас уезжаю на дачу буду в понедельник. Если интересно разобраться добавьте меня в друзья пообщаемся не засоряя форум.
Хорошо
 
nidves:

Через данный код я учусь работать с массивами. Ведь задача в принципе стоит не сложная.

В выше указанном массиве уже записаны котировки "Open". Соответственно необходимо просто вытащить из данного массива котировку нужной мне даты.

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[])
  {

и дату и цену и все они уже в массивах time[],open[], high[], low[],close[],

 
Vladimir Karputov:

Кто Вам такое сказал? Простейший тест с #property indicator_chart_window - это индикатор \MQL5\Indicators\Examples\Custom Moving Average.mq5

Напишите пример на основе этого индикатора и покажите, что у Вас не работает.

Вот пол. индикатор 

у меня не получается через iCustom связать индикатор(i-DRP...) с советником (DR Test):

что я делаю не так подскажите пожалуйста

спасибо 

Файлы:
 
jakhongir.mamadiev:

Вот пол. индикатор 

у меня не получается через iCustom связать индикатор(i-DRP...) с советником (DR Test):

что я делаю не так подскажите пожалуйста

спасибо 

Пожалуйста подскажите почему не работает 

 

Здравствуйте 

помогите пожалуйста связать пол. индикатор (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("");
}

советник (моя попытка fail):

//--------------------------------------------------------------- 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 --
 
Привет всем. Уже столько перетестировал советников в тестере, но с таким не сталкивался. Тестирую советник (в тестере), в коде не заложен ни без убыток, ни трейлинг стоп. Но когда открывается ордер и цена движется в нужную сторону, откуда-то включается трейлинг стоп (где-то 20 пунктов) и начинает тралить стоп (причем с error 1). Что за ерунда, почему и как избавиться?
 
Youri Lazurenko:
Привет всем. Уже столько перетестировал советников в тестере, но с таким не сталкивался. Тестирую советник (в тестере), в коде не заложен ни без убыток, ни трейлинг стоп. Но когда открывается ордер и цена движется в нужную сторону, откуда-то включается трейлинг стоп (где-то 20 пунктов) и начинает тралить стоп (причем с error 1). Что за ерунда, почему и как избавиться?

Код эксперта, или в клуб телепатов. Там точно помогут.

 
Konstantin Nikitin:

Код эксперта, или в клуб телепатов. Там точно помогут.

Спасибо. Как ни странно, но ваш ответ помог. Он (ответ) надоумил еще раз пересмотреть код и найти ошибку (так бы, наверное, пропустил). Иногда желание сделать как можно лучше, приводит к противоположному результату. 

P.S. Да, вы правы, без кода на мой вопрос не ответишь. Но так как вопрос исчерпан, думаю в нем (коде) нет смысла. Еще раз спасибо.

 

Всем привет! Подскажите как корректно написать код(типы переменных). В принципе и так работает, но вдруг возникнут ошибки.

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

Задача - вычислить номер РАБОЧЕГО дня года.

 

Приветствую всех !

Решил погонять старенького советника ради эксперемента, но в момент компиляций выдает кучу ошибок ( компиль). Билд сменился как понял уже давненько. Может кто подсказать в чем дело и как исправить.   https://www.mql5.com/ru/code/9386

p.s. может есть у кого терминал старого билда... что бы пороще было... 
Нейросетевой советник
Нейросетевой советник
  • www.mql5.com
В корневом каталоге диска С: создайте папку с названием "ANN", в которой будут храниться настроенные нейросети. Для того, чтобы библиотека подключилась, также необходимо в терминале Меню "Сервис" > Вкладка "Советники" включить режим: "Разрешить импорт DLL" Оптимизацию необходимо проводить при включенном генетическом алгоритме. У советника...