Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем кому понравилось мое решение, пишите в личку. Я доработаю его и подарю.
Всем удачи.
Цикл по символам, проверка открытия нового бара по факту прихода котировки и прочее, можно запросто добавить к моему решению. И причем здесь ООП?
Не тот пример выбрали. Подумайте на досуге о чем то еще.
А вы сделайте. С учётом того, что символы могут меняться - ведь при чтении символов стоит true.
А вы сделайте. С учётом того, что символы могут меняться - ведь при чтении символов стоит true.
Ну а если сделаю? Что тогда скажите? По секрету: для меня подобные задачи это полнейший детский сад. Неужели думаете что не справлюсь? Просто наивность какая то...
Ну а если сделаю? Что тогда скажите? По секрету: для меня подобные задачи это полнейший детский сад. Неужели думаете что не справлюсь? Просто наивность какая то...
Ну так справьтесь уже наконец.
Артём немного не раскрыл сам вопрос, а вопрос вот в чём: написать в процедурном стиле, чтоб это работало корректно
Да не вопрос. Хэдж для экономии сравнения строковых операций, ну если заказчик маньяк и будет торговать на всех символах одновременно.
А так кажется тут больше некуда экономить операции и память - всего по минимуму
void OnTimer(){
Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }
//+------------------------------------------------------------------+
uint Sp_Adler32(string line){
ulong s1 = 1;
ulong s2 = 0;
uint buflength=StringLen(line);
uchar char_array[];
ArrayResize(char_array, buflength,0);
StringToCharArray(line, char_array, 0, -1, CP_ACP);
for (uint n=0; n<buflength; n++){
s1 = (s1 + char_array[n]) % 65521;
s2 = (s2 + s1) % 65521;}
return ((s2 << 16) + s1);}
//+------------------------------------------------------------------+
bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){
static datetime st_time[];
static uint st_id[];
//---- set
datetime new_time = iTime(symb, tf, 0); if(new_time==0) return(false);
uint new_id = Sp_Adler32(StringConcatenate(symb,EnumToString(tf)));
datetime old_time = 0;
uint old_id = 0;
//---- find
int size = ArraySize(st_time);
for(int i=0; i<size; i++){
if(st_id[i]!=new_id) continue;
old_id = st_id [i];
old_time = st_time[i];
break;}
//----add new element
if(old_time==0){
ArrayResize(st_time, size+1); st_time[size]=new_time;
ArrayResize(st_id, size+1); st_id [size]=new_id; }
//----
return(old_time>0 && old_time<new_time);}
Прошу прощения за небольшую задержку.
Вот первый вариант функции. Можно дорабатывать и развивать дальше. Если кто заметит ошибку, пожалуйста комментируйте.
Дело не в ООП, а в том что у вас код линейный, хотя возможно вы этого никогда не узнаете...
Да не вопрос. Хэдж для экономии сравнения строковых операций, ну если заказчик маньяк и будет торговать на всех символах одновременно.
А так кажется тут больше некуда экономить операции и память - всего по минимуму
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Мт4 Конец поддержке.
Artyom Trishkin, 2017.09.10 23:21
У меня была цель, чтобы в конечном результате его код в процедурном стиле работал в таком цикле:
Назвала не так по привычке - bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf) - нужная функция.
Ну так справьтесь уже наконец.
Ок. Ваше решение работает только на тиках. Мое на таймере. Как вы считаете, мой метод синхронизации с появлением баров имеет недостаток. Ок. Пусть будет так. Добавлю проверку прихода котировки перед установкой флага нового бара. Добавлю в функцию еще параметр - символ. Пользователь будет сам выбирать символ по которому ему нужно получить событие нового бара и присылать его в функцию. В функции будет проверка времени последней котировки данного символа. Дальше сравнение времени формального появления бара и времени котировки и установка флага события.
Я только начал разбиратся в этой теме, но никаких сложностей не вижу.
Дело не в ООП, а в том что у вас код линейный, хотя возможно вы этого никогда не узнаете...