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

Я новичок.

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 пишет: Работа советника, с т.з. программиста – Какой вариант более предпочтительней? Связанно ( к примеру) с моим недопониманием по МТ5 и твоим объяснениями. if(IsTesting()) { if(TimeCurrent()<StrToTime(i_TesterStartDateTime)) { Print(" TestingXXXXXXXXXXXX: = ",1," TimeCurrent(): = ",TimeCurrent()); return (0); } } // if(IsTesting()) // { // if(iBars(NULL,PERIOD_D1)<i_optimizeDaysAmount) // { // Print(" TestingXXXXXXXXXXXX: = ",1," TimeCurrent(): = ",TimeCurrent()); // return (0); // } // } // if(IsTesting()) // { // if(Bars < (PERIOD_D1*i_optimizeDaysAmount)) // { // Print(" TestingXXXXXXXXXXXX: = ",1," TimeCurrent(): = ",TimeCurrent()); // return (0); // } // } Из трех приведенных вариантов по смыслу похожи только первые два. Первый вариант обладает большей точностью (до секунды), второй - меньшей (до суток). Третий вариант будет похож на второй только при условии запуска советника на минутном графике.

Scriptong: Balbesik пишет: половина «ручной работы уже решено, а вместо «ручек» запустить советник, а ему нужен штатный ТФ 1 (1440 баров) день и «загнать» результаты в реал?» Не понял мысль. Balbesik пишет: А можно ли результаты тестирования штатного тестера «загнать» в советник автоматом (я понимаю, что при желании все можно). Можно, но достаточно сложно.

Balbesik: «…Из трех приведенных вариантов по смыслу похожи только первые два. Первый вариант обладает большей точностью (до секунды), второй - меньшей (до суток). Третий вариант будет похож на второй только при условии запуска советника на минутном графике…» Главное я не напортачил с т.з. программирования. «…Не понял мысль…» «…половина «ручной работы»…» - чтобы поставить на тестер нестандартный ТФ приходилось делать массу шагов, а в рамках темы «Тестирование на реальной истории», я так понял, эта задача решена в автомате. А вот далее «мысль» - «…запустить советник…» - не проходит – проверил. Т.е. прогнал советник с оптимизацией в тестере, он также накапливает память и в зависимости от компа и задач он в конечном итоге зависнет. Также еще раз убедился, что если делать оптимизацию того же советника штатным тестером, то после окончания оптимизации он четко «сбрасывает» память. Сейчас Альпари откатили с 711 до 670 билда – нормально. Проверил 670 и 722 билды (сменил сам на 722 у Альпари) мне хватает памяти на 9 дней – это уже что-то – в выходные советник можно переустановить , чтобы «сбросить» память. Именно в этом плане считаю тему «Тестирование на реальной истории» очень интересной или каким-то образом «скидывать» память у советника в автомате - без переустановки, но, как я понял, это невозможно.


Scriptong: Balbesik пишет: «…половина «ручной работы»…» - чтобы поставить на тестер нестандартный ТФ приходилось делать массу шагов, а в рамках темы «Тестирование на реальной истории», я так понял, эта задача решена в автомате. Не проверял. Но, чисто интуитивно, думаю, что не получится, т. к. МТ4 вряд ли может так просто работать с нестандартными ТФ. Чуть освобожусь - проверю. Balbesik пишет: Именно в этом плане считаю тему «Тестирование на реальной истории» очень интересной или каким-то образом «скидывать» память у советника в автомате - без переустановки, но, как я понял, это невозможно. Есть еще такая мысль: закрывать окошко тестера, а не весь терминал. По крайней мере, с DLL такой способ работает. Если такой способ подойдет, то можно автоматизировать.

Balbesik: Добрый вечер, Игорь! «…Не проверял. Но, чисто интуитивно, думаю, что не получится, т. к. МТ4 вряд ли может так просто работать с нестандартными ТФ. Чуть освобожусь – проверю...» Большая просьба проверить на равно высоких барах. Лет 5 – 10 назад было много дебатов по кандидатской «О некоторых вероятностно-статистических методах в техническом анализе» Автор: Пастухов С. В. , а там Kagi, renko -построения, анализ, т.е. «где-то рядом». Пытался сам набрать историю TicksCollector_build625_v2 , но 2014.10.16 17:53:20.125 HistoryBase: 7 errors in 'EURUSD313' это я уже проходил, удаление из папки истории 313 ничего не дает, помню не смог «победить» и бросил, как решать проблему так и не понял. Не сносить же всю историю (стандартные котировки), т.е. да я закрывал – открывал терминал, разрывал связь . Переустановка индикатора, соответственно, ничего не дает. "...Есть еще такая мысль: закрывать окошко тестера, а не весь терминал. По крайней мере, с DLL такой способ работает. Если такой способ подойдет, то можно автоматизировать..." Далее там есть продолжения - была статья на Кодебазе по работе с штатным тестером терминала для тестмирвания и рабочим терминалом совместно.

Scriptong: Balbesik пишет: Большая просьба проверить на равно высоких барах. Применительно к тестеру тип представления графика ни к чему. Проверил доступ к нестандартному графику. Для примера взял М3. Все стандартные графики читаются, а нестандартные выдают нули. Затем сгенерировал нестандартный таймфрейм отдельно через TicksCollector и еще раз проверил в тестере - данные появились. Таким образом, как и раньше, для доступа к нестандартным таймфреймам в тестере необходимо предварительно создать нестандартный таймфрейм. Balbesik пишет: Пытался сам набрать историю TicksCollector_build625_v2 , но 2014.10.16 17:53:20.125 HistoryBase: 7 errors in 'EURUSD313' Еще раз напоминаю алгоритм генерации нестандартных таймфреймов: 1. Качается история тиков по интересующему символу: 1-ая часть и 2-ая часть. 2. Если нужна полная история, склеенная из двух архивов, то история склеивается при помощи скрипта OneTicksFileMaker или при помощи TotalCommander (вторую часть дописать к первой). 3. Полный файл истории помещается в папку MQL4\Files рабочего каталога терминала. 4. На графике символа, для которого подготовлена история, запускается TicksCollector, взятый отсюда, с выбором того типа нестандартного графика, который необходим. 5. Итоговый нестандартный график открывается через меню терминала "Файл" - "Открыть автономно". Период графика 312, 313 или 314 (смотря, что указывалось при запуске TicksCollector). В тестере необходимо обращаться к данным графика с периодом 312, 313 или 314 минут. Этот момент только что проверен в тестере.

Balbesik: Добрый день, Игорь! Еще раз пробую вернуться к TicksCollector. Как только он появился я пробовал с ним работать и еще тогда писал, что он у меня «слетает» и прикреплял картинку. Сейчас ситуация та же. Причину понять не могу. Картина та же – рис. EURUSDM313.png. (тогда я прекратил пытаться разобраться). Пробовал запустить FXTFileMaker_Script_AD – «…2014.10.17 15:01:28.296 FXTFileMaker_Script_AD EURUSD,M313: Alert: FXTFileMaker_Script_AD: ошибка (N5004) открытия файла EURUSD.tks. Скрипт отключен…» Тоже ничего не получается. Склейку делал. Обратил внимание, что в момент установки скрипта «глючит» TicksCollector - картинка – рис. EURUSDM313_0. Но возможно, при необходимости, со временем разберусь Главное по нестандартным ТФ. «…Таким образом, как и раньше, для доступа к нестандартным таймфреймам в тестере необходимо предварительно создать нестандартный таймфрейм…» - Не очень понятно, что это значит? В папке tester – папка history – должен появиться файл 313 (он выбран)? «…В тестере необходимо обращаться к данным графика с периодом 312, 313 или 314 минут...» В советнике тогда в ТФ ставим 313 и тестируем на 1 минуте? Как я понял – Если это так, замещения ТФ1, 5..и т.д. не происходит, это хорошо (для советника нужен Д1), возникает самое важное – в реале TicksCollector постоянно формирует файл типа ТКS, а скрипт FXTFileMaker_Script_AD – «…При этом следует учитывать, что границы дат должны находиться внутри того диапазона котировок, который присутствует в исходном файле типа TKS…» не очень ясно, будет ли аналогично, постоянно пополнять созданный файл в папке tester – папка history (в скрипте стоят границы дат). Цель всех этих вопросов – понять в перспективе возможность оптимизации советника штатным тестером в реале (автоматически).

Scriptong: Balbesik пишет: Пробовал запустить FXTFileMaker_Script_AD – «…2014.10.17 15:01:28.296 FXTFileMaker_Script_AD EURUSD,M313: Alert: FXTFileMaker_Script_AD: ошибка (N5004) открытия файла EURUSD.tks. Скрипт отключен…» Скорее всего, файл EURUSD.tks отсутствует в папке MQL4\Files. Посмотри, в ту ли папку ты его копируешь. В терминале используй меню Файл - Открыть каталог данных. Далее зайди в MQL4\Files и проверь наличие файла там. Balbesik пишет: Тоже ничего не получается. Склейку делал. Обратил внимание, что в момент установки скрипта «глючит» TicksCollector - картинка – рис. EURUSDM313_0. Без дополнительных сведений тяжело понять, что в рисунках не так. 1. Какая высота равновысоких баров используется? 2. Собирает ли индикатор тики онлайн? И если по верхнему рисунку есть предположения того, что в нем не так, то на нижнем рисунке вроде бы все нормально. Даже неясно, что не устраивает. Balbesik пишет: «…Таким образом, как и раньше, для доступа к нестандартным таймфреймам в тестере необходимо предварительно создать нестандартный таймфрейм…» - Не очень понятно, что это значит? Означает, что перед тем, как использовать в тестере нестандартный таймфрейм, необходимо создать этот нестандартный таймфрейм при помощи TicksCollector. То есть нестандартный таймфрейм должен существовать в списке автономных графиков. Только тогда его сможет "увидеть" тестер. Без этого тестер не сможет работать с нестандартным таймфреймом. Balbesik пишет: «…В тестере необходимо обращаться к данным графика с периодом 312, 313 или 314 минут...» В советнике тогда в ТФ ставим 313 и тестируем на 1 минуте? Тестировать можно на любом периоде. Только если нужны данные нестандартного таймфрейма, то в коде нужно к ним обращаться так: double close = iClose(NULL, 313, 1); // Цена закрытия бара с индексом 1 на графике равновысоких баров Balbesik пишет: В папке tester – папка history – должен появиться файл 313 (он выбран)? Нет. Файл нестандартного таймфрейма (расширение hst) должен находиться в папке Рабочий каталог терминала\history\Брокер. TicksCollector автоматически поместит его туда. А вот файл, создаваемый скриптом FXTFileMaker (расширение fxt), попадает в папку tester\history. Balbesik пишет: «…При этом следует учитывать, что границы дат должны находиться внутри того диапазона котировок, который присутствует в исходном файле типа TKS…» не очень ясно, будет ли аналогично, постоянно пополнять созданный файл в папке tester – папка history (в скрипте стоят границы дат). Что имеется в виду под "будет ли аналогично постоянно пополнять созданный файл". Кто будет пополнять?

