Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 477

 
Artyom Trishkin:

Проверил у себя - всё компилируется в mql4.

Где-то ты ошибочку ещё допустил.

Это не мой код, это Василия Соколова класс. Мне два человека пожаловались, что под МТ4 не компилируется. И у меня тоже выдает ошибку, билд 1090. Не мог бы ты проверить полностью класс на компиляцию под МТ4? А то какая-то ерунда выходит. Заранее благодарен.

https://www.mql5.com/ru/articles/1334#summary - сам класс внизу статьи

Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • 2015.03.23
  • Vasiliy Sokolov
  • www.mql5.com
Эта статья описывает удобный класс для хранения информации - ассоциативный массив или словарь. Благодаря этому классу можно получать доступ к информации по ее ключу. Ассоциативный массив напоминает обычный массив, однако вместо индекса он использует некий уникальный ключ, например, перечисление ENUM_TIMEFRAMES или какой-либо текст. Что...
 
Alexey Volchanskiy:

Это не мой код, это Василия Соколова класс. Мне два человека пожаловались, что под МТ4 не компилируется. И у меня тоже выдает ошибку, билд 1090. Не мог бы ты проверить полностью класс на компиляцию под МТ4? А то какая-то ерунда выходит. Заранее благодарен.

https://www.mql5.com/ru/articles/1334#summary - сам класс внизу статьи

Компилируется
 
Artyom Trishkin:
Компилируется

Покажи как проверял.

 
Victor Nikolaev:

Покажи как проверял.

Вить, я сейчас не покажу - не у компа.
В своей библе использую этот класс Василия. Для обеих платформ.
И ещё - просто эти строчки вставлял в приватную секцию своего первого встречного четвёрочного класса. И всё компилировалось.
 
Victor Nikolaev:

Покажи как проверял.

Вот этот класс

Файлы:
Dictionary.mqh  45 kb
 
Приветствую. 
Создаю файл с именем = тикет+символ.
Записываю в файл цену открытия позиции и текущую цену, букву “P” или “L” в зависимости от расположения цены.
Нужно писать данные тех позиции время открытия, которых не старше 30 мин.
Проблема в том, что записываются данные только по одной позиции, самой последней.
Запись в остальные файлы не производится. Позиций 4.
Как решить?

datetime t_pre=0,t_lo;
string param="";string sy=""; int op=-1; int mn=-1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
  PO=MarketInfo(Symbol(),MODE_POINT);
   vspread=(int)MarketInfo(Symbol(),MODE_SPREAD);
   datetime _o_t;
   double _Profit,_lot,_Swap,_pr,_tp,_sl,lA=-1;
   int _Ticket,_Type;
   string _Comm;
   int      i,k=OrdersTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if(OrderSymbol()==sy || sy=="") 
           {
            if(OrderType()==OP_BUY || 
               OrderType()==OP_SELL) 
              {
               if(op<0 || OrderType()==op) 
                 {
                  if(mn<0 || OrderMagicNumber()==mn) 
                    {

                     _o_t=OrderOpenTime();

                     _pr=OrderOpenPrice();

                     _Ticket=OrderTicket();

                     _Type=OrderType();
                     ИмяФайла=_Ticket+Symbol()+".txt";
                     if(_o_t+60<TimeCurrent())
                        if(t_pre+60<TimeCurrent() && _o_t+1800>TimeCurrent())
                          {
                           if(_Type==OP_BUY){if(Bid>_pr)text_="P"; else text_="L";}
                           if(_Type==OP_SELL){if(Bid<_pr)text_="P"; else text_="L";}
                           t_pre=TimeCurrent();
                           string Текст,Строка;

                           // Открытие или создание файла и перемещение указателя в конец
                           int Файл= FileOpen(ИмяФайла,FILE_CSV|FILE_READ|FILE_WRITE," ");
                           if(Файл == -1)
                             {
                              Alert("Ошибка при открытии файла ",ИмяФайла);
                              return;
                             }
                           FileSeek(Файл,0,SEEK_END);

                           // Если новый файл записать строку заголовков колонок
                           if(FileSize(Файл)==0)FileWrite(Файл,"           Время Полу   BID     Цена ");

                           // Сбор информации и запись в файл
                           FileWrite(Файл,
                                     TimeToStr(TimeCurrent()),
                                     text_,
                                     dstr(Bid),
                                     "  ",
                                     dstr(_pr));
                           FileClose(Файл);
                           Файл=0;

                          }
                    }
                 }
              }
           }
        }
     }

   Comment("");
  }
// Преобразование числа double в строку с запятой или точкой в соответствии с локализацией
string dstr(double Цена)
  {
   if(!RUS) return DoubleToStr(Цена, Digits);
   return StringSetChar(DoubleToStr(Цена, Digits), StringFind(DoubleToStr(Цена, Digits), "."), ',');
  }


 
Artyom Trishkin:

Вот этот класс


Так-к-к. Еще одну бяку нашел. У меня в свое время терминал МТ4 для разработки неполностью обновился. Версия терминала 1090, а редактора 1562. На других терминалах union компилируется нормально, версия редактора 1601! Наверное, так вышло потому, что в момент обновления был уже открыт редактор, поэтому осталась старая версия. Блин, на эту помойку пол-дня убил.

Короче, под редактором 1601 все компилируется нормально.

 
lil_lil:
Приветствую. 
Создаю файл с именем = тикет+символ.
Записываю в файл цену открытия позиции и текущую цену, букву “P” или “L” в зависимости от расположения цены.
Нужно писать данные тех позиции время открытия, которых не старше 30 мин.
Проблема в том, что записываются данные только по одной позиции, самой последней.
Запись в остальные файлы не производится. Позиций 4.
Как решить?

пропустили    FileSeek  - поиск конца файла и у Вас после FileOpen пишется каждый раз в начало

 

Alexey Volchanskiy:

Так-к-к. Еще одну бяку нашел. У меня в свое время терминал МТ4 для разработки неполностью обновился. Версия терминала 1090, а редактора 1562. На других терминалах union компилируется нормально, версия редактора 1601! Наверное, так вышло потому, что в момент обновления был уже открыт редактор, поэтому осталась старая версия. Блин, на эту помойку пол-дня убил.

Короче, под редактором 1601 все компилируется нормально.

Ну вот и чудненько ;)

 
STARIJ:

пропустили FileSeek() - поиск конца файла и у Вас после FileOpen пишется каждый раз в начало

Есть FileSeek(Файл,0,SEEK_END); и в файл записывается всё с новой строки.

Проблема в том, что файлов 4 штуки и нужно записывать данные по четырём позициям, по каждой в отдельный файл, у каждого файла в имени тикет позиции, а пишутся данные только в один, последний файл, данные по последней позиции.

Причина обращения: