Мт4 Конец поддержке. - страница 44

 
Реter Konow:
 

Теперь скажите, - я выполнил задачу?

Да не с той стороны вы (все и Петер, и оппоненты) заходите ! Задачу можно выполнить и так, и так !

Сейчас придет ассемблерщик, и скажет, что он все может сделать еще более эффективно, и с еще меньшим потреблением ресурсов компьютера ! 

Только какой в этом смысл ? 

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

Русские названия - меня ничуть не смущают, единственное, что напрягает - я привык к преффиксам, чтобы по виду переменной сразу можно было понять ее тип. А русский или английский идентификатор - разница невелика (1С - там много русского).

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

 
George Merts:

Да не с той стороны вы (все и Петер, и оппоненты) заходите ! Задачу можно выполнить и так, и так !

Сейчас придет ассемблерщик, и скажет, что он все может сделать еще более эффективно, и с еще меньшим потреблением ресурсов компьютера ! 

Только какой в этом смысл ? 

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

Русские названия - меня ничуть не смущают, единственное, что напрягает - я привык к преффиксам, чтобы по виду переменной сразу можно было понять ее тип. А русский или английский идентификатор - разница невелика (1С - там много русского).

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

Джорж, я понятие не имел о том, как пользоваться отладчиком. Даже не знал и не интересовался зачем он нужен. Поэтому здесь никакого мазохизма нет. А сейчас уже поздно.
 

Петр, вы подменили задачу. Ваше решение иногда нужно, но очень редко, притом не чисто в таком виде, но похожем. 

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

Но есть идеальный вариант с ООП - создается свой объект для каждого символа - таймфрейма.

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

 
Dmitry Fedoseev:

Петр, вы подменили задачу. Ваше решение иногда нужно, но очень редко, притом не чисто в таком виде, но похожем. 

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

Но есть идеальный вариант с ООП - создается свой объект для каждого символа - таймфрейма.

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

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

Не важно сколько символов и сколько таймфреймов, - в моем решении их количество не увеличивает нагрузку на систему. Просто смотрите в массив - есть или нет события нового бара.

Можно сократить список символов, если не брать их из обзора рынка, а вписать в массив Symbols[] вручную. Пожалуйста.


Добавлено:

Кстати, обратите внимание, - функции Новый_бар() уже нет. Она действительно оказалась ненужна. Вы были правы.

 
Реter Konow:

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

Теперь скажите, - я выполнил задачу?

Безусловно ДА. Но!!! Так случилось, моё предложение чуток переиначили и в результате вы поняли так как поняли. На форексе интересуют данные исключительно те которые нужны здесь и сейчас. Нужна информация по одному инструменту и текущему периоду, всё - другая не интересует. Нужна информация по другому символу и определённому периоду, значит тем-же кодом её надо получить. И нет никакой необходимости нагружать систему получением информации которая сейчас совсем не нужна.

Это не ваша вина, так получилось. Я пытался вас остановить, но не смог.

 
Dmitry Fedoseev:

Петр, вы подменили задачу.

Не он подменил. Так было предложение перефразировано, что он его понял именно так.

 
Alexey Viktorov:

Безусловно ДА. Но!!! Так случилось, моё предложение чуток переиначили и в результате вы поняли так как поняли. На форексе интересуют данные исключительно те которые нужны здесь и сейчас. Нужна информация по одному инструменту и текущему периоду, всё - другая не интересует. Нужна информация по другому символу и определённому периоду, значит тем-же кодом её надо получить. И нет никакой необходимости нагружать систему получением информации которая сейчас совсем не нужна.

Это не ваша вина, так получилось. Я пытался вас остановить, но не смог.

Никаких проблем, - впишите в массив Symbols[] наименования нужных Вам символов и все.

Уберите запись из OnInit():

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

И инициализируйте массив в глобальной области:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

И уберите лишние таймфреймы из массива Timeframes[];

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

Измените переменную

int    All_Timeframes = 3;

И измените переменную All_Symbols:

int    All_symbols = 3;

Так будете получать события только по нужным символам и нужным таймфреймам.

Добавлено:

Уберите также из OnInit() установку размеров массивов, так как количество символов вам известно:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

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

Не важно сколько символов и сколько таймфреймов, - в моем решении их количество не увеличивает нагрузку на систему. Просто смотрите в массив - есть или нет события нового бара.

Можно сократить список символов, если не брать их из обзора рынка, а вписать в массив Symbols[] вручную. Пожалуйста.


Добавлено:

Кстати, обратите внимание, - функции Новый_бар() уже нет. Она действительно оказалась ненужна. Вы были правы.


Если так, как выделено жирным  - то в корзину.

 
Dmitry Fedoseev:

Если так, как выделено жирным  - то в корзину.

Почему?
 
Реter Konow:

Никаких проблем, - впишите в массив Symbols[] наименования нужных Вам символов и все.

Уберите запись из OnInit():

И инициализируйте массив в глобальной области:

И уберите лишние таймфреймы из массива Timeframes[];

Измените переменную

И измените переменную All_Symbols:

Так будете получать события только по нужным символам и нужным таймфреймам.


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