Balbesik: Добрый вечер, Игорь! «…Без дополнительных сведений тяжело понять, что в рисунках не так. 1. Какая высота равновысоких баров используется? 2. Собирает ли индикатор тики онлайн? И если по верхнему рисунку есть предположения того, что в нем не так, то на нижнем рисунке вроде бы все нормально. Даже неясно, что не устраивает…» 41 пункт. Собирает. При попытке установить FXTFileMaker_Script_AD изменилась высота бара (выделенный участок) – каким-то образом FXTFileMaker_Script_AD повлиял на TicksCollector, но возможно «глюк». Пока не забыл – в реале «проскочило» деление на «0» в MI_Trade (185,65 - кажется) (я к ней вообще не прикасался), изменил – double LotFloor(double value) { if (g_lotStep == 0)return (0); return(MathFloor(MathMin(MathMax(value, g_minLot), g_maxLot)/g_lotStep)*g_lotStep); } Возможно «глюк», еще посмотрю.. «…Тестировать можно на любом периоде. Только если нужны данные нестандартного таймфрейма, то в коде нужно к ним обращаться так:…» Попробовал через твой советник (в нем предусмотрено обращение к ТФ) - разницы не заметил – корректировать индикаторы, видимо, нет необходимости. «…Скорее всего, файл EURUSD.tks отсутствует в папке MQL4\Files. Посмотри, в ту ли папку ты его копируешь. В терминале используй меню Файл - Открыть каталог данных. Далее зайди в MQL4\Files и проверь наличие файла там…» В папке история терминала файл EURUSD313.hst присутствует и в папке MQL4\Files файл EURUSD.tks присутствует. Сейчас набираю историю TicksCollector 313 и посмотрю, что получится с FXTFileMaker, но об этом ниже. Что получается – 1. Советник в реале стоит на графике – в процессе оптимизации происходит остановка и появляется сообщение – невозможно выделить N….. буферов (или памяти – машинный перевод). Здесь все понятно – уменьшаем количество баров в окне, уменьшаем количество используемых индикаторов, уменьшаем количество проходов оптимизации и определяемся сколько дней возможна оптимизация без переустановки советника. 2. Советник в реале, но запускаем на 1 минуте тестирование в тестере на нестандартном ТФ (без использования FXTFileMaker) в советнике ТФ = 313 и в индикаторах ТФ – 313. Советник (как я понял) видит ТФ = 313 и запускается оптимизация. Что интересно – оптимизация проходит без остановки – нет переполнения по памяти. НО просто «прогон» - очень – очень медленно, оптимизация тем более, если добавить количество используемых индикаторов, то можно ждать до бесконечности. Можно предположить, что независимо от установленных дат в тестере, в связи с объявлением переменных с пустым значением – [] советник проходит ВСЮ историю терминала хотя результат выводит согласно установленных дат (видимо), а то и меньше. 3. Советник тестируется в терминале для тестера – заменяем ТФ1 мин на график нестандартного ТФ – тестирование проходит очень быстро количество сделок существенно больше (сравнение простым «прогоном» на тех же датах). Что получается, что реклама Метаквостов о том, что в МТ5 тестер лучше – это ни о чем, т.к. из результатов тестера не следует та же возможность в реале (согласен - нет смысла переходить на МТ5 – ничего не даст в данной проблеме). А теперь главное – что может дать FXTFileMaker? В тестере только 7 ТФ и возможность дополнительных похоже не предусмотрена или предусмотрена? «…А вот файл, создаваемый скриптом FXTFileMaker (расширение fxt), попадает в папку tester\history…» Если FXTFileMaker «заменяет» один из 7, то на нестандартный ТФ – «заменяет»? Я конечно буду пробовать FXTFileMaker. «…Что имеется в виду под "будет ли аналогично постоянно пополнять созданный файл". Кто будет пополнять? …» Да это, похоже, самое интересное – может ли в реале FXTFileMaker постоянно пополнять файл – в папке tester/history (расширение fxt, т.е. у FXTFileMaker нет границы даты в будущем)?

Scriptong: Balbesik пишет: При попытке установить FXTFileMaker_Script_AD изменилась высота бара (выделенный участок) – каким-то образом FXTFileMaker_Script_AD повлиял на TicksCollector Такого быть не должно. Это очень странный момент. Balbesik пишет: Пока не забыл – в реале «проскочило» деление на «0» в MI_Trade (185,65 - кажется) (я к ней вообще не прикасался), изменил – Да, посмотрел код. Проверку g_lotsStep на ноль при получении значений я не сделал. Отсюда и проблема. С другой стороны, эксперт и не должен продолжать работу, когда терминал выдает откровенно неправильное значение шага лота. Это относится к фатальным ошибкам. К примеру, когда величина пункта равна нулю, многие из моих программ попросту не запускаются, выдавая ошибку. Balbesik пишет: НО просто «прогон» - очень – очень медленно, оптимизация тем более, если добавить количество используемых индикаторов, то можно ждать до бесконечности. Тут даже не в количестве индикаторов дело. Достаточно указать диапазон оптимизации (я имею в виду оптимизацию не тестера стратегий, а именно ту, которая реализована в коде советника) параметров для одного индикатора достаточно большим. В итоге один этот индикатор будет загружен указанное количество раз, что требует большого расхода памяти и ресурсов. Отсюда и черепашьи темпы оптимизации. Как я и говорил ранее, для таких целей оптимальнее было бы оформить коды индикаторов в виде функций советника. Это резко сократит расход памяти и увеличит скорость обработки (как минимум, на порядок). Balbesik пишет: В тестере только 7 ТФ и возможность дополнительных похоже не предусмотрена или предусмотрена? Не предусмотрена. Balbesik пишет: Если FXTFileMaker «заменяет» один из 7, то на нестандартный ТФ – «заменяет»? Конкретно обговариваемый FXTFileMaker не сможет заменить, т. к. тут действует жесткая привязка к тем таймфреймам, которые перечислены в тестере. Ну а в принципе (теоретически; возможно, есть подводные камни) можно написать такой FXTFileMaker, который под видом стандартного ТФ будет проталкивать в тестер нужный нестандартный таймфрейм. Balbesik пишет: Да это, похоже, самое интересное – может ли в реале FXTFileMaker постоянно пополнять файл – в папке tester/history (расширение fxt, т.е. у FXTFileMaker нет границы даты в будущем)? Здесь, опять же, теоретически, такое тоже возможно, но при условии написания специального скрипта. Существующий скрипт такое не может.

Balbesik: С этим я разобрался. Это вопрос подхода. Мой вопрос снимается.

Scriptong: Balbesik пишет: С этим я разобрался. Это вопрос подхода. Мой вопрос снимается. ОК. Ну а я ответил чуть раньше. Смотри ответ выше твоего последнего поста.

Balbesik: Добрый день, Игорь! А мое сообщение на минуту раньше. Советник при «зеро» и остановился. По теме - пока смотрится чуть другой вопрос. «…Здесь, опять же, теоретически, такое тоже возможно, но при условии написания специального скрипта. Существующий скрипт такое не может…» Специальный скрипт – это целая тема для нестандартных ТФ аналогична – http://articles.mql4.com/ru/336 http://www.mql5.com/ru/code/7614 это один автор. Что получается – 1. Советник в тестере «видит» график нестандартного ТФ в истории терминала. 2. Советник в тестере при «прогоне (тестировании)» «видит» ТЕКУЩЕЕ время. 3. По окончании оптимизации «освобождается» память (видимо «выгружается»). 4. НО советник в тестере «не видит» ДАТ – невозможно задать дату начала тестирования или тестирование на заданный интервал времени (баров) – т.к. невозможно задать дату начала тестирования. Тестирование проходит по всей существующей истории терминала. Ограничение по Мах баров истории ничего не дает - идет накопление и не всегда это удобно для построении на графике. Если «не замещать» штатные ТФ специальным скриптом, а в реале вероятно возникнет проблема «смешивания котировок различных ТФ», можно ли, каким – либо образом (желательно программно), выйти (определять) на даты нестандартного ТФ и особенно в реале при работе в штатном тестере ("прогон" и оптимизация советником)?

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

Balbesik: Здравствуй, Игорь! «Наковырквлся» - « мама не Горюй». «Не могу согласиться» - да правильно все, на старом билде не «сохранялись» даты. На 735 пошло совпадение на тесте (по датам). «…. Если опишешь, то попробую воспроизвести и разобраться в вопросе…» Да все тоже самое. Да банально все – вопрос память – В тестере дата – прогон по истории – история не нужна – нужна Дата, да и получишь прн старте всю историю. Другими словами при выгрузки советника, при старте ты получишь ту же историю плюс день – Да не нужна мне предыдущия история. Нужен один день. Задача - разгрузить память! Все, плюс твои индикаторы, - на покой!



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