Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 701

 

Решил таким образом: 

 

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

Впервые попробовал написать открытие позиций в цикле, т.к. не исключаю открытия и по другим парам.

Но почему-то в цикле не открывает ничего! Неужели для открытия нужен особый цикл?! Правда, проверял только в тестере!

Я написал обычный:

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

Что не так для открытия ордеров, позиций? Благодарю за помощь!

 
borilunad:

Впервые попробовал написать открытие позиций в цикле, т.к. не исключаю открытия и по другим парам.

Но почему-то в цикле не открывает ничего! Неужели для открытия нужен особый цикл?! Правда, проверял только в тестере!

Я написал обычный:

Что не так для открытия ордеров, позиций? Благодарю за помощь!



Там пока нет ордеров цикл не запустится. А в чём смысл цикла вообще?
 
borilunad:

Впервые попробовал написать открытие позиций в цикле, т.к. не исключаю открытия и по другим парам.

Но почему-то в цикле не открывает ничего! Неужели для открытия нужен особый цикл?!

Я написал обычный:

Что не так для открытия ордеров, позиций? Благодарю за помощь!

Цикл выполняется быстрей чем освобождается торговый поток. Поэтому надо ставить ещё цикл задержку while(!IsTradeContextBusy()) Sleep(100);
 
valeryk:


Там пока нет ордеров цикл не запустится. А в чём смысл цикла вообще?


Спасибо! Я так и подумал! Значит, если, например, хочу открыть по первой паре, достачно без цикла, но с if(OrdersTotal == 0). А когда открыть другой ордер по этой же или по другой паре, нужен цикл, и будет работать! Сейчас попробую! 

Видно, придётся многое поменять в открытии, но в принципе понял, как надо! Спасибо!

 

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров
 
AlexeyVik:

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров

Спасибо! Но мне нужен цикл чтобы сов не видел других пар! С ошибками потом разберусь! Я даже обрадовался, когда в журнале появилась ошибка 130, значит заработало! Ошибки у меня обрабатываются во внешних функциях! Ещё раз спасибо!
 
borilunad:

Спасибо! Но мне нужен цикл чтобы сов не видел других пар! С ошибками потом разберусь! Я даже обрадовался, когда в журнале появилась ошибка 130, значит заработало! Ошибки у меня обрабатываются во внешних функциях! Ещё раз спасибо!
Вот в этом и есть пагубность логики. Сов не может не видеть других пар. Его можно и нужно заставить не обрабатывать УЖЕ ОТКРЫТЫЕ ордера других символов. А в функцию OrderSend(............) пишется конкретный Symbol() или в текстовом формате, например "EURUSD"... что впишешь то и будет открываться. Или пытаться открыть...
 
AlexeyVik:

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров

Хороший способ проверки возможности открыть до восьми ордеров за один тик. Нам их обещали, но пока никто не проверил
 
Vinin:

Хороший способ проверки возможности открыть до восьми ордеров за один тик. Нам их обещали, но пока никто не проверил

Ничё не понял...