Советники: Пересечение 2-х машек - страница 4

 
Fom:
Почему же у меня при пересечении не открывает? Открывает когда захочет и закрывает тоже)))


Мне тоже было интересно почему, а потом начал разбираться в коде.

Вот условие на сигнал 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);

 
udhit:

В своем предыдущем посте "Получается не 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 бар назад

 
alexds:

А зачем в коде такой кусок?

if(!IsTradeAllowed())
{
prevtime = Time[1];

return(0);

}

Ведь это меняет поведение между оптимизированным советником и в реале.

Учитывая

   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   




данный кусок заставляет работать советника один раз за бар, а не на каждый тик.

проверка на демо не работает, ретурн закоментирован, невычищенный остаток от предыдущих советников (просто есть готовая рыба, практически на все случаи жизни)

 
Fom:

Извините я совсем новичёк

Переписал вот так

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!

Причина обращения: