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

Я новичок.

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 пишет: Задача - разгрузить память! Тогда вновь повторюсь. Решение проблемы существует. Просто нужно двигаться в другом направлении. Нужно думать не о том, как освободить память при тестировании, а написать такой советник, который не будет использовать внешние индикаторы, располагая необходимыми функциями внутри кода. Причем никто не призывает отказаться от использования индикаторов. Пусть будут. Просто по каждому такому индикатору написать аналог для внутреннего использования в коде советника.

Balbesik: "....– а надо ли...." Сегодня нет желание, что-то комментировать. Только картинки. Это "любимый" МТ в реале, в тесте и в "тесте2". Учитывая, что эти уголовники (а в любой другой стране их бы давно посадили) могли не сделать преемственность с 509 билда и я имею проблемы (точнее за мой счет - как они привыкли). Хотя смешно это писать - у меня нет с ними никаких отношений - терминалы у меня от ДЦ, а не от них (и когда ко мне "лезут" в комп ДЦ "не при делах" - просто наглый беспредел). А ДЦ, ну это наглецы с "островов" (они прикрывают"хвостов") считают, что никто не поедет на острова с ними разбираться.

Scriptong: Ну пока да, без комментариев не понять, какая проблема освещается. Если речь о расхождениях в номерах баров между онлайн-графиком и графиком визуализации, то у них элементарно разные начальные точки. У онлайн графика бар с индексом 0 открылся в 23:58, а у графика визуализации - в 22:43. Потому и индексы баров разные. А вот что такое СС_8933 и СС8914 - это тайна за семью печатями.


Balbesik: "...Ну пока да, без комментариев не понять, какая проблема освещается. Если речь о расхождениях в номерах баров между онлайн-графиком и графиком визуализации, то у них элементарно разные начальные точки. У онлайн графика бар с индексом 0 открылся в 23:58, а у графика визуализации - в 22:43. Потому и индексы баров разные. А вот что такое СС_8933 и СС8914 - это тайна за семью печатями..." Да проблема чуть другая, остальное следствие. К делу не относится (следствие) – СС_89 это просто я так обозначил номер бара, если по картинке посмотреть, то , где желтые стрелочки, к 31 бару добавить количество баров с соседней картинке мы и получим 33 бар (график один и тот же – это сделана пауза при моделировании в тестере). Суть проблемы – равно высокие бары – я использую старый индикатор равно высоких баров (509 билд) и у меня создается впечатление, что с новыми билдами он не согласовывается по prevCalculated . Когда идет реал лимит «прыгает» по очереди 0 и заданная величина -1500 например и i идет по циклу от МАХ к «0» аналогично верхняя картинка - эксперты. Третья картинка сверху это реал выводиться лимит. Последняя это тестер по значениям i на что-то похоже (вопрос номера бара – 14 - опускаем). Еще раз прикрепил картинку в ней есть доработка (самоделка) – это реал с появлением нового бара, где prevCalculated становится равен «0» вместо значения. Если с каждым появлением нового билда ждешь очередных проблем, это раздражает. Картинки доработки – Доработать под современные билды индикатора равно высоких баров не представляется возможным – там вообще «темный лес». Тут я вообще ничего не понимаю Как ведет себя твой индикатор не знаю, т.к. у него нет истории и это мне не очень удобно. Старый индикатор у тебя есть, сейчас сброшу еще раз (не знаю, как на форум прикрепить Экзе- файл) если его возможно доработать, то на твое усмотрение, может быть выложишь на форум (возможно кому-нибудь, как и мне, нужна история), а еще лучше сделать аналог TicksCollector под равно высокие бары (для сервиса - без тиков, но с историей и без «разрывов»(по возможности))

Scriptong: Balbesik пишет: Еще раз прикрепил картинку в ней есть доработка (самоделка) – это реал с появлением нового бара, где prevCalculated становится равен «0» вместо значения. Для оффлайн графиков это нормально. Ведь история этого графика при своем формировании переписывается заново полностью. Терминал считает, что история полностью подкачана. Потому и выдает 0. Тут не на что грешить. Balbesik пишет: не знаю, как на форум прикрепить Экзе- файл См. тему Вставка файлов и рисунков. Balbesik пишет: а еще лучше сделать аналог TicksCollector под равно высокие бары (для сервиса - без тиков, но с историей и без «разрывов»(по возможности)) Без тиков - это что ли строить график по минутной истории? График нестандартного периода таким образом построить можно, а вот равновысокие и эквиобъемные строить проблематично - они будут врать на спорных моментах. Например, когда минутная свеча выше, чем высота равновысокого бара. Что такое "без разрывов" до сих пор не понял.

