Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть VIII): События модификации ордеров и позиций"
Добрый вечер Артем. Век живи - век учись! И я учусь, используя в качестве методического материала Ваши наработки. спасибо за ваш немалый труд и опыт.
Конечно не обходится без непоняток, а если еще точнее - то чем больше узнаю, тем больше непонятно.
В приложенном файле попытка модифицировать Ваш советник TestDoEasyPart08, добавив в него пользовательский индикатор, тоже Ваш iCrossAD.
Использовал функцию iCustom(asymbol.Name(), _Period, "iCrossAD");
CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD"); if (CrossAD == INVALID_HANDLE) { Print("Не удалось создать описатель индикатора iCrossAD!"); return(INIT_FAILED); }
Потом попытался скопировать данные из индикатора в буферы советника и проверить насколько мне это удалось
void OnTick() { //+------------------------------------------------------------------+////////////////////////////// int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy; ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true); if (CopyBuffer(CrossAD, 3, 0, buf_size, Buf_Arrow_Sell) != buf_size || ArraySize(Buf_Arrow_Sell) != buf_size) { Print("Не удалось правильно скопировать данные из iCrossAD"); return; } else Last_Arrow_Sell = Buf_Arrow_Sell[0]; if (CopyBuffer(CrossAD, 2, 0, buf_size, Buf_Arrow_Buy) != buf_size || ArraySize(Buf_Arrow_Buy) != buf_size) { Print("Не удалось правильно скопировать данные из iCrossAD"); return; } else Last_Arrow_Buy = Buf_Arrow_Buy[0]; //+------------------------------------------------------------------+ Comment("Выводим данные фракталов", "\n Last_Arrow_Buy = ",Last_Arrow_Buy, "\n ---------------------- ", "\n Last_Arrow_Sell = ",Last_Arrow_Sell ); //+------------------------------------------------------------------+ //+------------------------------------------------------------------+//////////////////////////////
Весь этот наворот работать не хочет, подскажите плиз где я делаю неправильно и как делать нужно на самом деле ???
Добрый вечер Артем. Век живи - век учись! И я учусь, используя в качестве методического материала Ваши наработки. спасибо за ваш немалый труд и опыт.
Конечно не обходится без непоняток, а если еще точнее - то чем больше узнаю, тем больше непонятно.
В приложенном файле попытка модифицировать Ваш советник TestDoEasyPart08, добавив в него пользовательский индикатор, тоже Ваш iCrossAD.
Использовал функцию iCustom(asymbol.Name(), _Period, "iCrossAD");
Потом попытался скопировать данные из индикатора в буферы советника и проверить насколько мне это удалось
Весь этот наворот работать не хочет, подскажите плиз где я делаю неправильно и как делать нужно на самом деле ???
"Работать не хочет" - что именно не работает?
Вот это я бы делал на глобальном уровне:
int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy;
Вот это в OnInit():
ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true);
И проверьте - а бывают ли вообще у индикатора когда-либо значения в буферах на нулевом баре - вы же проверяете их только на нулевом баре. Я не помню что он там выдаёт, и на каком баре.
- "что именно не работает?..." - На данном этапе я пытаюсь увидеть в Коментах значения последних стрелок Вверх и Вниз из индикатора. Если я этого добьюсь, то смогу их сравнить по времени, а значит буду знать какой именно из них был последним, а значит "текущим". Это можно будет считать сигналом при смене значения или фильтром для других сигналов (можно/нельзя). Но вот беда, я не могу получить в Комменты эти значения и даже более того - я и Комменты сами не вижу, текст то должен быть виден?
- "Вот это я бы делал на глобальном уровне: ..." - Перенёс, попытался осознать почему так, вроде дошло, спасибо за науку!!!
- "Вот это в OnInit(): ..." - Перенёс, большое спасибо, запомню.
- "И проверьте - а бывают ли вообще у индикатора когда-либо значения в буферах на нулевом баре - ..." - попробую организовать Коммент внутри индикатора и запущу индикатор чтобы видеть глазами само значение, а как они тогда будут отображаться на одном графике? Активировать индикатор на отдельном графике?
- "вы же проверяете их только на нулевом баре ..." - Да, я понял, обращаясь к массиву с этими стрелками, я наверное буду получать почти всегда пустое значение и только редко, когда рисуется стрелка, значение будет не пустым. Значит нужно организовать или переключатель последнего сигнала на стороне индикатора, или запустить цикл, выписать последние значения до первого не пустого здесь, в советнике? То есть, точно такой же переключатель, как на стороне индикатора???
Пожалуйста помогите с Комментом, не могу понять почему он не отображается!!!
- "что именно не работает?..." - На данном этапе я пытаюсь увидеть в Коментах значения последних стрелок Вверх и Вниз из индикатора. Если я этого добьюсь, то смогу их сравнить по времени, а значит буду знать какой именно из них был последним, а значит "текущим". Это можно будет считать сигналом при смене значения или фильтром для других сигналов (можно/нельзя). Но вот беда, я не могу получить в Комменты эти значения и даже более того - я и Комменты сами не вижу, текст то должен быть виден?
- "Вот это я бы делал на глобальном уровне:" - Перенёс, попытался осознать почему так, вроде дошло, спасибо за науку!!!
- "Вот это в OnInit():" - Перенёс, большое спасибо, запомню.
- "И проверьте - а бывают ли вообще у индикатора когда-либо значения в буферах на нулевом баре - ..." - попробую организовать Коммент внутри индикатора и запущу индикатор чтобы видеть глазами само значение, а как они тогда будут отображаться на одном графике? Активировать индикатор на отдельном графике?
- "вы же проверяете их только на нулевом баре ..." - Да, я понял, обращаясь к массиву с этими стрелками, я наверное буду получать почти всегда пустое значение и только редко, когда рисуется стрелка, значение будет не пустым. Значит нужно организовать или переключатель последнего сигнала на стороне индикатора, или запустить цикл, выписать последние значения до первого не пустого? То есть точно такой же переключатель, как на стороне индикатора???
Пожалуйста помогите с Комментом, не могу понять почему он не отображается!!!
Что в журнале "Эксперты" пишется? Создаются ли хендлы индикаторов?
Что в журнале "Эксперты" пишется? Создаются ли хендлы индикаторов?
Добрый день. Да, хендл создается, равен 10.
Добился небольшого прогресса (очень небольшого!). Появились записи Comment
Есть записи Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Хендл iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Скопированны данные из 2-го буфера индикатора iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Скопированны данные из 3-го буфера индикатора iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Скопированны данные из 2-го буфера индикатора iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Скопированны данные из 3-го буфера индикатора iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
Два буфера в индикаторе, из которых копируются данные, содержат значения на которые установлены стрелки индикатора. Записываются они туда в момент установки стрелки. Соответственно делаю вывод что они должны быть заполнены double ценами, на момент формирования стрелки. А у меня почему-то выводиться космическая цифра, если я не ошибаюсь, это максимальное из возможных значений double в МТ5.
Правда пробовал и добивался я этого в тестере, котировок вчера и сегодня не было, сегодня воскресенье.
Если есть желание, помогите разобраться плиз. Советник и индикатор приложу к посту. Советник изменен, я писал об этом выше, индикатор тоже Ваш, в нем нет изменений.
Добрый день. Да, хендл создается, равен 10.
Добился небольшого прогресса (очень небольшого!). Появились записи Comment
Есть записи Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Хендл iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Скопированны данные из 2-го буфера индикатора iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Скопированны данные из 3-го буфера индикатора iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Скопированны данные из 2-го буфера индикатора iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Скопированны данные из 3-го буфера индикатора iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
Два буфера в индикаторе, из которых копируются данные, содержат значения на которые установлены стрелки индикатора. Записываются они туда в момент установки стрелки. Соответственно делаю вывод что они не должны быть заполнены double ценами. А у меня почему-то выводиться космическая цифра, если я не ошибаюсь, это максимальное из возможных значений double в МТ5.
Правда пробовал и добивался я этого в тестере, котировок вчера и сегодня небыло, сегодня воскресенье.
Если есть желание, помогите разобраться плиз. Советник и индикатор приложк к посту. Советник изменен, я писал об этом выше, индикатор тоже Ваш, в нем нет изменений.
Ну здесь-то обсуждаются вопросы по библиотеке, а не банальное незнание о пустых значениях индикаторных буферов. EMPTY_VALUE == DBL_MAX
Принял, услышал, спасибо. Про пустые значения кажется что-то знал, щас изучу вопрос.
Если здесь это не уместно, то можете ли вы порекомендовать какую-либо ветку, где я смогу получать ответы рт Вас или Ваших коллег на подобные ламерские вопросы?
Если такого места нет, то его наверное стоило бы создать.
Извините за беспокойство, но вроде оживленных бесед тут нету, мешать некому, а кто как не автор подскажет лучше всего.
К тому-же я и пытаюсь использовать Вашу библиотеку. Примитивно конечно, но уж как могу, извините.
Принял, услышал, спасибо. Про пустые значения кажется что-то знал, щас изучу вопрос.
Если здесь это не уместно, то можете ли вы порекомендовать какую-либо ветку, где я смогу получать ответы рт Вас или Ваших коллег на подобные ламерские вопросы?
Если такого места нет, то его наверное стоило бы создать.
Извините за беспокойство, но вроде оживленных бесед тут нету, мешать некому, а кто как не автор подскажет лучше всего.
К тому-же я и пытаюсь использовать Вашу библиотеку. Примитивно конечно, но уж как могу, извините.
По вопросам, не связанным с библиотекой, пишите пожалуйста сюда:
- 2016.11.09
- www.mql5.com
По вопросам, не связанным с библиотекой, пишите пожалуйста сюда:
Спасибо большое, ходил, посмотрел, почитал. То что нужно, буду использовать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть VIII): События модификации ордеров и позиций:
В предыдущих статьях мы начали создавать большую кроссплатформенную библиотеку, целью которой является упростить написания программ для платформы MetaTrader 5 и MetaTrader 4. В седьмой части мы добавили отслеживание событий срабатывания StopLimit-ордеров и подготовили функционал для отслеживания остальных событий, происходящих с ордерами и позициями. В данной статье сделаем класс для отслеживания событий модификации рыночных ордеров и позиций.
Скомпилируем советник.
Зададим в его параметрах значения StopLoss in points и TaleProfit in points равными нулю — чтобы открывать позиции и устанавливать отложенные ордера изначально без стоп-уровней, зададим в параметрах StopLoss for modification (points) и TakeProfit for modification (points) значения 20 и 60 соответственно (значения по умолчанию) — эти уровни StopLoss и TakeProfit будут устанавливаться по нажатию кнопок.
Запустим советник в тестере и выставим отложенные ордера. Затем нажмём поочерёдно кнопки установки StopLoss и TakeProfit — уровни будут выставлены и в журнал будут выведены об этом записи. Затем включим трейлинг и понаблюдаем за ордерами — они перемещаются за ценой, и в журнал об этих событиях выводятся записи. У позиций, появившихся в результате срабатывания ордеров, будут тралиться уровни StopLoss, и об этих событиях в журнале будут появляться записи.
Неттинг:
Хедж:
Автор: Artyom Trishkin