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

 

Подскажите как лучше быть при оптимизации советника:

Есть множество параметров, которые отвечают за настройки индикатора и есть параметр, который включает/выключает этот самый индикатор. 


Абсолютно нет никакого смысла, оптимизировать настройки индикатора, если он отключен.

Вопрос: как можно отсечь подобные бессмысленные переборы?  

 
ANDREY:

Спасибо за помощь и новую для меня информацию . Но меня осенило и в голову пришел способ намного проще....
1.Во время открытия первого ордера ни минутной свече я запоминаю в переменную Х  ЛОУ этой свечи на момент открытия этого первого ордера.
2.В момент открытия нулевой свечи(то есть, следующей после свечи на которой открылся ордер) я получаю LoY[1]
А дальше включаю логику и делаю вывод
1.Если  Х =  LoY[1] значит ордер открылся после образования   LoY свечи на которой он открылся 
2.Если  LoY[1]< Х , значит цена после открытия ордера еще раз сходила вниз и опустилась ниже Х .А это значит что ордер открылся ДО образования  LoY[] данной свечи
Время ЛОУ мне нужно было только для того что бы узнать когда открылся ордер ... до образования ЛОУ свечи или после. 
А все ордера на одной минутной свече открываются у меня  один выше другого с разницей в 2п. То есть , как открылся первый так открылись и остальные на этой свече.
Спасибо за помощь.

Но у меня есть еще один вопрос по этой теме.
Вот открылся ордер на минутной свече по цене Х . Через несколько секунд на этой же свече открылся еще один ордер по цене Х+2 пункта. Между Х и Х+2 есть минимум цены.
И мне нужно узнать этот минимум. Если бы речь шла о разных свечах я воспользовался бы функциями  iLow и iLowest
Но в этих функциях в качестве границ интервала нужно указывать бары. А у меня границы интервала не бары , а цены  Х и Х+2 поскольку бар - только  один.
Я знаю как выявить нужный мне минимум. Но для этого нужно на каждом тике отслеживать значение цены. Знаю так же как это сделать при помощи цикла в момент образования Х+2    А как это сделать сразу за один раз во время образования  Х+2  как в случае с применением  iLow и iLowest(сразу и за один раз).
Буду Вам очень признателен если научите меня этому.
Спасибо

Записывать тики в файл
 
MakarFX:
Записывать тики в файл

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

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

ArrayMinimum


Спасибо за помощь.

 
ANDREY:

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

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

ArrayMinimum


Спасибо за помощь.

Запись в файл FileWriteString

А вообще трудно понять что тебе надо.

 
MakarFX:

Запись в файл FileWriteString

А вообще трудно понять что тебе надо.

Вот открылся ордер на минутной свече по цене Х . Через несколько секунд на этой же свече открылся еще один ордер по цене Х+2 пункта. Между Х и Х+2 есть минимум цены.
И мне нужно узнать этот минимум. Если бы речь шла о разных свечах я воспользовался бы функциями  iLow и iLowest
Но в этих функциях в качестве границ интервала нужно указывать бары. А у меня границы интервала не бары , а цены  Х и Х+2 поскольку бар - только  один.
Я знаю как выявить нужный мне минимум. Но для этого нужно на каждом тике отслеживать значение цены. Знаю так же как это сделать при помощи цикла в момент образования Х+2    А как это сделать сразу за один раз во время образования  Х+2  как в случае с применением  iLow и iLowest(сразу и за один раз).
Буду Вам очень признателен если научите меня этому.
Спасибо
 
ANDREY:

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

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

ArrayMinimum


Спасибо за помощь.

Можно. Только надо писать в .bin файл функцией

uint  FileWriteArray( 
   int          file_handle,         // handle файла 
   const void&  array[],             // массив 
   int          start=0,             // начальный индекс в массиве 
   int          count=WHOLE_ARRAY    // количество элементов 
   );

и читать 

uint  FileReadArray( 
   int    file_handle,               // handle файла 
   void&  array[],                   // массив для записи 
   int    start=0,                   // стартовая позиция для записи в массив 
   int    count=WHOLE_ARRAY          // сколько читать 
   );
 
Alexey Viktorov:

Можно. Только надо писать в .bin файл функцией

и читать 

Спасибо за новую для меня  информация .... и не просто новую .... оооооочень новую ?:=)   Попробую усвоить ее самостоятельно....

 
ANDREY:

Спасибо за новую для меня  информация .... и не просто новую .... оооооочень новую ?:=)   Попробую усвоить ее самостоятельно....

Что-же тут нового??? Открываете документацию, читаете заголовки, находите раздел «Файловые операции» там есть описание разных функций, в том числе и FileWriteArray()

Вам уже не первый раз напоминают, что чаще надо читать документацию. Даже если в текущий момент вам ничего не надо. Прочитав заголовки разделов вы будете понимать, описание чего есть в документации. Надо ведь это прежде всего вам.

 
Alexey Viktorov:

Что-же тут нового??? Открываете документацию, читаете заголовки, находите раздел «Файловые операции» там есть описание разных функций, в том числе и FileWriteArray()

Вам уже не первый раз напоминают, что чаще надо читать документацию. Даже если в текущий момент вам ничего не надо. Прочитав заголовки разделов вы будете понимать, описание чего есть в документации. Надо ведь это прежде всего вам.

Спасибо за ценный совет. Сейчас я читаю документацию только параллельно написанием кода, когда сталкиваюсь с каким то вопросом на который не знаю ответ. По ходу написания прошлых кодов с необходимостью  записи данных в файлы я никогда не сталкивался, поэтому для меня это абсолютно новая тема.
Скажите , а разве нельзя мою идею реализовать проще, без записи в файл? Как в моем коде. Это не рабочий код а для иллюстрации моей идеи того как найти минимум между соседними ордерами открывшимися на одной минутной свече
Спасибо за помощь

double P[60],Z;
int Tick,x,x1,G,G1,G2,T;

void OnTick()
{
Tick++;

if (OrdersTotal()==1&&Tick<2189)
{
P[x]=Bid;
Print("------------------------P[x]=Bid------------------------=", DoubleToString(P[x],5), "  x ",  x);
x++;
}
if (OrdersTotal()==2&&Tick==2189)
{
x1=x;
x=0;
ArraySort(P,WHOLE_ARRAY,0,MODE_ASCEND);
T=(60-x1);
Print("------------------------МИНИМУМ=------------------------=",DoubleToString(P[T],5), "  Tick ",  Tick, "  x1 ",  x);
}

if (Tick==2176||Tick==2188)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
G2=G;
G=Tick;
}
}

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

 
ANDREY:

Спасибо за помощь и новую для меня информацию . Но меня осенило и в голову пришел способ намного проще....
1.Во время открытия первого ордера ни минутной свече я запоминаю в переменную Х  ЛОУ этой свечи на момент открытия этого первого ордера.
2.В момент открытия нулевой свечи(то есть, следующей после свечи на которой открылся ордер) я получаю LoY[1]
А дальше включаю логику и делаю вывод
1.Если  Х =  LoY[1] значит ордер открылся после образования   LoY свечи на которой он открылся 
2.Если  LoY[1]< Х , значит цена после открытия ордера еще раз сходила вниз и опустилась ниже Х .А это значит что ордер открылся ДО образования  LoY[] данной свечи

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

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