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

Я новичок.

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: Balbesik пишет: Опять "слетел". К сожалению, по этому рисунку я не могу понять, в чем заключается "слет". Поясни хотя бы в двух словах. Также приложи пожалуйста настройки TicksCollector, с которыми у тебя проблема, и что записано в журнале экспертов (может, есть какие-то ошибки).

Balbesik: Scriptong пишет: К сожалению, по этому рисунку я не могу понять, в чем заключается "слет". Поясни хотя бы в двух словах. Также приложи пожалуйста настройки TicksCollector, с которыми у тебя проблема, и что записано в журнале экспертов (может, есть какие-то ошибки). "слет" – бары начинают рисоваться, как штрихи (в конце графика («0» - бар)). Объем бара = 1 на всех штриховых барах. Подобную картинку я выше выложил – Отправлено: 18.03.15 21:06 . Если снять индикатор с графика и повторно установить, то график вообще перестает строиться. Тут, да, чтобы запустить необходимо удалить фаил.tks с раннее собранными тиками. В журнале экспертов ничего не наблюдал. На этой неделе, в первую очередь, хочу проверить возможное влияние входных сигналов Бид и Аск (даже если по логике и быть не может). Связно со следующим – как-то у меня вилы и цели строились на базе ЗигЗага Candida (HZZ) на нем в один день недели, точно в одно и тоже время, происходило перестроение и вил и целей. При этом я проверял по двум «кухням» Альпари и FXCM так вот по одной из них это происходило в воскресенье, а у второй почему-то в четверг и всегда по времени, т.е. имело не случайный характер. Они «переписывали» историю, заявляя, что убирают нерыночные котировки – все нам «на благо». Т.е. в этот момент может быть, что угодно. Сейчас хочу исключить этот момент (если это имеет место быть).


Balbesik: В дополнение - поговорил с ребятами, которые занимаются фондой. Они не знают МТ4 и форекс. Но проверку в части Бид и Аск делали. Получилось на 200 000 тиков Бид=Аск порядка 50 случаев, Аск - Бид = (отрицательная величина) 2-3 случая. Если Аск - Бид = минус, то однозначно относят к технологическому сбою, то Аск = Бид помимо технологического сбоя, имеет место быть и может быть значимо при комплексной оценки. Возможно это что-то даст. И мой старый вопрос - может ли на форексе, например Бид = EMPTY_VALUE. Или другими словами MarketInfo принимать пустое значение.

Balbesik: По возможности исключил некорректные данные по Бид и Аск. Не помогло - "слет". Пока более версии нет. До этого, правда не особо проверял и сравнивал с работой равнообъемного, там "слетов" не было, т.е. первое и остается - цена. Я не знаю структуру построения Тикколлектора. Принцип - "обезьяны, которая трясет" не прошел. Более "в чужом" разбираться смысла не вижу (можно это делать до бесконечности, особенно, когда автору это особо и не надо - один и тот же вопрос 10 раз). Все. На Тикколлекторе - равновысокие (у меня не работают). "Индикатор и советник распространяются "как есть". Автор не несет ответственности за прямые или косвенные убытки, понесенные трейдерами вследствие использования программ." - этим все сказано никаких обид. P.S. Вопросы соответственно все отпадают.

Scriptong: Balbesik пишет: Вопросы соответственно все отпадают. ОК. Значит, чинить TicksCollector будем с другим его пользователем, у которого хватит заинтересованности довести дело до конца.

Balbesik: Scriptong пишет: ОК. Значит, чинить TicksCollector будем с другим его пользователем, у которого хватит заинтересованности довести дело до конца. Игорь! Где я тебя оскорбил или задел? Я выложил - состояние дел (без разработчика - а это бред). У меня с тобой были нормальные отношения (как мне казалось). Что-то я не заметил "...заинтересованности..." на ветке. Но, так или иначе " Как та обезьяна, которая трясет дерево", кажется я проблему Тикколлектора решил. Обидно, что ты, как автор, иногда устраняешься. "Гоняю" следующию неделю и выложу. Кстати ты опять (как в советнике) деление на "0" в библиотеке пропустил - считаю это "не при делах" - у меня есть основание считать это мелочью.

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

