Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Почему же у меня при пересечении не открывает? Открывает когда захочет и закрывает тоже)))
Мне тоже было интересно почему, а потом начал разбираться в коде.
Вот условие на сигнал BUY
if ((MAFast1<MASlow1)&&
(MAFast2==MASlow2)&&
(MAFast3>MASlow3))
{
BuyOp=true;
}
Сравниваются 3 быстрых МА со сдвигами от 0 до 2 с 3-мя медленными МА со сдвигами от 0 до 2.
Получается не 2 а 6 МА.
Извините я совсем новичёк
Переписал вот так
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
if (MAFast2>MASlow2)
{
BuyOp=true;
}
if (MAFast2<MASlow2)
{
SellOp=true;
}
Теперь нормально открывает при пересечении и закрывает по трейлингу
Но потом после закрытия опять открывает в том же направлении( ведь условие что одно значение больше другого выполняется)
Как сделать чтобы после первого закрытия Следующий ордер открывался только когда МА пересекуться в другом направлении???
В своем предыдущем посте "Получается не 2 а 6 МА" я ступил.
В коде все правильно, сравниваются 2 МА на разных барах.
0 - текущий бар
1- бар назад
2- два бара назад.
Сделка BUY открывается, когда выполнятся три условия:
1) 2 бара назад быстрая МА меньше медленной МА
2) 1 бар назад быстрая МА = медленной МА
3) в данный момент быстрая МА больше медленной МА
В своих советниках я не люблю использовать "0" - нулевой бар, так как индикаторы имеют свойства перерисовываться.
Можно попробовать вот так:
double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,3),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,3),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
В своем предыдущем посте "Получается не 2 а 6 МА" я ступил.
В коде все правильно, сравниваются 2 МА на разных барах.
0 - текущий бар
1- бар назад
2- два бара назад.
Сделка BUY открывается, когда выполнятся три условия:
1) 2 бара назад быстрая МА меньше медленной МА
2) 1 бар назад быстрая МА = медленной МА
3) в данный момент быстрая МА больше медленной МА
В своих советниках я не люблю использовать "0" - нулевой бар, так как индикаторы имеют свойства перерисовываться.
Можно попробовать вот так:
double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,3),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,3),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
ты попробывал сам с такими настройками?????
EURUSD c 14 по 18 февраля 2011 slow=23, fast=2
Вариант автора
Вариант со смещением на 1 бар назад
А зачем в коде такой кусок?
if(!IsTradeAllowed())
{
prevtime = Time[1];
return(0);
}
Ведь это меняет поведение между оптимизированным советником и в реале.
Учитывая
данный кусок заставляет работать советника один раз за бар, а не на каждый тик.
проверка на демо не работает, ретурн закоментирован, невычищенный остаток от предыдущих советников (просто есть готовая рыба, практически на все случаи жизни)
Извините я совсем новичёк
Переписал вот так
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
if (MAFast2>MASlow2)
{
BuyOp=true;
}
if (MAFast2<MASlow2)
{
SellOp=true;
}
Теперь нормально открывает при пересечении и закрывает по трейлингу
Но потом после закрытия опять открывает в том же направлении( ведь условие что одно значение больше другого выполняется)
Как сделать чтобы после первого закрытия Следующий ордер открывался только когда МА пересекуться в другом направлении???
в данном случае никак, так как Вы напрочь выкинули ловлю пересечения, Вы определяете только что выше и на основании этого входите в рынок
Мало сделок. Я поставил МА75 и МА100 на таймфрейме "M1" - всего четыре сделки за полгода (а не 6-7 за день, как должно быть по графику).
Помимо этого, во время нескольких тестов весь депозит оказывался слитым из-за одной-единственной сделки (бажный механизм процентов, что ли?)
2 бага, в общем. А идея хороша.
И ещё надо добавить стоп-лосс (но не тейк-профит!). Тогда всё будет просто замечательно. Btw, request for an edited version!