Функция, определяющая (по магику) есть ли открытые ордера данного эксперта в терминале:
//---- Функция проверки наличия ордеров эксперта ---------------------+ 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
Пользую функцию оч. часто. Работа её устраивает. Говорят, что более качественно и профессионально выложены ф-и вот здесь: 'Как два советника одновременно запустить' - на обоих страничках
вроде бы сделал, спасиб))
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть советник, пробую разобраться и столкнулся с тем, что он не работает с другими советниками, т.е. у него нет проверки по Маджику и не открывает сделку, если другой советник уже в позиции. Добавте пож-та, чтоб он делал проверку открытых позиций правильно и не обращал внимания на другие советники.
Код прилагаю
// проверяем есть ли открытые ордера ...
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);
}
}
}