Balbesik: Scriptong пишет: Это серьезная ошибка. Можешь указать где (какая библиотека)? Привет Игорь! Заставил чуть раньше ответить. Вообще-то библиотека (вынесенная функция) у тебя одна (если у тебя более, чем одна, это интересно, т.к. проблема ПАМЯТИ путем оптимизации, в части Тикколлектора, меня не убедила ). bool NonStandartTFChart::IsNewBarByConvertType(datetime &time) const { switch (m_convertType) { case CONVERT_TYPE_TF: if (time < m_rates.time + m_chartProperty) return false; if (m_chartProperty != 0) // это я вставил { time = time / m_chartProperty * m_chartProperty; return true; } Любое деление я воспринимаю, как потенциальная угроза (даже при страховке - "советник не работает"). Меня мало беспокоит, что при инициализации все нормально (опыт советника). Вопрос другой – ты «устранился» - а именно не даёшь версии подлежащие проверки (я понимаю - у тебя самого не хватает времени и на все не хватит). Я на пример не понимаю – bool SaveRegularTick() { // далее моя вставка - и Аск можно исключить - "масло масленое" double Bd1 = 0.0; double Ak1 = 0.0; if ( NormalizeDouble(Bid ,6) == NormalizeDouble(Ask ,6) || NormalizeDouble(Ask ,6) - NormalizeDouble(Bid ,6) < 0 || Bid == EMPTY_VALUE || NormalizeDouble(Bid ,6) == 0 || Ask == EMPTY_VALUE || NormalizeDouble(Ask ,6) == 0 ) { Bd1 = Bid; Ak1 = Ask; Print(" Bd1 ",Bd1); Print(" Ak1 ",Ak1); //return false; принт выше это контроль «для себе» return IsFileFlush(false); } Почему для bool, когда вроде бы достаточно return false; не достаточно и идет «слет» - Журнал – История Бар -2 ошибки. А return IsFileFlush(false); - стоит 2 ю неделю? Я не зная твоего алгоритма, методом проб, не знаю, где искать и это раздражает – не понятно – А тебе этот индикатор (в свободном доступе) нужен?.

Balbesik: "...Например, стратегия торговли по индикатору Moving Average чаще всего основана на пересечении двух средних скользящих с разным периодом или разным сдвигом, различные осцилляторы (MACD, Stochastic, RSI, RVI и т. д.) дают сигналы при пересечении своих главных и сигнальных линий или (в случае отсутствия сигнальной линии) при пересечении заданных пользователем уровней..." Игорь! Я один раз на "Красном форуме" на 25-30 листах ветки прочитал, что такое Машка (я понял, как это серьезно и сколько надо знать) Но понял я еще и одно - нет корректных входных данных - нечего делать. Это то, чего я добиваюсь.

Scriptong: Balbesik пишет: Любое деление я воспринимаю, как потенциальная угроза (даже при страховке - "советник не работает"). По сути - посыл правильный, т. е. нужно подозрительно относится к любой операции деления, которая осталась без проверки. Но в данном проверка есть. Речь идет о неизменяемом параметре - члене класса. К моменту его инициализации все необходимые проверки уже проведены: if (param < 1) { Alert(name, ": значение параметра ", paramName, " должно быть натуральным числом. Индикатор отключен."); return false; } Это часть функции IsThreeParametersCorrect, расположенной в файле TicksCollector_AD.mq4 (строки 157 - 177). Проследи, каким образом инициализируется этот член класса - это производная от входного параметров i_secondsPerBar, i_pointsPerBar и i_ticksPerBar. Попробуй задать их значение, равное нулю, и посмотри результат запуска индикатора. Balbesik пишет: Почему для bool, когда вроде бы достаточно return false; не достаточно и идет «слет» - Потому что bool это не только false, но и true. Если функция SaveRegularTick вернет false, то такой результат расценивается как ошибка. Balbesik пишет: не понятно – А тебе этот индикатор (в свободном доступе) нужен?. Зачем он мне в свободном доступе? Это ведь моя разработка, которая всегда со мной. Индикатор нужен не мне, а другим людям (наверное). Потому и выложил его.

Scriptong: Balbesik пишет: Игорь! Я один раз на "Красном форуме" на 25-30 листах ветки прочитал, что такое Машка (я понял, как это серьезно и сколько надо знать) Но понял я еще и одно - нет корректных входных данных - нечего делать. Это то, чего я добиваюсь. Вот пример твоей концентрации - и часа не прошло, а ты уже с одной задачи перепрыгнул на другую. Как с тобой вести разговор, если для решения поднимаемых задач нужны не просто часы, а недели, месяцы, а то и годы. Но ты даже часа не можешь подождать.

Balbesik: Scriptong пишет: К моменту его инициализации все необходимые проверки уже проведены Как раз об этом я и писал - "..даже при страховке - "советник не работает"...". Scriptong пишет: Это ведь моя разработка Я как раз об этом - не первый раз уже "обходиться" вопрос ПАМЯТИ. В выложенном варианте показана возможность! Вообще-то , что это возможно известно! Игорь! Походы разные - практика и возможности. Я не владея программированием знаю, что "что-то можно", но это не значит, что лично "я" смогу сделать Остальное в конце недели - если будут основания.

Scriptong: Balbesik пишет: Как раз об этом я и писал - "..даже при страховке - "советник не работает"...". Опять нет конкретики: 1. Какой советник не работает? (контекст разговора - ИНДИКАТОР TicksCollector). 2. Какая связь между ошибкой деления на ноль и не работой советника. 3. В чем выражается неработоспособность советника? Balbesik пишет: Я как раз об этом - не первый раз уже "обходиться" вопрос ПАМЯТИ. Что там с памятью?

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



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