Balbesik: «…Для оффлайн графиков это нормально. Ведь история этого графика при своем формировании переписывается заново полностью. Терминал считает, что история полностью подкачана. Потому и выдает 0. Тут не на что грешить…» Bars - IndicatorCounted(); - теряется смысл старого, вместо расчета одного бара, идет вся история по i – что и наблюдаем – «…и i идет по циклу от МАХ к «0»…» Не понимаю. Я сбросил на почту.

Balbesik: "...Что такое "без разрывов" до сих пор не понял.,," Кажется разобрался. Моя проблема (старые билды не работают корректно) График с реала - без "разрывов" Тот же график после импорта в тестер. Нет корректных исходных данных = нет результата.

Balbesik: "...См. тему Вставка файлов и рисунков..." - "Вставка файла 1. Закачать нужный файл на любой файловый сервер. Например, http://gfile.ru/. .." - "Сервер не найден Firefox не может найти сервер gfile.ru..." - других я не знаю. Предполагаю, что проблема "разрывов", в данном случае для тестера, в скрипте для закачки в тестер. Он короткий, поэтому выкладываю прямо здесь - int start(){ int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,","); for(int i=Bars-1;i>=0;i--){ FileWrite(h,TimeToStr(Time,TIME_DATE),TimeToStr(Time,TIME_MINUTES),Open,High,Low,Close,Volume); } FileClose(i); return(0); } Согласно описания uint FileWrite вроде все нормально, почему "глючит" не пойму. Где я "не догоняю"?

Scriptong: Balbesik пишет: Bars - IndicatorCounted(); - теряется смысл старого, вместо расчета одного бара, идет вся история по i – что и наблюдаем Так и есть. При работе с оффлайн графиками приходится использовать другие схемы отслеживания моментов появления нового бара. Но в этом нет ничего страшного, т. к. оффлайн графики, чаще всего, формируются собственными программами, а не терминалом. Потому в оффлайн-графике нет такого события, как "докачка данных". Оффлайн-график обычно формируется на старте полностью, а затем просто обновляется (0-й бар или добавление одного бара). Balbesik пишет: "...См. тему Вставка файлов и рисунков..." - "Вставка файла 1. Закачать нужный файл на любой файловый сервер. Например, http://gfile.ru/. .." - "Сервер не найден Firefox не может найти сервер gfile.ru..." - других я не знаю. В google по ключевым словам "бесплатный файловый сервер" можно найти много подобных. Я сейчас пользуюсь dropmefiles.com. Там, правда, слишком ограничено время хранения - неделя. Но для текущих задач этого достаточно. Balbesik пишет: Предполагаю, что проблема "разрывов", в данном случае для тестера, в скрипте для закачки в тестер. Он короткий, поэтому выкладываю прямо здесь - int start(){ int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,","); for(int i=Bars-1;i>=0;i--){ FileWrite(h,TimeToStr(Time,TIME_DATE),TimeToStr(Time,TIME_MINUTES),Open,High,Low,Close,Volume); } FileClose(i); return(0); } Согласно описания uint FileWrite вроде все нормально, почему "глючит" не пойму. Где я "не догоняю"? При открытии файлов совместно с флагами FILE_WRITE и FILE_READ лучше использовать флаги: FILE_SHARE_WRITE и FILE_SHARE_READ соответственно. Также при работе с текстовыми файлами следует явно указывать кодировку. Это флаги FILE_ANSI и FILE_UNICODE. К сожалению, в документации по MQL есть множество подобных белых пятен. Хотя, ради справедливости отмечу, что и у Microsoft дело обстоит не намного лучше. О многих вещах приходится догадываться, набивая огромные шишки опыта.

Balbesik: Scriptong пишет: "...При открытии файлов совместно с флагами FILE_WRITE и FILE_READ лучше использовать флаги: FILE_SHARE_WRITE и FILE_SHARE_READ соответственно. Также при работе с текстовыми файлами следует явно указывать кодировку. Это флаги FILE_ANSI и FILE_UNICODE. К сожалению, в документации по MQL есть множество подобных белых пятен. Хотя, ради справедливости отмечу, что и у Microsoft дело обстоит не намного лучше. О многих вещах приходится догадываться, набивая огромные шишки опыта..." Спасибо, Игорь! Все попробовал. Но похоже равновысокие бары невозможно в тестере моделировать. При загрузке они появляются почти все на графике, но после 1 "прогона" или перезагрузки терминала - "слетают" и весь график в "разрывах", плюс "разрывы" (бывают) с реала - в общем полная ерунда с котировками в тестере. Жаль. Давным давно писал тебе, что мне надо уходить на Эксель или Матлаб, но мозгов не хватает, да и время потеряно.

