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

Я новичок.

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

Scriptong: Сборщик тиков исправлен. Используй новую версию.

Balbesik: Scriptong пишет: Сборщик тиков исправлен. Используй новую версию. Здорово! Буду пробовать. Но сейчас по проблематике возникает вторая проблема. Советник не "видит" всех входов. Ты использовал 60 секунд. Я пробовал на 1 секунде и 60 секунд. На 1 секунде даже лучше, но проблема не решается. Посмотрю в твоем варианте. И планирую на Синбаре проверить под МТ5 (у меня есть построитель под МТ5). Что-то у меня подозрение, что сделано специально, чтобы "загнать" на МТ5 (цель только не ясна). Использую JustZigZag_Evg_Signal, который мы брали для единообразия результатов. И в Тикколлекторе 3 пункта для равновысоких, чтобы быстрее. if (!m_isActive) return true; datetime me = 0; 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 = me+1; } // Продолжение формирования бара time+=1; else FileSeek(m_fileHandle, -m_ratesSize, SEEK_CUR); me = m_rates.time; Все строится, журнал чист, "слета" нет. Проблема работы советника остается. Не нравится мне сдвиг по времени или советник, как-то надо править. Посмотрим.

Balbesik: Что и ожидал. Но уже любопытно. Советник MultiIndicators_AutoOptimize_Expert пропускает только сделки Sell. Буду проверять на другом советнике (не исключаю проблема в советнике). Кроме этого полагаю, что работа советников привязана к реальному времени сервера, соответственно должно пройти накопление по сдвигу и проблема возрастет. P.S. Забыл добавить - даже стрелочки на индикаторе пропускаются.


Balbesik: Кажется картинка проясняется. Уже намного веселее. Взял два готовых советника. Первый с вписанным индикатором и этот же индикатор отдельно. Второй с обращением к индикатору через iCustom. Индикатор один и тот же. Первый советник работает корректно. "Видит" все входы. На индикаторе все стрелочки отображаются. Второй делает в противоположность лишние входы. На индикаторе стрелочки пропускаются. Что-то типа дребезга по входам. Оставляю первый советник на проверку "накопления сдвига". Предварительный вывод - Для равновыских баров советники работающие через обращение к индикатору (индикатор не вписан в советник) НЕ применимы

Balbesik: Кажется и с iCustom запустил!

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

Balbesik: Scriptong пишет: Вывод неверный. iCustom тут не при чем. Причем, Игорь, поверь причем. Да, как у тебя написано (более 10 пунктов) имеет место быть (мало этого, это существенно). А с т.з. специфики биржи, это не о чем, но для расчетов это очень о чем! Ладно вопрос регулируемый. Т.е. он решаемый. Остался 3 вопрос (и последний) - построение баров. На мои взгляд, твой вариант, вообще ни о чем. Я (лично сиысла не вижу), не "догоняю" цель такого построения. Что под этим заложено (какой смысл, "на пальцах")? Пока твое построение практически не отличается от временного (для меня). Да ты прав если я "годовой" инвестор, но нет у меня таких денег. P.S. Были сомнения вот в этом - RefreshRates(); - кстати, сначало мне показалось, что влияет на время, но "Осуществляет обновление данных в предопределенных переменных и массивах-таймсериях." что-то у меня сомнения, кстати имею право на ошибку - у меня "школа" другая.

Balbesik: Balbesik пишет: Ладно вопрос регулируемый. Т.е. он решаемый. Вот не голословка. Взял Интегра (вписанный индикатор, чтобы не спорить). Накопление по памяти - Не "видит" -

Scriptong: Balbesik пишет: Вот не голословка. Уже много раз писал: для решения нужны детали. Что толку от рисунка? Необходимо: 1. Код этого eMACross_Trade. 2. Настроечные параметры (set-файл). 3. Параметры равновысоких баров. 4. Тиковая история, по которой строились эти равновысокие. При наличии таких данных есть шанс, что проблема может быть решена, т. к. корень ее, скорее всего, в советнике (индикаторе).

Balbesik: Вот мне интересно - давно для микроструктуры бара, пошел даже Зиг Заг внутри бара (я не призываю к высокоскростным роботам, когдв скорость света конечна и если ты "далек" - на Урале от биржи это заведомый проигрыш - хотя используемые ими агоритмы проще "3 рублей"). Но поверь - "не догоняю" смысла выбранного тобой для построения равновысокого. А вдруг там ГРААЛь на "халяву". Если он только меня интересует - то напиши - что другим не надо.

Scriptong: Balbesik пишет: Но поверь - "не догоняю" смысла выбранного тобой для построения равновысокого. Что именно не так с алгоритмом? Равновысокие бары (они же - range-бары) - это бары с фиксированной высотой. Как только бар достиг этой высоты, строится другой бар. Исключение: когда в баре сформировано n - 1 пунктов высоты (n - заданная высота бара) и появляется новый тик с гэпом 2 и более пунктов, то будет либо недостроенный равновысокий бар (с высотой менее n пунктов) - новый тик перенесен на следующий бар, либо бар с высотой более n пунктов - новый тик внесен в текущий бар.

Balbesik: Игорь! Меня интересует только возможность реализации 3 вопроса. На твое усмотрение. Остальное решается. P.S. Если разорвать соизмеримость JustZigZag_Evg_Signal с баром и увеличить бар. Все работает идиально!

Scriptong: Balbesik пишет: Если разорвать соизмеримость JustZigZag_Evg_Signal с баром и увеличить бар. Все работает идиально! Это как?

Balbesik: Scriptong пишет: Это как? Ну не умею объяснять. Но т.к. косвенно связано с 3 вопросом (который я не могу программно корректно решить), то попробую со своего понимания и наблюдений. Начну наверное с того, что, например, на фонде есть стакан (на МТ тоже, что-то подобное появилось). Из стакана видно, что есть зоны цены, где как бы нет ни спроса не предложения, т.е. нет покупателей и нет продавцов, но и нет спреда. На форексе, как бы этот вопрос решается путем спреда – как бы купить или продать то можно в любой момент, но со спредом. Или например Геп – внутри гепа не купить не продать (вот тут, например, связь с 3 вопросом, когда желательно бары построить, но их как бы не может быть и открыть позицию невозможно, хотя они, для меня, играют существенную роль для расчетов – я их называл «виртуальные»). Биды друг от друга, по проходу расстояния цены могут существенно отличаться, но так или иначе в рамках спреда. Если я беру, «для понимания», размах равновысокого бара 3 – 5 пунктов, а биды друг от друга «летают» допустим 10 пунктов вверх - вниз, то появляются участки, когда «входы» просто «пропускаются или искажаются», т.к. не видны или советник «не понимает», что делать. Поэтому я и писал – бар – заведомо больше спреда. Соизмеримость с бара с ЗигЗагом (одно количество пунктов) – если попадается участок, когда например сигнал вниз, а на следующем баре сразу вверх, то или пропуск одного из входов, или закрытие открытой позиции по встречному сигналу, но новая не открывается – «свистопляска» - советник «глючит». И есть еще момент. Если я правильно понял RefreshRates() – обновляет по данным, которые мы сами сформировали в файле EURUSD.tks (например). Тогда нет разницы брать 60 секунд или 1 секунду на сдвиг???? Если я беру 1 секунду, зная высоту бара – путь и время открытия предыдущего и последующего баров (время формирование бара) выходим на скорость для равновысоких или (по аналогии физики) принимая объем за массу и время открытия предыдущего и последующего баров (время формирование бара) выходим на импульс для равнообъемных. Хотя я не знаю, возможно это не интересно (как-то привязать время к равнообъемным и равновысоким) – расширить возможности Тикколлектора (или это просто лишнее), т.е. это не надо, но знаю одно – да равновысокие сейчас строятся по логике работы биржи и с алгоритмом все правильно - идет построение реальных баров, но для расчетов «разрывы» по барам, как-то не смотрятся. Это старый 3 последний вопрос (последний ?????) - возможно ли сделать "некорректно" - связать по ценам- Клозе +1= Опен 0 (не Бид) и высота бара "жесткая" (некий пересчет по Бидам - когда по между соседними Бидами "вмещается" несколько баров заданного размаха - если так сложилось), что приведет к появлению дополнительных (виртуальных) баров. Как реализовано в Синбаре, частично у Компостера, в старых индикаторах рендж баров. Пусть просто, хотя бы, в виде примера (части алгоритма) на форуме .

Scriptong: Вроде бы понял, что ты имеешь в виду. Тебе нужно строить range-бары без искажений, которые дают реальные тики. То есть, если был гэп между тиками (даже если 2 пункта, то уже гэп), то на построении баров это никак не сказывается - бар закрывается по той цене, по которой он должен был бы закрыться с учетом заданной высоты, также при этом открывается новый бар по цене закрытия предыдущего и бар сразу прирастает на разность между предыдущим и текущим тиками. То есть тика такого не было, но на графике мы его отображаем в виде цен закрытия и открытия двух соседних баров. Более интересная картинка выходит на больших гэпах. Например, задана высота range-бара 5 пунктов, а гэп - 30 пунктов. В итоге за один такой тик выстраивается 6 range-баров. Правильно я понял мысль?



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