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

 

Добрый день,

Можно ли как-то сменить директорию для записи/чтения файлов с  "Tester/Files" на "MQL/Files", когда советник работает с этими файлами во время тестирования?

 
Asa saas:

Добрый день,

Можно ли как-то сменить директорию для записи/чтения файлов с  "Tester/Files" на "MQL/Files", когда советник работает с этими файлами во время тестирования?

Средствами MQL - никак, только через WinAPI.

 

Спасибо за ответ!

 
PolarSeaman:

Как рассчитывать объём лота с шагом? Если депозит =1000, лот =0.1, депозит стал 2000 лот = 0.2. То есть, при депо 1500 или 1700, лот не увеличивается.

lot = MathCeil(depo / 1000) * 0.1;
 
Ihor Herasko:

Средствами MQL - никак, только через WinAPI.

Asa saas:

Спасибо за ответ!

В этом случае лучше использовать флаг FILE_COMMON и тогда файлы будут доступны как из тестера так и из терминала. Только возможны проблемы при тестировании в сети. Но лично я не проверял.

FileOpen - Файловые операции - Справочник MQL4
FileOpen - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется ";". Если для txt-файла разделитель не указан, то...
 

Taras Slobodyanik:

lot = MathCeil(depo / 1000) * 0.1;

Давай посчитаем:

Депозит = 1700. Делим на 1000 получаем 1.7 и округляем до ближайшего целого сверху, получаем 2.

Умножаем на 0.1 и в результате не то что хотели.

Видимо лучше брать округление к ближайшему меньшему целому MathFloor

MathFloor - Математические функции - Справочник MQL4
MathFloor - Математические функции - Справочник MQL4
  • docs.mql4.com
MathFloor - Математические функции - Справочник MQL4
 
PolarSeaman:

Не-ет, при депо 1100, лот будет 0.11, а мне нужно чтобы до 2000 лот не увеличивался. В настройках как задам шаг =1000?

Подправил.

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

Хотя сам принцип есть, а это уже нюансы

 
Alexey Viktorov:

Давай посчитаем:

Депозит = 1700. Делим на 1000 получаем 1.7 и округляем до ближайшего целого сверху, получаем 2.

Умножаем на 0.1 и в результате не то что хотели.

Видимо лучше брать округление к ближайшему меньшему целому MathFloor

или вместо 1000, указать 1999,99 )

1000 и 0,1 - это внешние переменные

 
И что все прицепились к 0.1. Сегодня человеку надо 0.1, завтра захочется 0.5. Нужно исходить из процентного соотношения. Жесткая привязка по уму она ни к чему.
 

Спасибо, сделал так:

   input double _lot=0.1;
   input int _depo=1000;
//***************************
   lot=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/_depo)*_lot;
   lot=NormalizeDouble(lot,2);

Надеюсь правильно поставил _depo типа int.