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

 
Igor Makanu:

не может

используйте iBars() чтобы узнать доступную историю

ЗЫ: если не ошибаюсь, то в тестере при запуске советника доступно 1000 баров, потом по мере генерирования новых данных количество баров будет увеличиваться. Тестер моделирует историю ко всем ТФ к которым происходит обращение, т.е. если Вы запустили тест на Н1 и в процессе тестирования обращаетесь к данным ТФ М1, то при запуске у Вас будет доступна история 1000 баров на Н1, и соотвественно будет доступно 60 * 1000 = 60 000 баров М1

подробнее нужно почитать статьи, примерно как эта https://www.mql5.com/ru/articles/1511

я придумал как сделать.

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

а со следующего месяца только начал торговлю.

а история же будет накапливаться. и перед торговлей рассчитать коэффициент дисперсии.


как вам метод?



но как записать, "чтобы первый месяц не торговал"...

я же на разных периодах буду тестировать.

неохота постоянно исправлять дату руками.

счётчик, что ли включить, дней...

 
multiplicator:

я придумал как сделать.

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

примерно так и нужно для Вашей задачи, но опять же используйте iBars() и Вы будете знать сколько истории доступно советнику в тестере

 

multiplicator:
счётчик, что ли включить, дней...

Igor Makanu:

 но опять же используйте iBars() и Вы будете знать сколько истории доступно советнику в тестере

точно!

когда iBars() станет > 30 000 - рассчитать дисперсию, и тогда разрешить советнику торговать.

спасибо всем, кто ответил.

 

Здравствуйте! Помогите неопытному начинающему трейдеру ! Есть советник но в нем нет стоп лосса! Кто может добавить стоп лос в советник (и если можно бесплатно! )

 
Tem4ik:

Здравствуйте! Помогите неопытному начинающему трейдеру ! Есть советник но в нем нет стоп лосса! Кто может добавить стоп лос в советник (и если можно бесплатно! )


Код сюда выкладываете (если это не декомпил), и может кто-нибудь поможет.

 
#define list "Cryptocurrency Market\\List.csv"

enum FILE_LOCATION
{
   LOCATE_TERMINAL = 0,
   LOCATE_COMMON = FILE_COMMON,
};

void GetLocalSource(FILE_LOCATION &dir)
{
   GetLocalList(FileOpenEx(list, FILE_WRITE|FILE_READ|FILE_CSV|dir));
}

int FileOpenEx(const string fname, int flags, int delimeter =';', uint codepage = CP_ACP)
{
   bool ex;
   if(flags > 4095)
      ex = FileIsExist(fname, FILE_COMMON);
   else
      ex = FileIsExist(fname);
   if(!ex) return -1;
   return FileOpen(fname, flags, delimeter, codepage);
}

bool GetLocalList(const int handle)
{
   if(handle == INVALID_HANDLE) {Print("Handle err: ", handle, " | ", GetLastError()); return false;}
...
}

Не могу обнаружить файл через FileIsExist, функция не хочет видеть его. Я этот файл распихал уже и в общую директорию и в директорию терминала - результат не изменился

2019.01.06 16:11:14.957 CoinMarketCap EURUSD,Daily: Handle err: -1 | 5020

Функция, которая записывает List.csv  открывает его  через ту же макроподстановку list

В чём ошибка?

 
Ilya Prozumentov:

Не могу обнаружить файл через FileIsExist, функция не хочет видеть его. Я этот файл распихал уже и в общую директорию и в директорию терминала - результат не изменился

2019.01.06 16:11:14.957 CoinMarketCap EURUSD,Daily: Handle err: -1 | 5020

Функция, которая записывает List.csv  открывает его  через ту же макроподстановку list

В чём ошибка?

Попробуйте так #define list "Files\\Cryptocurrency Market\\List.csv"

Файл должен лежать в папке Files

 
Vladimir Pastushak:

Попробуйте так #define list "Files\\Cryptocurrency Market\\List.csv"

Файл должен лежать в папке Files

 не помогло


P.S Проблема найдена, в конце имени уже существующего файла засел пробел

 

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

Подскажите пожалуйста как определить дату (в формате даты) начала недели и конца недели? Нужно чтоб осцилятор обнулялся в конце недели и с началом новой недели начинал считать с нуля. На данный момент знаю как обнулять на каждый день, но ума не приложу как обнулять это на каждой недели. Так обнуляю каждый день.

void Calculate(int i)
  {
   double summ;
   datetime startTime  = StringToTime(TimeToString(Time[i],TIME_DATE)+" "+StartTime); // StartTime=00:10
   datetime endTime    = StringToTime(TimeToString(Time[i],TIME_DATE)+" "+EndTime);   // EndTime=23.50
   datetime currentTime= StringToTime(TimeToString(Time[i],TIME_DATE)+" "+TimeToString(Time[i],TIME_MINUTES));
//Print("Start = ",TimeToString(startTime,3));
//Print("End = ",TimeToString(endTime,3));
   if(CheckTimer(i,startTime,endTime,currentTime,0))
     {
      summ = MainBuffer[i+1];
      summ+= InfluenceBuffer[i];
      MainBuffer[i]=summ; 
     }
   else
     {
      summ=0.0;
      MainBuffer[i]=summ;
      }
  }

Спасибо

 
Gerkl:

Подскажите пожалуйста как определить дату (в формате даты) начала недели и конца недели? 

//1. для времени datetime t
if(TimeDayOfWeek(t))==1) // Понедельник
if(TimeDayOfWeek(t))==5) // Пятница

//2. для текущего времени
if(DayOfWeek() = 1) // Понедельник
if(DayOfWeek() = 5) // Пятница

скорее всего Вам нужен вариант №1, тогда в индикаторе в цикле расчета, где перебираете бары используете примерно такую конструкцию:

if(TimeDayOfWeek(Time[i]))==1) // Понедельник
if(TimeDayOfWeek(Time[i]))==5) // Пятница
нужное время у Вас находится в Time[i] после проверки условия
Причина обращения: