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

Комплексный советник.

mitanq: Добрый день. Игорь а возможно ли прикрутить мартингейл к комплексному советнику?

Ответов - 30, стр: 1 2 All

mitanq777: Хм. Странно. Массив убираю. Делаю просто переменные: FastMA = iMA(NULL, 0, FastMAPeriod, FastMAShift, FastMAMethod, FastMAPrice, 1); FastMA1 = iMA(NULL, 0, FastMAPeriod, FastMAShift, FastMAMethod, FastMAPrice, 2); SlowMA = iMA(NULL, 0, SlowMAPeriod, SlowMAShift, SlowMAMethod, SlowMAPrice, 1); SlowMA1 = iMA(NULL, 0, SlowMAPeriod, SlowMAShift, SlowMAMethod, SlowMAPrice, 2); Ошибка SetindexBuffers. И его убираю. Все работает. Но на графике не рисуются линии.......

mitanq777: А. совсем забыл. Все хотел спросить. Дело в том что советник открывает позицию слишком поздно. После пересечения следующая свеча закрывается и еще на следующей после закрытия только открывается ордер. Я понимаю что на текущем баре цена может прыгать и соответственно пересечение. Но хотя бы на открытии следующей возможно открывать ордер? Условия открытия я не менял.

Scriptong: mitanq777 пишет: Дело в том что советник открывает позицию слишком поздно. После пересечения следующая свеча закрывается и еще на следующей после закрытия только открывается ордер. Я понимаю что на текущем баре цена может прыгать и соответственно пересечение. Но хотя бы на открытии следующей возможно открывать ордер? Проверил. Оригинальный CE_CrossMA выдает сигналы вовремя. Их также вовремя обрабатывает комплексный советник. Ни о какой задержке речь не идет: Поэтому, опять же, нужен измененный Вами код. Тогда помочь будет возможно.


mitanq777: Да. вижу. Может у меня как проскальзование иногда происходит. (Вроде в коде на открытие ордера видел 3-ка - проскальзование). Я вот всю голову "сломал" решил сделать тогда, чтобы открывал сразу после сигнала на текущем баре. Стратегия позволяет, даже профит увеличит. Ведь советник откроет ордер с magik - ом своим при сигнале и больше не откроет, даже если сигнал появится еще раз на текущей свече? Подскажите что в коде убрать? Time[0] ?

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

mitanq777: Scriptong пишет: Давайте конкретнее - о чем именно идет речь? Если речь о том, чтобы открываться на том баре, где пересечение только начинается, то это невозможно, т. к. является подглядыванием в будущее. Если же имеется в виду что-то другое, то, пожалуйста, опишите проблему подробнее. Добрый вечер Игорь! Ситуация такая. Цена изменяется каждый тик. И в течении одного бара она может подниматься и опускаться. Соответственно, если произошло пересечение в данный момент в текущем баре, возможно ли обработать этот тик? То есть записать сигнал и советник откроет позицию? Это уже произошло. Это не будущее, прошлое. Да, пересечение может тоже то быть то не быть в течении одного бара, но вот оно произошло первый раз на текущем баре. Все - это сигнал. А то что будет дальше происходить с ценой уже не важно........ Понимаете?

Scriptong: mitanq777 пишет: Ситуация такая. Цена изменяется каждый тик. И в течении одного бара она может подниматься и опускаться. Соответственно, если произошло пересечение в данный момент в текущем баре, возможно ли обработать этот тик? То есть записать сигнал и советник откроет позицию? Это уже произошло. Это не будущее, прошлое. Да, пересечение может тоже то быть то не быть в течении одного бара, но вот оно произошло первый раз на текущем баре. Все - это сигнал. А то что будет дальше происходить с ценой уже не важно........ Понимаете? Эту ситуацию я понимаю лучше всего. Попробую объяснить, почему лучше не использовать ее. На текущем баре получен сигнал пересечения от какого-либо индикатора (речь не только об МА). ОК, открываем сделку. На следующем тике цена возвращается в положение, где сигнала не было. Но сделку мы уже открыли. Далее происходит следующее - цена разворачивается, формируя противоположный сигнал. Что будем делать? Реагируем на него, закрывая открытую сделку и открывая противоположную? ОК. Но по законам Мерфи, цена вновь разворачивается и снова формирует противоположный сигнал. Думаю, дальше объяснять не нужно - на одном баре мы можем совершить с десяток сделок, ни одна из которых не даст прибыли. А вот истинное положение вещей будет сформировано только по закрытию бара. Это то положение, которые все мы видим в истории. Но в том то и дело, что раньше, чем закрытие бара, об этой истории судить нельзя. Только кажется, что открывая сделку на опережение событий, мы что-то выигрываем. На самом деле таких опережающих сигналов до момента формирования бара существует намного больше, чем тех сигналов, которые реально дадут какой-либо выигрыш. Просто на истории мы не видим всего этого многообразия. Лечится просто - понаблюдайте за развитием цены внутри бара в визуализаторе тестера стратегий МТ4.

mitanq777: Scriptong пишет: Эту ситуацию я понимаю лучше всего. Попробую объяснить, почему лучше не использовать ее. На текущем баре получен сигнал пересечения от какого-либо индикатора (речь не только об МА). ОК, открываем сделку. На следующем тике цена возвращается в положение, где сигнала не было. Но сделку мы уже открыли. Далее происходит следующее - цена разворачивается, формируя противоположный сигнал. Что будем делать? Реагируем на него, закрывая открытую сделку и открывая противоположную? ОК. Но по законам Мерфи, цена вновь разворачивается и снова формирует противоположный сигнал. Думаю, дальше объяснять не нужно - на одном баре мы можем совершить с десяток сделок, ни одна из которых не даст прибыли. А вот истинное положение вещей будет сформировано только по закрытию бара. Это то положение, которые все мы видим в истории. Но в том то и дело, что раньше, чем закрытие бара, об этой истории судить нельзя. Только кажется, что открывая сделку на опережение событий, мы что-то выигрываем. На самом деле таких опережающих сигналов до момента формирования бара существует намного больше, чем тех сигналов, которые реально дадут какой-либо выигрыш. Просто на истории мы не видим всего этого многообразия. Лечится просто - понаблюдайте за развитием цены внутри бара в визуализаторе тестера стратегий МТ4. Так и знал, что Вы так ответите. В тестере смотрел уже очень много раз. Стратегия позволяет. Так вот. Сигнал появляется (пересечение) и открываем ордер. И не важно, что потом цена может развернуться или будет еще раз пересечение на текущем баре. Советник открыл ордер со своим magik и второго ордера он уже не откроет.

Scriptong: mitanq777 пишет: Советник открыл ордер со своим magik и второго ордера он уже не откроет. А как насчет того, что затем в истории пересечения вполне может не быть? То есть на время цена дала сигнал, но потом его отменила. Таких случаев тоже немало. Особенно, когда средние находятся друг возле друга. В итоге от упреждения этого сигнала вреда будет больше, чем выигрыша.

mitanq777: Scriptong пишет: То есть на время цена дала сигнал, но потом его отменила. У меня другие индикаторы фильтруют скачки. Я долго тестировал в тестере. Подгонял параметры. Доделал советника для бинарных опционов. Даже "мартингейл" прикрутил ))) А вот с открытием ордера на новом баре не могу разобраться. То есть на тике открывать (на пересечении например) Подскажите пожалуйста что надо убрать? Пробовал закомментировать вот эти строки: // - 3 - ======================= Выдача сигналов ======================================== -------->>>>>> // if (LastBar != Time[0]) // Один раз за один бар -------->>>>>> // { if (FastMA[1] > SlowMA[1]) GlobalVariableSet(Signal, 1); else if (FastMA[1] < SlowMA[1]) GlobalVariableSet(Signal, -1); // Sell else GlobalVariableSet(Signal, 0); // Нет сигнала GlobalVariableSet(STime, Time[0]); // Время последнего обновления -------->>>>>> // LastBar = Time[0]; -------->>>>>> // } // - 3 - ============================ Окончание блока =================================== Не помогло. Может что в советнике еще надо править?

Scriptong: mitanq777 пишет: Подскажите пожалуйста что надо убрать? Для проведения многих изменений недостаточно что-то добавить или убрать. Так и в этом случае нужно полностью изменить логику советника и индикаторов. Не на один час работы, если делать хорошо. Для "абы как", может быть, можно и за полчаса управиться.

mitanq777: Scriptong пишет: Для проведения многих изменений недостаточно что-то добавить или убрать. Так и в этом случае нужно полностью изменить логику советника и индикаторов. Не на один час работы, если делать хорошо. Для "абы как", может быть, можно и за полчаса управиться. Ясно. Будет повод изучать mql4. Придется Сделать отдельного советника на эти три индикатора, если уж совсем туго будет. В любом случае спасибо за ответы.

Scriptong: mitanq777 пишет: Придется Сделать отдельного советника на эти три индикатора, если уж совсем туго будет. Если есть конкретная стратегия, то, действительно, лучше сделать специальный советник. Комплексный советник - это больше конструктор для исследований. К тому же у него очень много ограничений. Будут проблемы с реализацией, спрашивайте.

mitanq777: Есть такая функция OnTick () но она используется только в советнике. А дело в индикаторе!? Подскажите?

Scriptong: mitanq777 пишет: Есть такая функция OnTick () но она используется только в советнике. А дело в индикаторе!? Подскажите? Функция OnTick - это обработчик события поступления нового тика в обновленном MQL4, аналог функции start, используемой в "старом" MQL4. Сейчас в советниках вместо start лучше использовать OnTick по той простой причине, что этот подход яснее - код советника невозможно перепутать с кодом индикатора, как раньше. В индикаторах теперь вместо функции start используется обработчик событий OnCalculate. Это было лишь объяснение. Сам вопрос я пока не понял. Попробуйте сформулировать его по-другому.



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