Форум » Консультации по программированию » Я новичок. » Ответить

Я новичок.

Anatoliy: Пишу пользовательский индикатор на основе пересечение уровни 20 и 80. Если главная линия Stochastic пересекла уровень 80 (сверху - вниз), то выводит стрелка Sell на ценовых графиках, а если главная линия Stochastic пересекла уровень 20 (снизу - верх), то стрелка Buy на ценовых графиках. #property strict #property indicator_chart_window #property indicator_buffers 2 //--- plot Buy #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Sell #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters //--- indicator buffers double BuyBuffer[]; double SellBuffer[]; //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //+------------------------------------------------------------------+ //| Функция инициализации пользовательского индикатора | //+------------------------------------------------------------------+ int init() { //--- SetIndexBuffer(0,BuyBuffer); SetIndexArrow(0,233); SetIndexStyle(0,DRAW_ARROW); //--- SetIndexBuffer(1,SellBuffer); SetIndexArrow(1,234); SetIndexStyle(1,DRAW_ARROW); //--- SetIndexEmptyValue(0,80.0); SetIndexEmptyValue(1,20.0); //--- return(0); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //+------------------------------------------------------------------+ //| Функция пользовательского индикатора итерации | //+------------------------------------------------------------------+ int start() { //--- int i, Counted_bars; double mainStoc_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); // бар 1 double mainStoc_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,2); // бар 2 Counted_bars=IndicatorCounted(); // Количество просчитанных баров i=Bars-Counted_bars-1; for(i=0;i>=0;i--) { if (mainStoc_2 > 80.0 && mainStoc_1 < 80.0) SellBuffer = Low-5*Point; else SellBuffer = 0.0; if (mainStoc_2 < 20.0 && mainStoc_1 > 20.0) BuyBuffer = High+5*Point; else BuyBuffer = 0.0; } //--- return(0); } И в результатах индикатор вообще не работает. Как его исправит?

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 All

Balbesik: Игорь! Давай по делу? По тикколлектору - то погнали Номер билда Винды( х-отя и не горантия), Номер NET- Тут мы оба "отдохнем"! при грамотном подходе. Эту компилюцию ты никогда "не поймаешь"! Поиграем!

Scriptong: Balbesik пишет: Игорь! Давай по делу? По тикколлектору - то погнали Номер билда Винды( х-отя и не горантия), Номер NET- Тут мы оба "отдохнем"! при грамотном подходе. Эту компилюцию ты никогда "не поймаешь"! Поиграем! Переведи. Для меня это просто набор слов.

Balbesik: Scriptong пишет: Переведи. Для меня это просто набор слов. Попробую перевести. Начну с того, что я не программист и Вашего «языка или жаргона» я не знаю. Поэтому как смогу. Смысл этого набора слов следующий – У меня Тикколлектор не работает – судя по всему он не работает только у меня ОДНОГО. Главное – у тебя все работает. Должна быть причина. Первая у меня «руки кривые» - может быть! Вторая интернет – я специально потратил время сходил к друзьям, которые имеют выделенную линию с очень высокой скоростью – все тоже самое – идет «слет» - исключаю интернет (это уже 3 комп и только у меня не работает - «руки кривые» - не исключаю). Третья Windows – у меня не стоит лицензионный и если причина в этом, то готов был по твоим указаниям, что-то делать . Или решать вопрос с лицензией. У меня конечно есть друзья, у которых ну просто все лицензионное стоит и занимаются биржей, но куплена платформа ATAS в которой все эти виды графиков есть штатно и с т.з. ренжей там помимо прочего включены в список еще штук 5 ренжей (как они позиционируют, якобы запатентованные). Так вот им МТ даром не надо и ставить для моего эксперимента отказываются. Мое надоедание (понятно, что не работает только у меня) связанно со следующим – В свое время я проверил, из свободного доступа, штук 7 индикаторов по renko и пару ренжей, советники на этих графиках НЕ РАБОТАЮТ. Работают только на Синбаре (доработанном), но опять же на Синбаре НЕ «видны» ВСЕ входы и проблемы объемов ( накапливает на баре не корректно). На Тикколлекторе советнику «видны» ВСЕ входы, но сам принцип построения баров мне нужен, как у Синбара, а это я планировал переделать, но не могу. Проблема времени! // Формирование нового бара if (m_rates.time == 0 || IsNewBarByConvertType(time)) { m_rates.open = bid; m_rates.close = bid; m_rates.high = bid; m_rates.low = bid; m_rates.tick_volume = 1; m_rates.time += time; // += работает } Т.е. если я делаю «разрыв по времени», то HistoryBase: 2 errors in 'EURUSD313' идет, но график продолжает строиться ( в отличии от штатного «=», который у меня «слетает» - в качестве примера показывал, что например BearBullBalance перестает работать) и все таки, как мне кажется, в этом случае, не все входы «видны». Соответственно переделка (плюс к «слету») у меня не получится, т.к. я не знаю, как исключить «наложение» баров по времени» и не уверен, что в этом причина, в не в Windows например. Я рассчитывал, что можно, что-то сделать, но «слетает» ТОЛЬКО у меня.


Scriptong: Balbesik пишет: судя по всему он не работает только у меня ОДНОГО. К сожалению, не у тебя одного проявляется такая ситуация. Я ведь подтверждал получение подобной ошибки. У меня она тоже иногда воспроизводится. Но вот ни вчера, ни сегодня добиться ее воспроизведения не удалось. Уже даже всю доступную тиковую историю конвертировал в равновысокий график с высотой 5 пунктов, перезагрузил МТ, а графикам хоть бы хны - отображаются нормально, обновляются, ошибок в журнале нет. Правда сегодня на обеих парах зафиксировал другой баг - появление "черточек" (свеча единичного объема, у которой H=L=O=C) вместо свечей. Появляются такие баги только в процессе обновления графиков. Если перезапустить индикатор с теми же параметрами, то свечи магическим образом появляются. К сожалению, сам пока в шоке от этих багов, т. к. совершенно не понимаю, в какую сторону копать.

Balbesik: Scriptong пишет: Правда сегодня на обеих парах зафиксировал другой баг - появление "черточек" (свеча единичного объема, у которой H=L=O=C) вместо свечей. Это и есть "слет" и объем у всех черточек = 1. Именно таким образом он проявляется, я об этом писал. Но в журнале должна идти ошибка! Scriptong пишет: то свечи магическим образом появляются. Да так, только далее не работает. И на эту историю индикатор повторно ставишь, он не работает. m_rates.time += time; - если сделать вот такое изменение - да пару свечей появится и тут же продолжит корректно работать. Хотя в журнале и будет ошибка и периодически она повторяться. Свечи строятся и с объемом и советник как-то работает. Проблема времени и как ее решать не понятно, т.к. построение то можно получить, но советник работать не будет на таком графике. Какая-то связь "жесткая" нужна с минутным графиком? Другими словами, как бы необходимы "виртуальные" бары, а с другой связь с минуткой по времени. Как-то так. Непростые эти графики.

Scriptong: Balbesik пишет: Какая-то связь "жесткая" нужна с минутным графиком? Уже писал выше - нет.

Balbesik: Scriptong пишет: Уже писал выше - нет. Вот в таком виде "слета" нет. Исключаю по времени наложения баров. if (!m_isActive) return true; datetime me; if (m_rates.time == 0) { m_rates.open = bid; m_rates.close = bid; m_rates.high = bid; m_rates.low = bid; m_rates.tick_volume = 1; m_rates.time = time; } me = m_rates.time; // Обновление данных текущего бара m_rates.high = MathMax(m_rates.high, bid); m_rates.low = MathMin(m_rates.low, bid); m_rates.close = bid; m_rates.tick_volume++; //+--- // if (IsNewBarByConvertType(time) && me == time) // { // m_rates.open = bid; // m_rates.close = bid; // m_rates.high = bid; // m_rates.low = bid; // m_rates.tick_volume = 1; // m_rates.time = time+1; // += работает // } // me = m_rates.time; //+--- // Формирование нового бара if (IsNewBarByConvertType(time) && me != time) { m_rates.open = bid; m_rates.close = bid; m_rates.high = bid; m_rates.low = bid; m_rates.tick_volume = 1; m_rates.time = time; // += работает } // Продолжение формирования бара else FileSeek(m_fileHandle, -m_ratesSize, SEEK_CUR); me = m_rates.time; График строится нормально, правда попадаются "двойные" бары по высоте. "Слета" нет. Но советник "НЕ ВИДИТ" всех входов и чем дольше стоит, тем меньше "видит" советник входов. Предполагаю возрастает рассогласование по времени (хотя странно - согласование на втором шаге me = m_rates.time; заложил, но возможно связано с записью истории) Поэтому считаю, есть связь с минутным графиком. Да можно увеличивать количество пунктов в баре (заведомо более минутного), но тогда нивелируется сам смысл равновысокого бара.

Scriptong: По всей видимости, я нашел причину. Следи за развитием, начиная отсюда.

Balbesik: Добрый день, Игорь! У меня нет регистрации на МТ4, есть только на МТ 5, а на МТ 4 она не работает. Поэтому пишу здесь. komposter : «…Бары в черточки не превращались, но ошибка в журнале была…» - есть такое, если в Тикколлекторе сделать m_rates.time += time; Я согласен с тобой, что что-то «подкрутили». Я пробовал Андрея (komposter ) equalvolumebars – уже последний доработанный – Все красиво у equalvolumebars и ренджи и эквиобъемы строятся более менее корректно и объемы, кажется, корректно набирают его бары и индикаторы рисуются (правда у меня на нем масштабирование индикаторов «плывет») Но у меня советник его вообще «не видит» (что только не делал, именно твой советник «не видит», который «видит» твои графики и график Синбара, не исключаю, что вообще-то советник может и не должен работать - не смотрел)! Кроме этого у меня советник на Синбаре работал без вопросов, теперь советник на нем «не видит» от 50 до 75 % входов. Предполагаю, если эта «подкрутка» направленна на борьбу с высокоскоростными работами (по просьбе «кухонь») – блокировка работы внутри минутного бара, то ответа от МТ маловероятно, что добьёшься – если это так, то это не будет противоречить целям Заказчиков. Красота графика меня вообще не волнует, если нельзя применить советник. Взяли бы (или предложили бы пользователям) любой советник и индикатор, чтобы сигналы на вход были видны на индикаторе, и все стало бы ясно – какую роль играет рассогласование по времени. P.S. Попробовал штатные советники на equalvolumebars в режиме рендж. Не идут, видимо закрыт для советников. Надо разбираться, не хочу. Пока продолжаю считать, что согласование по времени для равновысоких значимо.

Balbesik: Еще проверил. Картинка работа equalvolumebars в режиме ренджей. Картинка работа Тикколлектора. Не даем формирования нового бара - идет рост, нет "слета", журнал чист. Если на Тикколлекторе сделать гибрид - со сдвигом по времени, то наложение работы по времени и со сдвигом приводит к "слету". Предварительная картинка - грустная, а точнее мрачная для меня. Смысл ренджей теряется. МТ всегда были противники нестандартных графиков подобного типа.

Scriptong: Как раз Андрей Хатимлянский в той ветке, на которую я дал ссылку, утверждает, что так в МТ было всегда. С этой проблемой он сталкивался еще при разработке эквиобъемных графиков. Проблема заключается в том, что МТ хронически не переносит, когда две и более свечей имеют одно и то же время открытия. Отсюда и ошибки в журнале, и "черточки" на графике. Проблема решается одним единственным способом - использованием времени "с потолка". То есть как только получается вторая свеча, дублирующая по времени открытия предыдущую, то она получает другое время (большее). При таком подходе временная шкала нестандартного таймфрейма не будет отражать реальное время открытия свечей, часто убегая в будущее.

Balbesik: Scriptong пишет: ак раз Андрей Хатимлянский в той ветке, на которую я дал ссылку, утверждает, что так в МТ было всегда. С этой проблемой он сталкивался еще при разработке эквиобъемных графиков. Проблема заключается в том, что МТ хронически не переносит, когда две и более свечей имеют одно и то же время открытия. Отсюда и ошибки в журнале, и "черточки" на графике. Проблема решается одним единственным способом - использованием времени "с потолка". То есть как только получается вторая свеча, дублирующая по времени открытия предыдущую, то она получает другое время (большее). При таком подходе временная шкала нестандартного таймфрейма не будет отражать реальное время открытия свечей, часто убегая в будущее. Значит проблема в другом. Наложение баров возможно и было. Я писал, что в Синбаре идет сдвиг на 1 – i_time+=1; Это не проблема. Синбар в режиме реального времени накапливал объем на баре и не пропускал входы! Сейчас это не так. Бары совпадающие по времени сейчас имеют объем = 1 – раньше этого не было – щел корректный набор объема. Входы не пропускались. Тикколлектор так же не пропускал входы. Сейчас это не так. Для Тикколлектора не надо времени "с потолка", достаточно запретить формирование нового бара, если есть совпадение по времени – будет тоже самое (картинки я привел) и даже лучше, Что-то МТ изменили, мне более нравится твоя версия – запретили (скрыли) бары внутри минуты. Да, как я и писал, можно делать, что-то «большое» и будет работать. Но смысл теряется. Мне, допустим, для расчетов нужны виртуальные бары (а они не стали видны), а другим необходим, допустим, пример МА по более раннему входу и т.д. Т.е. масса вариантов, которые «кухням» не нужны. Еще раз – это «кухонная» и наглая контора – МТ называется. Буду думать - надо заставить советник работать по времени "с потолка", а как не знаю, т.к. использую бары истории, а они похоже теперь привязаны к минутному графику, как минимум. Советник значит должен понимать "время с потолка", т.е. это другой какой-то формат данных для советника. То, что не знаю и не понимаю. Если брать за аналог по времени "с потолка" equalvolumebars, то, как я уже писал, там не просто масштабирование, а порядки, да и котировки в 4 знаке не случайны. Похоже дебри. Зато как здорово - до бесконечности можно постоянно что-то переделывать, доделывать и т.д. "Еб.. в собственном соку до второго пришествия" и про биржу можно забыть (есть же занятие).

