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

Я новичок.

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: Scriptong пишет: ... Опиши необходимые изменения как можно подробнее. Так, чтобы я смог понять, что нужно (или я сам задам наводящие вопросы в процессе). После этого вполне возможно, что я сам внесу необходимые изменения... Добрый вечер, Игорь! Прежде всего здесь, видимо, вопрос как бы разбивается на два – ИНСТРУМЕНТ (как дополнение к TicksCollector) и ИНДИКАТОР. При этом совпадающие задачи и там, и там – – Согласовать тиковый объем (активность) конкретного равновысокого бара с «неким» конкретным (совпадающему с равновысоким) баром АКТИВНОСТИ. Т.е. в данный момент равнообъемный бар привязан к некоему (1 минута) ВРЕМЕННОМУ графику, а при этом, если брать равновысокий бар (т.к. он «не имеет» времени как такового), то последний существует как бы сам по себе. – Определить точку отсчета, тут могут быть варианты, на мой взгляд – удобней – iOpen(NULL,PERIOD_CURRENT,i). Тики выше Open – суммируются с «+», ниже Open суммируются с «-» и определяется количество тиков выше и ниже Open. – Желательно, для равнообъемного где-то знать цену, т.е. например – 100 тиков – Close_1=… , 200 тиков – Close_2=… , 300 тиков – Close_3=… и т.д. Т.е. ИНСТРУМЕНТ с возможностью получения максимума информации и применить другую схему алгоритма (например - построения нескольких равнообъемных значений на одном баре ) для использования в работе. Ну это если рассматривать ИНСТРУМЕНТ. А как ИНДИКАТОР (калькулятор), то тут конечно вариантов масса. Возможно рассматривать, как равнообъемный, но хотелось бы обязательно в рамках одного бара или наращивать по высоте, или вверх-вниз разных цветов на одном баре и соответственно остаток переносится без знака (со знаком надо смотреть – не знаю) на следующий бар. Может быть как РСИ или как равновысокие, или варианты OBV – на Рис. «накидал» и т.д. ( вариантов масса). Рис. – Я рассматриваю, как оценка рассогласования (дисбаланс) количества тиков между Open – High и Open – Low на одном баре. barHeight = iHigh(NULL,PERIOD_CURRENT,i) - iLow(NULL,PERIOD_CURRENT,i); if(barHeight != 0) { ProcClosOH = NormalizeDouble(MathAbs(iHigh(NULL,PERIOD_CURRENT,i) - iOpen(NULL,PERIOD_CURRENT,i)) / barHeight, 5); ProcClosOL = NormalizeDouble(MathAbs(iLow(NULL,PERIOD_CURRENT,i) - iOpen(NULL,PERIOD_CURRENT,i)) / barHeight, 5); } if (iClose(NULL,PERIOD_CURRENT,i) == iHigh(NULL,PERIOD_CURRENT,i) && ProcClosOH != 0) { DeltaVol_H = iVolume(NULL,PERIOD_CURRENT,i) * ProcClosOH; DeltaVol_L = iVolume(NULL,PERIOD_CURRENT,i) - DeltaVol_H; } if(iClose(NULL,PERIOD_CURRENT,i) == iLow(NULL,PERIOD_CURRENT,i) && ProcClosOL != 0) { DeltaVol_L = iVolume(NULL,PERIOD_CURRENT,i) * ProcClosOL; DeltaVol_H = iVolume(NULL,PERIOD_CURRENT,i) - DeltaVol_L; } if (iClose(NULL,PERIOD_CURRENT,i) == iHigh(NULL,PERIOD_CURRENT,i) && iVolume(NULL,PERIOD_CURRENT,i) != 0) DeltaV1 = (DeltaVol_H - DeltaVol_L) / iVolume(NULL,PERIOD_CURRENT,i); // знак значим else DeltaV1 = (DeltaVol_L - DeltaVol_H) / iVolume(NULL,PERIOD_CURRENT,i); // знак значим Соответственно буфер (отличие от штатного OBV) – ExtOBVBuffer = - DeltaV1; else ExtOBVBuffer = + DeltaV1; Выбор данной схемы (подхода) обусловлен – как «вписалась» АКТИВНОСТЬ в готовую систему в качестве дополнительного фильтра. Сравнение с ЗигЗагом и штатным OBV после оптимизации по форвард участкам – ЗигЗаг – OBV – Дисбаланс (дивергенция не используется) –

Balbesik: Решил добавить («…я сам внесу необходимые изменения…»), т.к. я ранее писал, что у меня «предубеждение» к дивергенции. Выше выложенный форвард участок с «Дисбаланс» был без дивергенции. Ниже по дивергенции, но добавлен в твоем индикаторе ЗигЗага маленький фильтр – При g_sell[index] идет High[index] != Close[index] и для g_buy[index] соответственно Low[index] != Close[index] а вот в самом индикаторе по "объему" – if ( iClose(NULL,PERIOD_CURRENT,i) == iHigh(NULL,PERIOD_CURRENT,i) && iVolume(NULL,PERIOD_CURRENT,i) != 0 && iClose(NULL,PERIOD_CURRENT,i+1) == iHigh(NULL,PERIOD_CURRENT,i+1) && iVolume(NULL,PERIOD_CURRENT,i+1) != 0 && iClose(NULL,PERIOD_CURRENT,i+2) == iHigh(NULL,PERIOD_CURRENT,i+2) && iVolume(NULL,PERIOD_CURRENT,i+2) != 0 ) DeltaV1 = (DeltaVol_H_0 + DeltaVol_H_1 + DeltaVol_H_2 - DeltaVol_L_0 - DeltaVol_L_1 - DeltaVol_L_2) / (iVolume(NULL,PERIOD_CURRENT,i) + iVolume(NULL,PERIOD_CURRENT,i+1) + iVolume(NULL,PERIOD_CURRENT,i+2)); else DeltaV1 = (DeltaVol_L_0 + DeltaVol_L_1 + DeltaVol_L_2 - DeltaVol_H_0 - DeltaVol_H_1 - DeltaVol_H_2) / (iVolume(NULL,PERIOD_CURRENT,i) + iVolume(NULL,PERIOD_CURRENT,i+1) + iVolume(NULL,PERIOD_CURRENT,i+2)); Расчет идет по 3 барам. Из посыла, что экстремум формируется из минимум 3 баров. Возможно, что-то даст (но это уже не при «прочих равных») . Рис. Форвард участок «Дисбаланс» по дивергенции.

Balbesik: Совсем забыл - Штатный OBV по дивергенции на том же форвард участке.


Balbesik: Игорь, привет! Увидел тебя на форуме. Если примешь решение по "калькулятору", то (просто общее для сравнения) MathAbs(DeltaVol_H - DeltaVol_L) / iVolume(NULL,PERIOD_CURRENT,i); по схеме 5-Typical-(H+L+C)/3 или 6-Weighted-(H+L+2*C)/4 все "сложиться". Кстати с наступающим.

Scriptong: Добрый день. Пока из всего описанного за 21 - 22.02.2015 понял лишь одно - есть необходимость измерения количества тиков на баре отдельно: выше цены открытия и ниже цены открытия. Для этого потребуется разработать индикатор по типу BearBullBalance. В принципе, идея интересная. Стоит посмотреть, что покажет этот индикатор. Если такое начало устраивает, то принимаются идеи насчет внешнего вида индикатора. Самый простой вариант - оставить вид от BearBullBalance. Но возможны варианты. По поводу совмещения равновысоких с эквиобъемными все равно не понимаю, как-то сумбурно описана идея. P. S. Пожалуйста, не выкладывай результаты тестирования. Они не только ничего никому из форумчан не говорят, но даже мне. Хотя и понимаю, на основе какого советника все это строится. Это просто замусоривание форума.

Balbesik: Scriptong пишет: Добрый день. Пока из всего описанного за 21 - 22.02.2015 понял лишь одно - есть необходимость измерения количества тиков на баре отдельно: выше цены открытия и ниже цены открытия. Для этого потребуется разработать индикатор по типу BearBullBalance. В принципе, идея интересная. Стоит посмотреть, что покажет этот индикатор. Если такое начало устраивает, то принимаются идеи насчет внешнего вида индикатора. Самый простой вариант - оставить вид от BearBullBalance. Но возможны варианты. По поводу совмещения равновысоких с эквиобъемными все равно не понимаю, как-то сумбурно описана идея. P. S. Пожалуйста, не выкладывай результаты тестирования. Они не только ничего никому из форумчан не говорят, но даже мне. Хотя и понимаю, на основе какого советника все это строится. Это просто замусоривание форума. «Кто празднику рад, то заранее пьян» - как-то так. 1. «…выше цены открытия и ниже цены открытия…» именно так и более мне не надо – вид любой все равно под себя переделывать.. 2. «…поводу совмещения равновысоких с эквиобъемными…» ну это просто на усмотрение, иначе «кто в лес, кто по дрова» - не понимаю, я вообще не понимаю зачем делать не связанные друг с другом разработки при связанных параметрах. 3. Иначе не представлял, как объяснять – «не выкладывай результаты тестирования» - то идея «с потолка» не принимается, то идея на основании результатов не подходит (вообще-то, видимо ты прав, зря время тратил – "от нечего делать"), как обосновывать не понятно - "инструкцию в студию"(возможно пригодится). Плоские у меня шутки!

Balbesik: Всех с праздником! Желаю здоровья и спокойствия. Хоть голова и «болит», но еще раз посмотрел ответ. Делаешь инструмент, тогда выше выложенное не надо. Scriptong пишет: «…есть необходимость измерения количества тиков на баре отдельно: выше цены открытия и ниже цены открытия…» Главное, возможно это подразумевается, это привязать к равновысокими барами, внешний вид не важен. Если это возможно, то это то, что меня интересует, ну и связать с ценой Открытия. Например BearBullBalance с равновысокими не работает (считает «настроение бабушки», т.к. привязан по ВРЕМЕНИ, а в равновысоких "времени нет" - я об этом писал). P.S. Scriptong пишет: «…на основе какого советника все это строится…» Твой советник, твой индикатор и штатный OBV - и гадать не надо.

Scriptong: Balbesik пишет: Главное, возможно это подразумевается, это привязать к равновысокими барами, внешний вид не важен. ОК. Со временем сделаю. Balbesik пишет: Например BearBullBalance с равновысокими не работает (считает «настроение бабушки», т.к. привязан по ВРЕМЕНИ, а в равновысоких "времени нет" - я об этом писал). Действительно, эти индикаторы не работают на графиках, у которых бары не привязаны к конкретному шагу времени. Исправлено. Balbesik пишет: Твой советник, твой индикатор и штатный OBV - и гадать не надо. В том то и дело, что мне это ясно. Другим то это неясно. У них нет этого советника и индикатора. Поэтому они тем более "не в теме".

Balbesik: Scriptong пишет: ОК. Со временем сделаю. Спасибо! Здорово. Scriptong пишет: Исправлено. Мне не помогло. Первый бар перерисовывается и фиксируется, как становится вторым. С нулевого бара весь объем сбрасывается на первый, т.е. как бы задержка (сдвиг) на один бар. Но это уже хорошо, т.к. появляется система (а возможно так и должно быть). Возможно связано, что я использую Синбар. Разбираться буду с будущим индикатором по цене Открытия (понятно, что делать). Спасибо.

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

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

Balbesik: Еше посмотрел - "+" (не знаю как ставить). Прелесть, что система работает согласованно. P.S. "Спасибо" нажимаю - "ноль реакции".

Anatoliy: Добрый суток, Игорь и всем. Вот пишу индикатор на MQL4, будущим перенести в MQL5 или наоборот, но оказалось не так просто. В MQL4 один стандарт, а в MQL5 другой стандарт, т.е. непереносимый код. Для того чтобы проделать работу не копировать код потом вставит или переписать код, а переделать на другой стандарт, но это не комфортно и глупо. Существует такой вариант переносимый код для MQL4 и MQL5?

Scriptong: Добрый день, Anatoliy. Anatoliy пишет: Существует такой вариант переносимый код для MQL4 и MQL5? Универсального способа не существует. Но можно облегчить перенос кода с MQL4 на MQL5 и обратно, выполняя код в стиле обновленного MQL4. Если действовать подобным образом, то код индикатора, написанного на MQL4, можно будет использовать в МТ5 с минимальными исправлениями. С советниками дело обстоит сложнее, т. к. логика работы с ордерами и позициями в платформах отличается кардинально.

Balbesik: «Ой ли? » Тогда дополнительно попытаюсь изложить свой взгляд, почему цена Открытия. Ну кроме положительной практики, а здесь основную роль играет цена по которой идет расчет (функция GetAppliedPrice – это я пропустил). На мой взгляд в индикаторе BearBullBalance при построении отсутствует точка отсчета (база), т.е. построение на каждом баре происходит, как бы в «воздухе» (без привязки к соседям). «…Она отображает количество изменений цены (тиков), пришедшее за единицу времени, а не размер реально заключенных сделок…» Т.е. да тут нет объема в денежном выражении, но может быть количество заключенных сделок и возможна фильтрация (каждый дилинг индивидуально – что плохо, но это мы не знаем, хотя есть основания так думать), т.к. на картинке (график цены) – «Отправлено: 14.02.15 01:10. Заголовок: Scriptong пишет: Чт..» на первый взгляд есть соответствие количеству изменения цены, но на Синбаре часто встречается несоответствие (сам индикатор может быть некорректен), так как на TicksCollector этого не наблюдаем – принимаем количество изменений цены . А если это так, то данное изменение в виде количества тиков вроде бы логичней рассчитывать от чего-то! Пусть цена Открытия в качестве базы может быть не корректна, но хоть, что-то. Тем более этот вывод подтверждает практика в виде сильной зависимости от цены по которой производится расчет, фактически выбор базы внутри бара, но эта база жестко не связана с соседями и имеет другую задачу, т.е. это чуть другое. Поэтому просто активность выше – ниже цены Открытия (не важно, куда идет цена вверх или вниз), на мой взгляд, более значима. Как-то так. Хотя могу ошибаться.



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