Из справки:
OrderSend
Возвращаемое значение
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
поменяйте на
int a=-1; int sch=0; while(a==-1)
Из справки:
У Вас перед входом в цикл а=0 , в цикле проверка на а==0. Т.е. по факту выход из функции будет в любом случае, открылся ордер или пришла ошибка(Вы её кстати никак не отслеживаете).поменяйте на
Спасибо, тогда проверю так.
while(a==0)
{
if(sch>10){Alert("CheckForOpen_b"," ","Счетчик более 10 раз, выходим.");return;}
a=OrderSend(Symbol(),OP_BUY,Lot_Calculate(Symbol(),risk,sl),NormalizeDouble(Ask,Digits),
slippage,stop,teikpr,kom,mag);
if(a==-1){sch++;Alert("ОШИБКА НОМЕР," "sch"," ","Symbol()"," ","Пробую исчо");}
if(a==0 || a==-1)Sleep(3000);
a=0;
RefreshRates();
}
}
Из справки:
У Вас перед входом в цикл а=0 , в цикле проверка на а==0. Т.е. по факту выход из функции будет в любом случае, открылся ордер или пришла ошибка(Вы её кстати никак не отслеживаете).поменяйте на
Да, вы правы, чего то голова уже не варит. Проще как вы сказали поменять на -1. А я уже велосипед изобретаю)
Спасибо, тогда проверю так.
while(a==0)
{
if(sch>10)Alert("CheckForOpen_b"," ","Счетчик более 10 раз");
a=OrderSend(Symbol(),OP_BUY,Lot_Calculate(Symbol(),risk,sl),NormalizeDouble(Ask,Digits),
slippage,stop,teikpr,kom,mag);
if(a==-1){sch++;Alert("ОШИБКА НОМЕР," "sch"," ","Symbol()"," ","Пробую исчо");
if(a==0 || a==-1)Sleep(3000);
RefreshRates();
}
}
int a=-1; int sch=0; while(a==-1) { if(sch>10)Alert("CheckForOpen_b"," ","Счетчик более 10 раз"); a=OrderSend(Symbol(),OP_BUY,Lot_Calculate(Symbol(),risk,sl),NormalizeDouble(Ask,Digits),slippage,stop,teikpr,kom,mag); if(a==-1) { Sleep(3000); RefreshRates(); sch++; } }
Да, вы правы!) Я уже загоняюсь. Изобретаю велосипед так сказать))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
SendNotification("Покупка на "+Symbol());
//CАМА ФУНКЦИЯ !!!! Которая, то открывает, то нет
//+------------------------------------------------------------+
//+---------------------------Функция ОТКРЫТИЯ покупок---------+
//+------------------------------------------------------------+
void CheckForOpen_b(int mag,double risk,int sl,int tp,string kom)
{
double teikpr=0,stop=0;
if(tp!=0) teikpr=NormalizeDouble(Ask+tp*Point,Digits);
if(sl!=0) stop=NormalizeDouble(Ask-sl *Point,Digits);
int a=0;
int sch=0;
while(a==0)
{
if(sch>10)Alert("CheckForOpen_b"," ","Счетчик более 10 раз");
a=OrderSend(Symbol(),OP_BUY,Lot_Calculate(Symbol(),risk,sl),NormalizeDouble(Ask,Digits),
slippage,stop,teikpr,kom,mag);
if(a==0)Sleep(3000);
RefreshRates();
sch++;
}
}
//+------------------------------------------------------------------+
Дело в том, что в функцию заходит и если даже не открылся ордер, то сразу выходит не обращая внимание на while!!! Фантастика бляха муха. Может я туплю? Ребят, подскажите.