Scriptong: Balbesik пишет: Для Тикколлектора не надо времени "с потолка", достаточно запретить формирование нового бара, если есть совпадение по времени – будет тоже самое (картинки я привел) и даже лучше, В таком случае будет пропущен один или более баров, на графике возможно появление гэпов. Может, не делать такого? Пока у меня назрело следующее решение. В тех случаях, когда бары накладываются друг на друга, время будет уходить в будущее (это если движение было сильным). С приходом новых тиков и успокоением рынка накладки баров будут сходить на нет. В итоге можно будет, начиная с такого времени, ставить новые бары на свои места, т. е. сдвиг в будущее постепенно ликвидируется. На мой взгляд, это наилучшее решение. Правда оно не учитывает таймфреймов с периодом менее минуты. Там постоянно будет сдвиг в будущее.

Balbesik: Scriptong пишет: В таком случае будет пропущен один или более баров, на графике возможно появление гэпов. Может, не делать такого? Пропусков то нет, если сильное движение или геп на реале, конечно появиться «длинный» бар, который конечно портит всю картину и теряется смысл ренж баров. Картинка просто для примера – Scriptong пишет: Пока у меня назрело следующее решение. В тех случаях, когда бары накладываются друг на друга, время будет уходить в будущее (это если движение было сильным). С приходом новых тиков и успокоением рынка накладки баров будут сходить на нет. В итоге можно будет, начиная с такого времени, ставить новые бары на свои места, т. е. сдвиг в будущее постепенно ликвидируется. На мой взгляд, это наилучшее решение. Это решение. Просто я его не смог реализовать. Если я пытался совместить при совпадении «пропуск» формирования нового бара и сдвиг по времени, то получал «слет». Но я не программист и даже толком не представляю возможностей языка. Насколько понимаю сдвиг по времени влево или вправо все равно приводит к наложению или в будущем или перерисовки в прошлом, что приводит к «слету». Scriptong пишет: Там постоянно будет сдвиг в будущее. А вот тут подходим к самому главному. Как я уже писал, допустим при сильном движении или гепе на реале построитель рисует, при равновысоких, дополнительные бары, что позволяет, помимо расчетов, делать более ранние входы допустим по МА. Как я предполагаю эти дополнительные бары – «виртуальные» в этом случае советник их просто «не видит». Насколько мне известно Тикколлектор единственный построитель, в свободном доступе, на котором работают советники. В Синтетических барах так и написано, что не предназначен для реала (в нем тоже есть сдвиг по времени). Андрей (komposter ) писал, что equalvolumebars – не работает на офф-лайн графиках и для реализации работы требуется доработка самих советников. Я не представляю о чем речь. Соответственно сдвиг по времени в этом плане меня смущает. Если возможна доработка Тикколлектора с учетом этих проблем, конечно это очень интересно. Ну и конечно (для примера, в реализации которого у меня сомнения или очень сложно или строго равновысокого не получить ) реализовать начало нового бара с Клозе предыдущего (бар виртуальный) – исключить «разрывы» при построении равновысоких баров (появятся дополнительные бары с т.з. равновысоких, что более корректно).

Scriptong: Balbesik пишет: Насколько понимаю сдвиг по времени влево или вправо все равно приводит к наложению или в будущем или перерисовки в прошлом, что приводит к «слету». Для того сдвиг в будущее и делается, чтобы исключить наложение баров. Поэтому проблема будет решена. Balbesik пишет: Как я предполагаю эти дополнительные бары – «виртуальные» в этом случае советник их просто «не видит». Эти бары вовсе не виртуальные, а самые настоящие. Просто с ними еще никто не имел дело (недоработка сборщика тиков, которую я планирую в ближайшее время устранить). Balbesik пишет: Насколько мне известно Тикколлектор единственный построитель, в свободном доступе, на котором работают советники. В нем просто добавлено пару строк, которые запускают обновление советников на оффлайн-чарте в момент прихода очередного тика. Потому советники и работают. Balbesik пишет: Ну и конечно (для примера, в реализации которого у меня сомнения или очень сложно или строго равновысокого не получить ) реализовать начало нового бара с Клозе предыдущего (бар виртуальный) – исключить «разрывы» при построении равновысоких баров (появятся дополнительные бары с т.з. равновысоких, что более корректно). Эту тему мы уже поднимали, но так и не пришли к какому-либо решению, т. к. ни ты сам, ни, тем более, я не можем понять, что же требуется.



полная версия страницы