Отправлено: 04.02.15 21:32. Заголовок: Вопросик по советнику
Добрый день Игорь.
Я Вам посылал вопрос на почту: Почему при присоединении советника к графику он сразу открывает ордер. Хотя условия прошли, а новые еще не появились?
Индикаторы:
CrossMA, Parabolic, OsMA
Вы ответили:
"Добрый день.
Вы устанавливаете набор трендовых индикаторов, которые дают сигнал постоянно, у них нет таких моментов, когда сигнала вообще нет.
Так: 1. МА дает сигнал покупки всегда, пока быстрая средняя выше медленной, сигнал продажи - быстрая ниже медленной. 2. Parabolic дает сигнал покупки, пока цена закрытия выше точки, и сигнал продажи, пока цена ниже точки. 3. OsMA дает сигнал покупки, пока линия выше нуля, и сигнал продажи, пока линия ниже нуля.
Очевидно, что совпадение сигналов будет достаточно часто. В итоге практически всегда, когда включается советник, а на счете нет рыночного ордера, открытого им, он будет открывать сделку. После открытия сделки советник просто ждет ее закрытия (по ТР, SL или вручную). Как только это произойдет и сформируется новый сигнал (скорее всего, на той же или на следующей свече) вновь будет открыта сделка.
Чтобы сигналы не совпадали так часто, используйте в наборе хотя бы один нетрендовый индикатор (к примеру RSI)."
Дело в том, что я ставлю не просто MA индикатор, а crossMA - там сигнал на пересечение.
Дело в том, что я ставлю не просто MA индикатор, а crossMA - там сигнал на пересечение.
Посмотрел еще раз код CE_CrossMA. Все то же - индикатор держит сигнал Buy, пока быстрая выше медленной, и сигнал Sell, пока быстрая ниже медленной. Поэтому советник будет открывать ордер практически всегда (когда совпадает направление по другим трендовым индикаторам), если "своего" ордера нет.
Отправлено: 05.02.15 22:53. Заголовок: Любая из стратегий М..
Любая из стратегий Мартингейла - это не такая уж и простая программа, парой-тройкой строк не отделаешься. Если приведенные Вами изменения в коде комплексного советника - это все изменения, то, конечно же, работать не будет. Так, при открытии ордера Вы сохраняете тикет в переменную ticket, которая не является глобальной переменной - она локальная. Но даже если бы она и была глобальная, то где гарантия, что между открытием одного ордера и открытием следующего эксперт не был хотя бы переинициализирован, что приведет к очистке данных в переменной ticket?
Чтобы открыть ордер, опираясь на данные о закрытии предыдущего ордера, необходимо: 1. Придумать логическую связку между ордерами одной серии (когда последующий ордер должен продолжать увеличение или уменьшение лота на основании предыдущего). К примеру, делается это через MagicNumber, в который записывается номер колена Мартингейла. Так, если ордер продолжает серию, то в его MagicNumber записывается номер колена на 1 больший, чем номер колена у предыдущего ордера. Иначе номер колена сбрасывается в 0 (или 1, смотря какая логика принята). 2. Перед очередным открытием ордера просматривается история счета на предмет поиска последнего закрытого ордера эксперта. 3. Когда такой ордер найден (определен его тикет), то можно воспользоваться и тем кодом, который Вы привели. Только N в этом коде будет не подсчитываться, а браться непосредственно из MagicNumber последнего закрытого ордера.
Scriptong пишет: [quote]` Спасибо. буду что то думать.
А комплексный советник все равно. Время приходит, когда разрешено торговать и он сразу открывает ордер хотя условия прошли . Может как то открыт первый сигнал? Комплексный v2.
Варианта три: 1. На момент запуска советника должен существовать его рыночный ордер, соответствующий сигналу. 2. Необходимо использовать один из индикаторов, которые дают "точечный" сигнал. Например, RSI. 3. Переделать код CE_CrossMA так, чтобы индикатор выдавал сигнал только в момент пересечения средних, а не все время.
Варианта три: 1. На момент запуска советника должен существовать его рыночный ордер, соответствующий сигналу. 2. Необходимо использовать один из индикаторов, которые дают "точечный" сигнал. Например, RSI. 3. Переделать код CE_CrossMA так, чтобы индикатор выдавал сигнал только в момент пересечения средних, а не все время.
В коде видно :
// - 3 - ======================= Выдача сигналов ======================================== if (LastBar != Time[0]) // Один раз за один бар
А можно как то записать сигнал на последнем баре? При загрузке советника сигнал устарел, почему он хранится в глобальной переменной? Как то записывать время срабатывания сигнала и бара и предоставлять советнику или как то обнулять.
Как думаете?
1. Вариант не подходит, он и так открывает его сразу. 2. Использовать индикатор, тогда стратегия не будет работать. Нет такого индикатора, чтобы показывал тот же вход. Он будет или позже или раньше. 3. Да. Можно или добавить в условие FastMA > = LowMA. Либо добавить третью MA? например SrMA (средняя). Поможет фильтрануть. Хм.
При загрузке советника сигнал устарел, почему он хранится в глобальной переменной?
Глобальная переменная хранит свое значение, если ее не удалять. В каждом из индикаторов типа CE при окончании его работы производится удаление глобальных переменных. Так что в них всегда находятся актуальные значения.
Вот сделал. Но что то не открывает. Что то не хватает )
Вы сравниваете значения одних и тех же элементов массивов, а нужно - разных. Т. е.:
цитата:
if (FastMA[1] > SlowMA[1] && FastMA[2] < SlowMA[2]) GlobalVariableSet(Signal, 1); else if (FastMA[1] < SlowMA[1] && FastMA[2] > SlowMA[2]) GlobalVariableSet(Signal, -1); // Sell else GlobalVariableSet(Signal, 0); // Нет сигнала
Сначала сверяете значения на первом баре, а потом - на втором. В посте ниже Вы именно так и делаете, но зачем-то массивы убрали. Ну и четыре массива, конечно же, это перебор
P. S. Литера i в квадратных скобках воспринимается движком форума как BB-код курсив. Чтобы обойти это ограничение, ставьте пробелы вокруг литеры i. Вот так: [ i ].
Сначала сверяете значения на первом баре, а потом - на втором. В посте ниже Вы именно так и делаете, но зачем-то массивы убрали. Ну и четыре массива, конечно же, это перебор
P. S. Литера i в квадратных скобках воспринимается движком форума как BB-код курсив. Чтобы обойти это ограничение, ставьте пробелы вокруг литеры i. Вот так: [ i ].
спасибо. заработал. но появилась другая проблема. открывает через 3-4 пересечения. открывает 3 раза на пересечении потом пропускает 3-4 пересечения и только потом открывает. подскажите пожалуйста.
спасибо. заработал. но появилась другая проблема. открывает через 3-4 пересечения. открывает 3 раза на пересечении потом пропускает 3-4 пересечения и только потом открывает. подскажите пожалуйста.
С телепатией у меня пока туго. Приведите коды измененного индикатора и советника (если изменяли его). Файлы лучше закачать на какой-нибудь файловый сервер (например, dropmefiles.com), чтобы не выбрасывать на форум простыню исходного кода.
Отправлено: 11.02.15 07:17. Заголовок: Scriptong пишет: С ..
Scriptong пишет:
цитата:
С телепатией у меня пока туго. Приведите коды измененного индикатора и советника (если изменяли его). Файлы лучше закачать на какой-нибудь файловый сервер (например, dropmefiles.com), чтобы не выбрасывать на форум простыню исходного кода.
Добрый день Игорь. Спасибо за советы. Разобрался. Я поставил торговлю с 7 до 21. А в тестере забыл про это. Поэтому он не все пересечения открывал. )))
Кстати, тех двух строчек хватило, чтобы работал мартин. Сам в шоке. Открывает на ура удвоенную позицию.
Все даты в формате GMT
2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет