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'а?
Вот с этого места для танкистов поподробнее, поскольку этот вариант пользую постоянно. Это приведет только к увеличению времени проверки, или возможны отличия в работе от конструкции xeon'а?
Танкистам от стройбатовцев )))
Сам понимаешь, я не профи, поэтому пусть лучше кто-то более опытный прокомментирует, но ИМХО:
1. Время проверки естественно в общем случае увеличиться. Понятно почему.
2. При применении конструкции твоего варианта у меня как-то случались принципиальные неправильные её срабатывания по отношению к тому что ожидал в силу незнания данных особенностей. Пример привести уже не могу - забыл. Вспомню - отпишу.
Наверняка могу сказать одно: конструкция xeon (для mql4) предпочтительнее.
2. При применении конструкции твоего варианта у меня как-то случались принципиальные неправильные её срабатывания по отношению к тому что ожидал в силу незнания данных особенностей. Пример привести уже не могу - забыл. Вспомню - отпишу.
Вот и мне иногда что-то чудится, отловить не могу.
Спасибо, значит не одному мне чудилось. Жаль, удобная была запись. Можно было быстро включать/выключать/добавлять условия, не боясь запутаться со скобками.
Думаю что если условия простые (т.е. при их проверке не производятся расчёты, которые могут в дальнейшем на что-то повлиять), то можно юзать и твою конструкцию.
Подольше выполняться будет, но если обращения к ней нечасты, то не беда. Но лучше всё же раздельно. Бережёного ...
.
Недавно тут наступил на грабли с параллельным использованием глобальных переменных тестером и терминалом.
С трудом причину локализовал. Описано здесь. Но нам, чайникам, к подобному не привыкать )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
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 тогда мартин работает... почемуто не переваривает && баг или я чтото не правильно собрал.