КТО ПОДСКАЖЕТ ???

 

extern int distance=50;
int err = 0;
double Lot = 0.05;
double Ballance=0.0;
double per1,per2;
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;

int start()
{

if (OrdersTotal()==0&&err==0)
{
if (Ballance!=0.0)
{
if (Ballance>AccountBalance())
Lot=Lot*2;
else
Lot=0.1;

}
Ballance=AccountBalance();
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1);
// per1 = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);
// per2 = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,1);
int order;
if (MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(3*Point) && MaCurrent>MaPrevious)
order=OrderSend(Symbol(),OP_BUY,Lot,Ask,5*Point,Bid-distance*Point,Ask+100*Point);
else
if (MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(3*Point) && MaCurrent<MaPrevious)
order=OrderSend(Symbol(),OP_SELL,Lot,Bid,5*Point,Ask+distance*Point,Bid-100*Point);



if(order<0)
{
if (GetLastError()==134)
{
err=1;
Print("NOT ENOGUGHT MONEY!!");
}
return (-1);
}


}

return(0);
}

Непойму... вроде все правильно но

1 не открывает сделки на виртуальном счете.. хотя в тестере делает это на ура

2 если ставить так к примеру MacdCurrent<0 вместо MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(3*Point) && MaCurrent>MaPrevious тогда мартин работает... почемуто не переваривает && баг или я чтото не правильно собрал.

 

1 >не открывает сделки на виртуальном счете.. хотя в тестере делает это на ура

ответ - Lot = 0.05; на демо скорей всего минимум 0,1

а вообще нужно смотреть логи, там все написано


2 условие лучше писать так

if(MacdCurrent<0){
    if(MacdCurrent>SignalCurrent){
       if(MacdPrevious<SignalPrevious){
          if(MathAbs(MacdCurrent)>(3*Point)){
             if{MaCurrent>MaPrevious}{

}}}}}

и вам понятней будет и вероятность ошибки меньше

 

&& MaCurrent>MaPrevious не нужны только сделок будет мньше MACD и сам МА

MathAbs(MacdCurrent)>(3*Point) это как минимум для часовика.

А вообщу проверь условие установки ордера SL=Ask - New_Stop(StopLoss)*Point; для Buy
TP=Ask + New_Stop(TakeProfit)*Point;

и для Sel соответственно .Обычно при ошибках там тестер ставит, а реал нет.

 
xeon >>:

..2 условие лучше писать так

и вам понятней будет и вероятность ошибки меньше

А если так написать, разница будет?

if(   MacdCurrent<0
   && MacdCurrent>SignalCurrent
   && MacdPrevious<SignalPrevious
   && MathAbs(MacdCurrent)>(3*Point)
   && MaCurrent>MaPrevious
  )
  {....} 
 
granit77 >>:

А если так написать, разница будет?

В таком виде следующие условия будут проверяться независимо от результата проверки предыдущих.

 
goldtrader >>:

В таком виде следующие условия будут проверяться независимо от результата проверки предыдущих.

Вот с этого места для танкистов поподробнее, поскольку этот вариант пользую постоянно. Это приведет только к увеличению времени проверки, или возможны отличия в работе от конструкции xeon'а?

 
granit77 >>:

Вот с этого места для танкистов поподробнее, поскольку этот вариант пользую постоянно. Это приведет только к увеличению времени проверки, или возможны отличия в работе от конструкции xeon'а?


Танкистам от стройбатовцев )))

Сам понимаешь, я не профи, поэтому пусть лучше кто-то более опытный прокомментирует, но ИМХО:

1. Время проверки естественно в общем случае увеличиться. Понятно почему.

2. При применении конструкции твоего варианта у меня как-то случались принципиальные неправильные её срабатывания по отношению к тому что ожидал в силу незнания данных особенностей. Пример привести уже не могу - забыл. Вспомню - отпишу.

Наверняка могу сказать одно: конструкция xeon (для mql4) предпочтительнее.

 
goldtrader >>:

2. При применении конструкции твоего варианта у меня как-то случались принципиальные неправильные её срабатывания по отношению к тому что ожидал в силу незнания данных особенностей. Пример привести уже не могу - забыл. Вспомню - отпишу.

Вот и мне иногда что-то чудится, отловить не могу.

 
granit77 писал(а) >>

Вот и мне иногда что-то чудится, отловить не могу.

Виктор, нашёл!

Тута )))

 
goldtrader >>:

Виктор, нашёл!

Тута )))

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

 
granit77 писал(а) >>

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

Думаю что если условия простые (т.е. при их проверке не производятся расчёты, которые могут в дальнейшем на что-то повлиять), то можно юзать и твою конструкцию.

Подольше выполняться будет, но если обращения к ней нечасты, то не беда. Но лучше всё же раздельно. Бережёного ...

.

Недавно тут наступил на грабли с параллельным использованием глобальных переменных тестером и терминалом.

С трудом причину локализовал. Описано здесь. Но нам, чайникам, к подобному не привыкать )))

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