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

 
ANDREY:

Рад тому , что и я хоть чем то смог Вам помочь :=) :=) :=)

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

Дело не в качестве кода. Я не смотрю любой чужой код. За исключением того, который нужен мне или в агонии приступа благотворительности, :=))) но это происходит всё реже и реже…

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

 
Alexey Viktorov:

или в агонии приступа благотворительности, :=))) ....

А когда будет очередной приступ ???    :=)))  Я читал , что обострения бывают именно ранней весной.   :=)))   Хотелось бы , что бы Ваша ремиссия быстрее закончилась.   :=))) 

А приступы были как можно чаше..... :=)))

 
ANDREY:

Спасибо за подсказку. Я уже начал читать раздел ФАЙЛОВЫЕ ОПЕРАЦИИ  из учебника Ковалева . Действительно... кое что начинает по немного проясняться. Понял что все советники которых я тестирую читают текстовые файлы со значениями цен баров (созданные правда не моей программой) с расширением  .cvv, которые лежат в  Каталоге терминала Тестер.
То есть в файл записывается информация(данные) из любой программы и читаются эти данные из файла, так же любой программой. Как мне показалось в файлы записываются большие количества данных которые не целесообразно хранить в самой программе. Что то  типа подключаемого файла mqh.
Если Вам не сложно можете мне объяснить что означает фраза Алексея Викторова ".... А вы хотите писать .csv и читать в массив....." из поста    применительно к моему коду из поста  
Как мне показалось он имеет в виду текстовый файл  .cvv, с ценами баров из каталога Тестер. А вот что конкретно он имеет в виду я пока не пониманию. Ведь эти файлы   .cvv пишу не я, а  программа дилера  Альпари... Как программа читает ИЗ массива - я в общих чертах немного  понимаю ... обращается к ячейке массива по ее адресу , проникает во внутрь ячейки и получает доступ к значению ячейки( то есть читает его). А как  программа может читать В массив , а не ИЗ массива? Это какое то неразрешимое противоречие....как мне кажется на мой дилетантский взгляд. Мне почему то кажется что В массив можно только записывать какие то значения. А читать можно только ИЗ массива

Запись массива в бинфайл у Ковалева нет. Учебник 2009 года. Там только бинфайлы были. А массив в файл бин позже появилось. Бин файлы пишутся и читаются быстрее. В них нет переводов строк. Но они не читабельны для людей)

 
Valeriy Yastremskiy:

Запись массива в бинфайл у Ковалева нет. Учебник 2009 года. Там только бинфайлы были. А массив в файл бин позже появилось. Бин файлы пишутся и читаются быстрее. В них нет переводов строк. Но они не читабельны для людей)

Спасибо Вам большое за новую для меня информацию. И я ее понял процентов на 50.... и если буду уверен что мне это нужно на данном этапе моего развития , изучу эту тему досканально.
Но сейчас я зациклен на своем небольшом коде    при помощи которого пытаюсь с наименьшими затратами времени и других ресурсов компьютера и программы, найти минимум цены между 2 соседними ордерами открытыми на одной минутной свече с разницей в 2 пункта. Для этого я создал массив. Меня здесь пытаются убедить, что этот массив нужно при помощи функции записывать  в файл и потом при помощи другой функции получать данные из этого файла( то есть из массива) для последующих вычислений. 

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

Естественно в  ходе тестирования,  таких ордеров внутри минутных свечей ,между которыми нужно будет вычислить минимум, будет много. В моем коде просто иллюстрация пришедшей мне идеи.
Алексей Викторов не может мне ответить на этот вопрос потому что к нему еще не пришел приступ благотворительности .... и с ним не случилась агония и конвульсии в связи с этим :=).
Может быть у Вас уже созрели  все предпосылки для того что бы помочь мне продвинуться вперед.


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

 
ANDREY:

сложно понять создателя Грааля. Можно передать все расчёты Индикатору и получать сигнал в Эксперт.

 
ANDREY:

Спасибо Вам большое за новую для меня информацию. И я ее понял процентов на 50.... и если буду уверен что мне это нужно на данном этапе моего развития , изучу эту тему досканально.
Но сейчас я зациклен на своем небольшом коде    при помощи которого пытаюсь с наименьшими затратами времени и других ресурсов компьютера и программы, найти минимум цены между 2 соседними ордерами открытыми на одной минутной свече с разницей в 2 пункта. Для этого я создал массив. Меня здесь пытаются убедить, что этот массив нужно при помощи функции записывать  в файл и потом при помощи другой функции получать данные из этого файла( то есть из массива) для последующих вычислений. 

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

Естественно в  ходе тестирования,  таких ордеров внутри минутных свечей ,между которыми нужно будет вычислить минимум, будет много. В моем коде просто иллюстрация пришедшей мне идеи.
Алексей Викторов не может мне ответить на этот вопрос потому что к нему еще не пришел приступ благотворительности .... и с ним не случилась агония и конвульсии в связи с этим :=).
Может быть у Вас уже созрели  все предпосылки для того что бы помочь мне продвинуться вперед.


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

Немного не понятна логика. Зачем писать в массив пару данных. их можно в переменные записать. Массив это когда много однотипных переменных. А если из меньше 5, можно и в переменные запомнить. Зачем сохраненные данные в массиве писать в файл, что бы потом его считывать в этом же советнике. Они и так доступны. Пишут в файл для обмена между разными советниками, или дальнейшей обработки, не в этом советнике. К тому же массив всегда глобален, если не ошибаюсь.

 
ANDREY:

Спасибо Вам большое за новую для меня информацию. И я ее понял процентов на 50.... и если буду уверен что мне это нужно на данном этапе моего развития , изучу эту тему досканально.
Но сейчас я зациклен на своем небольшом коде    при помощи которого пытаюсь с наименьшими затратами времени и других ресурсов компьютера и программы, найти минимум цены между 2 соседними ордерами открытыми на одной минутной свече с разницей в 2 пункта. Для этого я создал массив. Меня здесь пытаются убедить, что этот массив нужно при помощи функции записывать  в файл и потом при помощи другой функции получать данные из этого файла( то есть из массива) для последующих вычислений. 

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

Естественно в  ходе тестирования,  таких ордеров внутри минутных свечей ,между которыми нужно будет вычислить минимум, будет много. В моем коде просто иллюстрация пришедшей мне идеи.
Алексей Викторов не может мне ответить на этот вопрос потому что к нему еще не пришел приступ благотворительности .... и с ним не случилась агония и конвульсии в связи с этим :=).
Может быть у Вас уже созрели  все предпосылки для того что бы помочь мне продвинуться вперед.


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

Начало уже так далеко, что ответить в подробностях достаточно сложно… Но всё-же попробую поумничать…

Если я правильно помню, надо определить когда образовался Low свечи на которой открылся ордер. Когда эта свеча текущая, то нет проблем: открылся ордер в переменную суём меньшее из двух чисел и это продолжаем до закрытия свечи. Но если надо будет определить это когда уже эта свеча стала 10ой, то это уже для mql4 проблема. Это в mql5 совсем просто сделать, достаточно скопировать тики «от и до» указанного времени и в этом массиве всё что надо есть. А для mql4 вам предложили писать тики в файл, чтобы потом можно было получить эти тики и в этом массиве тиков уже определить, если Low той свечи меньше минимального значения в массиве, значит Low был до открытия ордера. Если-же равны, то Low образовался после открытия ордера.

Хотя… если советник работает, то достаточно сразу определять в переменную, как сказано тут, для этого есть функция о которой можно прочесть в документации в разделе «Математические функции» А если советник по какой-то причине не работает, то и тики не запишет и даже не получит.

 
Alexey Viktorov:

Начало уже так далеко, что ответить в подробностях достаточно сложно… Но всё-же попробую поумничать…

