[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 650

 

Нужна помощь с закрытие ордеров)) на каждом баре совершается сделка. В тестере открывает много-много ордеров, а правильно, чтобы на текущем баре посылался ордер, а на следующем баре он закрывался.

Скажите, что не так...

 if (OrdersTotal()!=0)
   {
     OrderSelect(OrderTicket(),SELECT_BY_TICKET);
     if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
     if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
   }
 

Все не так...

Кто вас научил делать это ?

где цикл перебора ордеров ??

что будет если ордер не "селект"???

где поиск времени открытия и закрытия последнего ордера ????

где запрет продолжать открывать ордера на этом же баре если все ордера закрыты по ПРАВИЛЬНЫМ условиям (которых у вас нет) ...

 
FAQ:

Все не так...

Кто вас научил делать это ?

где цикл перебора ордеров ??

что будет если ордер не "селект"???

где поиск времени открытия и закрытия последнего ордера ????

где запрет продолжать открывать ордера на этом же баре если все ордера закрыты по ПРАВИЛЬНЫМ условиям (которых у вас нет) ...

Зачем цикл перебора, если всегда открыт один ордер?
 
orb:

Нужна помощь с закрытие ордеров)) на каждом баре совершается сделка. В тестере открывает много-много ордеров, а правильно, чтобы на текущем баре посылался ордер, а на следующем баре он закрывался.

Скажите, что не так...

OrderSelect(OrderTicket(),SELECT_BY_TICKET);

"выбрать ордер с тикетом выбранного в данный момент ордера" это как?

 

Затем...

Сходите в ветку Игоря Кима, наберите нужных вам функций и пользуйтесь ими, заодно посмотрите что и как надо правильно делать.

 
мужики тупанул)
 
7sintez:
Всем привет! Ребята.., подскажите новичку..! Хочу сделать так, что бы при определенных условиях над свечей открывалась только одна сделка!!! У меня почему-то много сделок открывается... Не сразу, а постепенно... Т.е. допустим над 5-ти минутной свечей в течении всех 5-ти минут сделки и открываются! А мне нужно сделать так, что бы открывалась только одна сделка! И что бы на следующей свече при определенных условиях тоже открывалась только одна сделка и т.д.


Спасибо!

Я это сделал так. Перебираю ордера, если по интересуемой валютной паре есть открытый ордер то сравниваю его время открытия со временем начала открытия текущего бара. Если время ордера больше, то выход. Если появился новый бар, то его время открытия становится больше времени ордера, который блокировал сделку на предыдущем баре, и можно на новом баре торговать.
if (OrdersTotal()>0)
   {  for (i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  if (OrderSymbol()==Symbol() && OrderOpenTime()>iTime(NULL,0,0))
            {   Sleep(5*1000); return(0);
   }  }  }  }
 
Qwertee:

Технически всё просто: buysell != "buy" - поэтому не выполняется следующий за ним Alert(1).

Что содержит в тот момент переменная buysel узнаётся принтованием: Print (buysell); после первого алерта.

------------------------------------------------------------------------------------------------------------------------------------------------

в том и проблема, что если я в коде ставлю вместо Alert(1) - Print(buysell) то байселл возвращает значение buy, так в чем дело? бред какой то!

Чтобы быть уверенным в методе лишения таракана слуха путём отрывания ему ног, нужно поочерёдно поотрывать ему все ноги, каждый раз давая команду "Ползи" - такова участь всех экспериментаторов. Попытайтесь во вторую команду Alert() засунуть что-нибудь другое, например, Alert ("1"), или Alert ("Мама, не горюй!") - понаблюдайте за происходящим. ;)))
 
paladin80:
Я это сделал так. Перебираю ордера, если по интересуемой валютной паре есть открытый ордер то сравниваю его время открытия со временем начала открытия текущего бара. Если время ордера больше, то выход. Если появился новый бар, то его время открытия становится больше времени ордера, который блокировал сделку на предыдущем баре, и можно на новом баре торговать.
Если маленькому ребёнку сказать чтобы он маму называл "папой", он так и будет делать, пока кто-нибудь не "посмеётся над ним"...

Если подсказывать новичку, то сразу ПРАВИЛЬНО! Конструкция:

if (OrdersTotal()>0)

работает до того момента, пока трейдер не запустит на одном счёте несколько советников, а это рано или поздно ПРОИСХОДИТ!!! А значит, советник без МАГИКА "как Птица без крыла, как Мужик без Бабла"...

Кстати и

iTime(NULL,0,0)

корректнее писать в виде Time[0].
И Sleep (5*1000) = 5 секундам. И чего мы ждём???

 
7sintez:
Всем привет! Ребята.., подскажите новичку..! Хочу сделать так, что бы при определенных условиях над свечей открывалась только одна сделка!!! У меня почему-то много сделок открывается... Не сразу, а постепенно... Т.е. допустим над 5-ти минутной свечей в течении всех 5-ти минут сделки и открываются! А мне нужно сделать так, что бы открывалась только одна сделка! И что бы на следующей свече при определенных условиях тоже открывалась только одна сделка и т.д.


Спасибо!

Сравниваете время открытия ордера с началом 5-ти минутной свечи, например так:

if (iBarShift (NULL, 5, OrderOpenTime()) == iBarShift (NULL, 5, iTime (NULL, 5, 0))) return (0);
или
if (OrderOpenTime() >= iTime (NULL, 5, 0)) return (0);
Причина обращения: