Помогите подправить советник

 
Уважаемые товарищи программисты!!! Помогите доработать советник. Советник открывает лонг при открытии бара ниже SMA и закрытии выше SMA, и открывает шорт при открытии бара выше SMA и закрытии ниже SMA. Позиции закрываются при обратном пересечении. При закрытии позиции открывается противоположная. В принципе он так и делает, но некоторые сигналы на закрытие пропускаются, в итоге поза закрывается в минусе, хотя если смотреть по чарту такого не должно было случиться. Такое пороисходит потому,что в некоторых случаях как такового пересечения SMA баром не происходит. Например для открытого лонга- цена закрытия одного бара выше SMA, а цена открытия следующего уже ниже SMA. Т.е. фактически сигнал на закрытие есть, но советник его не видит, так как такой сигнал не отражен в коде. Аналогичное справедливо и для шорта. Советник отрабатыват нормально все сигналы, когда имеется фактическое пересечение скользящей средней баром. Если же один бар закрывается ниже, а следующий уже открывается выше- такой сигнал  на закрытие пропускается. Помогите пожалуйста доработать код, т.е. сделать так, чтобы отрабатывались все сигналы.
Файлы:
 
angor писал (а) >>
 Уважаемые товарищи программисты!!! Помогите доработать советник. Советник открывает лонг при открытии бара ниже SMA и закрытии выше SMA, и открывает шорт при открытии бара выше SMA и закрытии ниже SMA. Позиции закрываются при обратном пересечении. При закрытии позиции открывается противоположная. В принципе он так и делает, но некоторые сигналы на закрытие пропускаются, в итоге поза закрывается в минусе, хотя если смотреть по чарту такого не должно было случиться. Такое пороисходит потому,что в некоторых случаях как такового пересечения SMA баром не происходит. Например для открытого лонга- цена закрытия одного бара выше SMA, а цена открытия следующего уже ниже SMA. Т.е. фактически сигнал на закрытие есть, но советник его не видит, так как такой сигнал не отражен в коде. Аналогичное справедливо и для шорта. Советник отрабатыват нормально все сигналы, когда имеется фактическое пересечение скользящей средней баром. Если же один бар закрывается ниже, а следующий уже открывается выше- такой сигнал  на закрытие пропускается. Помогите пожалуйста доработать код, т.е. сделать так, чтобы отрабатывались все сигналы.

Уважаемый, зачем Вы создаете столько тем по одной проблеме???

 

Вот эти строчки:

if(Open[1]>ma && Close[1]<ma)

Здесь не надо использовать условие Open[1]>ma, так как именно оно не совпадает  с тем, что Вы хотите. Уберите его в блоке открытия позиций и в блоке закрытия.


 
Kharin писал (а) >>

Уважаемый, зачем Вы создаете столько тем по одной проблеме???

Затем Уважаемый, чтобы хоть как-то обратить на себя внимание товарищей вроде Вас

 
Kharin писал (а) >>

Вот эти строчки:

if(Open[1]>ma && Close[1]<ma)

Здесь не надо использовать условие Open[1]>ma, так как именно оно не совпадает  с тем, что Вы хотите. Уберите его в блоке открытия позиций и в блоке закрытия.


Премного бладодарен!!! Протестировал и наконец-то получил то, что нужно. Больше пока надоедать не буду.

 

Здравствуйте! Ребят помогите пожалуйста!

Я в программировании чайник, но знаю что там буквально не чё делать.

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

За ране благодарен.

extern string com_0 = "Тейк профит, стоп лосс, трейлинг";
extern int тейк_профит = 30;
extern int стоп_лосс = 50;
extern string com1 = "Лот, технические переменные, отключаемые модули";
extern double лот = 0.1;
extern int проскальзывание = 3;
extern bool торговля_по_цене_открытия = false;
extern bool использовать_стопы = true;

datetime prev_time;


int start()
{
if(торговля_по_цене_открытия==true&&prev_time==Time[0]) return(0); prev_time=Time[0];
if(OrdersTotal()==0)Открытие_позиций();
return(0);
}

void Открытие_позиций()
{
if(использовать_стопы==true)
{
OrderSend(Symbol(),OP_BUY,лот,Ask,проскальзывание,Ask-стоп_лосс*Point,Ask+тейк_профит*Point);
OrderSend(Symbol(),OP_SELL,лот,Bid,проскальзывание,Bid+стоп_лосс*Point,Bid-тейк_профит*Point);
}
else
{
OrderSend(Symbol(),OP_BUY,лот,Ask,проскальзывание,0,0);
OrderSend(Symbol(),OP_SELL,лот,Bid,проскальзывание,0,0);
}
}

Файлы:
 
vvvvova писал(а) >>

Здравствуйте! Ребят помогите пожалуйста!

Я в программировании чайник, но знаю что там буквально не чё делать.

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

За ране благодарен.

extern string com_0 = "Тейк профит, стоп лосс, трейлинг";
extern int тейк_профит = 30;
extern int стоп_лосс = 50;
extern string com1 = "Лот, технические переменные, отключаемые модули";
extern double лот = 0.1;
extern int проскальзывание = 3;
extern bool торговля_по_цене_открытия = false;
extern bool использовать_стопы = true;

datetime prev_time;


int start()
{
if(торговля_по_цене_открытия==true&&prev_time==Time[0]) return(0); prev_time=Time[0];
if(OrdersTotal()==0)Открытие_позиций();
return(0);
}

void Открытие_позиций()
{
if(использовать_стопы==true)
{
OrderSend(Symbol(),OP_BUY,лот,Ask,проскальзывание,Ask-стоп_лосс*Point,Ask+тейк_профит*Point);
OrderSend(Symbol(),OP_SELL,лот,Bid,проскальзывание,Bid+стоп_лосс*Point,Bid-тейк_профит*Point);
}
else
{
OrderSend(Symbol(),OP_BUY,лот,Ask,проскальзывание,0,0);
OrderSend(Symbol(),OP_SELL,лот,Bid,проскальзывание,0,0);
}
}

или этот подправить...

Файлы: