Советник 20/200 expert v3.mq4

 

Есть советник, пробую разобраться и столкнулся с тем, что он не работает с другими советниками, т.е. у него нет проверки по Маджику и не открывает сделку, если другой советник уже в позиции. Добавте пож-та, чтоб он делал проверку открытых позиций правильно и не обращал внимания на другие советники.

Код прилагаю

// проверяем есть ли открытые ордера ...

total=OrdersTotal(); - вот здесь надо чего-то добавить...
if(total<Orders)
{
// ... если нет ни одного открытого ордера, то идем дальше
// проверяем настало ли время для торговли
if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade))
{
// ... если настало время, то
if (((Open[t1]-Open[t2])>delta_S*Point)) //Если цена уменьшилась на величину delta
{
//условие выполнено значит входим в короткую позицию:
// проверяем есть ли свободные деньги для открытия короткой позиции
if(AccountFreeMarginCheck(Symbol(),OP_SELL,getLots())<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
OpenShort(getLots());

cantrade=false; //запрещаем торговать повторно до следующего бара
return(0);
}
if (((Open[t2]-Open[t1])>delta_L*Point)) //Если цена изменилась на величину delta
{
// условие выполнено значит входим в длинную позицию
// проверяем есть ли свободные деньги на счету
if(AccountFreeMarginCheck(Symbol(),OP_BUY,getLots())<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
OpenLong(getLots());
cantrade=false;
return(0);
}
}
}

 
Функция, определяющая (по магику) есть ли открытые ордера данного эксперта в терминале:
//---- Функция проверки наличия ордеров эксперта ---------------------+
bool ExpertOrder (int VersionID){
bool result=false;
int  _OrdersTotal=OrdersTotal();
if (_OrdersTotal>0) {
    for (int v=0; v<_OrdersTotal; v++) {    
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderMagicNumber()==VersionID) 
           { result=true;  break; }//есть ордер
        else   { result=false; } } } }
else { result=false; } return(result);}
//----------------------------------------------------------------------+

В условии предусматриваете: if (!ExpertOrder( MagicNumber )){ //если нет открывых ордеров версии ....

(ВМЕСТО total=OrdersTotal(); if(total

Пользую функцию оч. часто. Работа её устраивает. Говорят, что более качественно и профессионально выложены ф-и вот здесь: 'Как два советника одновременно запустить' - на обоих страничках

 

вроде бы сделал, спасиб))

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