Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1548

klycko #:

Александр, добрый день!

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

Иначе не работает.

А если так?  )))

   string NameSettings = mnth+dy+"-"+LimPos+"-"+DoubleToString(ProfitNew,0)+".set"; // Формируется имя для Settings
   int file_handle=FileOpen("//"+NameSettings,FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_CSV|FILE_ANSI);
   FileWriteString(file_handle,Settings+"\r\n");                                    // Записывается строка Settings в песочницу Files

   if(!FileIsExist(NameSettings,0))                                                 // Проверка существования файла
      Print("Нет файла NameSettings!");
   string Path = TerminalInfoString(TERMINAL_DATA_PATH);
   string SrcPath = Path + "\\MQL5\\Files\\" + NameSettings;
   string DstPath = Path + "\\MQL5\\Profiles\\Tester\\" + NameSettings;
   ResetLastError();
   if(!kernel32::CopyFileW(SrcPath,DstPath,false))                                  // Переписываем Settings из песочницы Files в папку Tester
      PrintFormat("Error = %d",GetLastError());   
   FileClose(file_handle);                                                          // Закрываем открытый файл, чтобы его можно было дальше перезаписывать
При условии, что файла с таким именем в папке назначения нет.
Yuriy Bykov #:

Здравствуйте, Александр.

Должна быть какая-то причина такого поведения. Надо выдвигать гипотезы и проверять их последовательно. Например:

  • Hе закралась ли русская буква ('с' или 'е') в каком-то из имён файлов? Можно взять более суровые имена типа "1.bin"
  • Тот ли это каталог данных? Проверить его открытие из меню терминала или MetaEditor
  • Считает ли скрипт именно этот каталог текущим? Добавить в начало OnStart() две команды: открыть новый файл с созданием и закрыть его. Посмотреть, что он появился в ожидаемом каталоге
Больше пока не придумал

Юрий, добрый вечер!

Спасибо за ваши советы. Буду внимательнее теперь.

Мои проблемы разрешились с помощью Александра.

Кроме того, оказалось, что нужно вовремя закрывать файл.

Привожу окончательный фрагмент работающего кода, может кому-нибудь будет полезен.

   Now = TimeLocal();                                                  // Момент формирования имени для Settings
   TimeToStruct(Now,dt_struct);                                        // Разложение момента формирования
   string mnth = dt_struct.mon;                                        // Месяц, день
   int dyy = dt_struct.day;
   string dy = dt_struct.day;
   if(dyy <= 9)
      dy = "0" + dy;
   string LimPos = MTTESTER::GetValue(Settings,"LimitPosition");                    // LimitPosition считывается
   int PosVert = StringFind(LimPos,"|",0);
   string razn = StringSubstr(LimPos,PosVert,-1);
   StringReplace(LimPos,razn,"");
   string NameSettings = mnth+dy+"-"+LimPos+"-"+DoubleToString(ProfitNew,0)+".set"; // Формируется имя для Settings
   int file_handle=FileOpen("//"+NameSettings,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   FileWriteString(file_handle,Settings+"\r\n");                                    // Записывается строка Settings в песочницу Files
   FileClose(file_handle);                                                          // Закрываем открытый файл, чтобы его можно было дальше перезаписывать

   if(!FileIsExist(NameSettings,0))                                                 // Проверка существования файла
      Print("Нет файла NameSettings!");
   string Path = TerminalInfoString(TERMINAL_DATA_PATH);
   string SrcPath = Path + "\\MQL5\\Files\\" + NameSettings;
   string DstPath = Path + "\\MQL5\\Profiles\\Tester\\" + NameSettings;
   ResetLastError();
   if(!kernel32::CopyFileW(SrcPath,DstPath,false))                                  // Переписываем Settings из песочницы Files в папку Tester
      PrintFormat("Error = %d",GetLastError());                                     // 4009  Неинициализированная строка

Опять какие- то проблемы с демо сервером... не подключается...


А МТ5 для 32-разрядной Windows уже нет совсем ?  
Mikhail Tkachev #:
А МТ5 для 32-разрядной Windows уже нет совсем ?  

Верно.

Aleksey Vyazmikin #:

Верно.

Очень надо, м.б. где-то старая версия есть, мне для освоения нужно...

Пожалуйста, мне нужна помощь в расчете размера лота в сетке ордеров

Пример:
Начальный диапазон (пунктов) = 50 пунктов.
Мультидиапазон между ордерами = 2.
1-я сделка на покупку 0.1 лота;
2-я сделка на покупку 0.2 лота открылась ниже 50 пунктов на новой открытой свече. Индикаторы по-прежнему выровнены;
3-я сделка на покупку 0,4 лота открыта ниже 100 пунктов на открытии новой свечи. Индикаторы по-прежнему выровнены;
buy trade 0.8 лот пропущен ниже 200 пунктов - Индикаторы НЕ выровнены;
buy trade 1.6 лот пропущен ниже 400 пунктов - Индикаторы НЕ выровнены;
4th buy trade 3.2 лот открыт ниже 800 пунктов на открытии новой свечи. Индикаторы по-прежнему выровнены;

buy trade 6.4 лот пропущен ниже 1600 пунктов - индикаторы НЕ выровнены;
5th buy trade рассчитанный лот открылся ниже 6400 пунктов на открытии новой свечи. Индикаторы все еще выровнены;

пожалуйста, помогите мне создать формулу для расчета лота ордера, мой мозг уже сломан

спасибо

Mikhail Tkachev #:

Очень надо, м.б. где-то старая версия есть, мне для освоения нужно...

Выложил тут

Mikhail Tkachev #:

Очень надо, м.б. где-то старая версия есть, мне для освоения нужно...

Старая версия не будет работать с современными серверами.

Из-за этого несколько лет назад перешёл с WXP на Linux.

Aleksey Vyazmikin #:

Выложил тут

И тут