Если я правильно помню, надо определить когда образовался Low свечи на которой открылся ордер. Когда эта свеча текущая, то нет проблем: открылся ордер в переменную суём меньшее из двух чисел и это продолжаем до закрытия свечи. Но если надо будет определить это когда уже эта свеча стала 10ой, то это уже для mql4 проблема. Это в mql5 совсем просто сделать, достаточно скопировать тики «от и до» указанного времени и в этом массиве всё что надо есть. А для mql4 вам предложили писать тики в файл, чтобы потом можно было получить эти тики и в этом массиве тиков уже определить, если Low той свечи меньше минимального значения в массиве, значит Low был до открытия ордера. Если-же равны, то Low образовался после открытия ордера.

Хотя… если советник работает, то достаточно сразу определять в переменную, как сказано тут, для этого есть функция о которой можно прочесть в документации в разделе «Математические функции» А если советник по какой-то причине не работает, то и тики не запишет и даже не получит.

Спасибо  Вам большое за новую для меня информацию....особенно по поводу возможностей  mql4 в сравнении с  mql5 применительно к данному случаю. Но , как это ни странно задачу которую Вы описываете я решил сам и способ ее решения поразил меня самого своей оригинальностью  и оптимальностью.
После этого передо мной встала другая похожая задача  сформулированная в этом посте  
 Мне посоветовали записывать тики в файл    ,  

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

И теперь меня интересует ответ на такой вопрос   В чем было бы преимущество именно моего кода, если бы я записал тики  в файл, как мне тут посоветовали в том числе и Вы ? Что конкретно  в моем коде  стало бы оптимальнее? 


На этот вопрос пролил свет   Valeriy Yastremskiy       Но мне хотелось бы выслушать мнение того кто советовал мне записывать тики в файл.
Спасибо з помощь

 
Valeriy Yastremskiy:

Немного не понятна логика. Зачем писать в массив пару данных. их можно в переменные записать. Массив это когда много однотипных переменных. А если из меньше 5, можно и в переменные запомнить. Зачем сохраненные данные в массиве писать в файл, что бы потом его считывать в этом же советнике. Они и так доступны. Пишут в файл для обмена между разными советниками, или дальнейшей обработки, не в этом советнике. К тому же массив всегда глобален, если не ошибаюсь.

Спасибо за совет. Согласен, иногда тиков может быть 5 и меньше. Но  в одной минутной свече тиков может быть намного больше чем  секунд и их количество между соседними ордерами тоже может быть намного больше 5. 
Особенно меня порадовало то, что  мои мысли совпали с выделенным  красным. Но я был в них не уверен, поскольку более опытные товарищи усиливали мою неуверенность.

 
ANDREY:

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

ANDREY, 2021.04.09 14:38


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


Мне посоветовали записывать тики в файл  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Alexey Viktorov, 2021.04.09 18:33

Можно. Только надо писать в .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          // сколько читать 
   );

Вместо записи тиков в файл , я создал код который решает мою задачу без записи тиков в файл  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

ANDREY, 2021.04.09 20:37

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

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;
}
}

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


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

И теперь меня интересует ответ на такой вопрос   В чем было бы преимущество именно моего кода, если бы я записал тики  в файл, как мне тут посоветовали в том числе и Вы ? Что конкретно  в моем коде  стало бы оптимальнее? 


На этот вопрос пролил свет   Valeriy Yastremskiy       Но мне хотелось бы выслушать мнение того кто советовал мне записывать тики в файл.
Спасибо з помощь

Чтобы не напрягать пытающихся помочь, в частности меня, лучше положить сообщение «в карман» и вставить его вместо ссылки на него.

Теперь по поводу этой проблемы: Открылся ордер №1… в этот момент Low конечно ниже цены открытия ордера. Ну и флаг ему в руки…

Открылся ордер №2 и вот тут надо-бы контролировать цену……… Опять пользуясь математической функцией fmin() пишем в переменную значение до закрытия свечи. Как только свеча закрылась прекращаем контроль цены, он нам не нужен уже. А полученное значение будет минимальной ценой в промежутке времени от открытия второго ордера до закрытия свечи. Или я чего-то не так понял…

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