Scriptong: Balbesik пишет: Все попробовал. Но похоже равновысокие бары невозможно в тестере моделировать. При загрузке они появляются почти все на графике, но после 1 "прогона" или перезагрузки терминала - "слетают" и весь график в "разрывах", плюс "разрывы" (бывают) с реала - в общем полная ерунда с котировками в тестере. Распиши пошагово, как подготавливаешь данные и тестируешь. Я, к примеру, не пытался еще заниматься тестированием на нестандартных таймфреймах в новом терминале. Попробую по твоим шагам и возможно, смогу установить причину. В крайнем случае попробую обосновать, почему невозможно тестирование на нестандартных ТФ. Хоть ясность какая-то будет.

Balbesik: Scriptong пишет: ... Хоть ясность какая-то будет.... Добрый вечер, Игорь! Это индикатор равновысоких баров уже переделан (прошу не смеяться) под новые билды – индикатор http://dropmefiles.com/5V6Vf С ним проблем нет, хотя, т.к. я с этими форматами вообще ничего не понимаю, он может пригодиться (возможно, если запись в нем – хотя врятли). Нормально работает – без вопросов (даже лучше, на мой взгляд, с т.з. «разрывов» чем ЭКЗ-ник 509 билда). Устанавливаю индикатор на 1 минуту – открыть автономно (81) – получаем график. Графики рисуются корректно (вопросов никаких). Теперь в окне есть корректный график и на него «бросаем» скрипт (просто – Исполнить на графике) – скрипт описан выше постом – в МКЛ4 в папке Файл получаем файл графика (csv). В терминале для тестирования (он отключен от интернета, ВСЯ история удалена – чистый) – Сервис – архив котировок (выбираем 1 минуту, да любой ТФ) – импорт – этот файл - ОК. Загрузили! А вот тут начинаются проблемы. Если сразу, терминал не закрываем, просто поменять ТФ 1 мин. – 5 мин – 1 мин. то увидим ПОЧТИ корректный график и если на бары поставить вертикальные линии между двумя минутами (а линии по другому и не встанут), то можно увидеть участки МЕЖДУ этими линиями на которых находятся бары. Если теперь перезагрузить терминал или включить моделирование (старт) эти бары «вырежуться» и более их не будет – сплошные «разрывы». Т.к. внешний вид графика меня не интересует, а интересуют номера баров и цены попытался «перепривязать» минутки, как-то так – Но вообще ничего не работает, а эти форматы записи или чтения для меня «караул». Вопрос скрипта!

Balbesik: Scriptong пишет: Хоть ясность какая-то будет Добрый день, Игорь! Сделал в дополнение в виде картинок и Эксель. «…а интересуют номера баров и цены попытался «перепривязать» минутки, как-то так…» Брал старый скрипт и переделанный - «перепривязанный» к барам, а так же 625 билд. Сделал файлы. Старый скрипт – Переделанный – А это 625 балд старый и переделланный – Выводы не делаю, т.к. тут «туплю» и просто – что вижу – по объёму расхождение. Переделанный скрипт на 625 билде строит на тестере графики БЕЗ ВОПРОСОВ! Может это, что-то даст. Т.к. постоянно меняют билды, сменили правила написания алгоритма, я ничего не понимаю. Могу утверждать одно – на 625 все нормально.

Balbesik:

Scriptong: Balbesik пишет: Это индикатор равновысоких баров уже переделан (прошу не смеяться) под новые билды – индикатор http://dropmefiles.com/5V6Vf Файл почему-то удален с сервера. Хотя неделя то еще не прошла, чтобы последовало автоматическое удаление. Balbesik пишет: Теперь в окне есть корректный график и на него «бросаем» скрипт (просто – Исполнить на графике) – скрипт описан выше постом – в МКЛ4 в папке Файл получаем файл графика (csv). Все-таки непонятно, что за скрипт. Хотя ясно, что таким образом ты переписываешь данные с нестандартного графика в csv-файл для последующего импорта через Архив котировок. Balbesik пишет: Если сразу, терминал не закрываем, просто поменять ТФ 1 мин. – 5 мин – 1 мин. то увидим ПОЧТИ корректный график и Ты писал, что вся история в терминале удалена. После этого была закачана минутная история. Каким образом будет сформирован график М5, если терминал отключен от интернета? На мой взгляд, здесь и кроется ошибка.



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