[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 212

 
dzhini:

Здорово, все здесь. Публиковал вчера вечером, но ветка уже ушла довольно далеко с разьяснениями что такое магик и как его готовят )))

Подскажите ответ на мой вопорс.

В определённое время советник выставляет отложки BUYLIMIT и SELLLIMIT. Хотелось бы добиться от него, чтобы в момент открытия ордера (OP_BUY или OP_SELL) в одну из сторон, отложки в другую сторону он удалял бы.

Мой вариант был таким:


Так оно выглядит лучше:

void start(){
  .....

  for(int i=OrdersTotal() -1;i>=0;i--) 
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
     {
      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3) 
     } 
   ....

}

Не влезая в логику, сразу же в глаза бросаются отсутствие фигурных скобок и неправильность организации работы OrderSelect()

 
eddy:

почему бы не сделать эти вопросы тематически группированными и добавить возможность задавать вопросы прямо там? вот это был бы норм вопросник.

а если ещё и добавить к этому возможность добавлять не только вопросы но и задачи, с кодами/статьями в качестве ответов - получится то, что я предлагаю - иная структура сайта, в которую входит всё его уже существующее содержимое

Роман, подготовительная работа ведется давно, идеология FAQ предварительно разработана и будет выложена в специальной ветке, техническая база согласована с администрацией.
Дождитесь выхода ветки посмотрите, насколько это совпадает с Вашими идеями, и при необходимости можете разработать и реализовать свой проект, если это будет Вам по силам.
 
Sergey_Rogozin:

Так оно выглядит лучше:

Не влезая в логику, сразу же в глаза бросаются отсутствие фигурных скобок и неправильность организации работы OrderSelect()

Могли бы вы разьяснить в чём заключается неправильность работы OrderSelect(). Потому что, как я писал ранее, если сделать удаление отложек в направлении уже открытой сделки, то всё проходит без проблем. Также проходит без проблем удаление всех отложек в строго определённое время.
 
dzhini:
Могли бы вы разьяснить в чём заключается неправильность работы OrderSelect(). Потому что, как я писал ранее, если сделать удаление отложек в направлении уже открытой сделки, то всё проходит без проблем. Также проходит без проблем удаление всех отложек в строго определённое время.
Не видя кода, сложно определенно сказать. Возможно, OrderSelect() будет работать и так, если Вам не надо выбирать по символу, магику, типу операции и пр.
 

По сути это попытка сделать наработку на будущее, чтобы работать с различными множествами ордеров (а не только с двумя).

При работе цикла просмотра ордеров советник вполне нормально проходит до алерта, но с функцией удаления корректно работать не хочет:

void ClosePendingOrder(int ORDERType)
{
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==ORDERType)
 {
 if(OrderSymbol()==Symbol())
 { 
 if(!OrderDelete(OrderTicket(),CLR_NONE))
   Print("Order close error",GetLastError());
return;
      }
    }
}
 
granit77:
идеология FAQ предварительно разработана, техническая база согласована с администрацией.
посмотрите, насколько это совпадает с Вашими идеями, и при необходимости можете разработать свой проект
я правильно понял ответ: "всё уже продумано и согласовано с администрацией (т.е. изменять уже никак), если чтото не будет соответствовать вашим идеям - можете сделать своё"?
 
eddy:
я правильно понял ответ: "всё уже продумано и согласовано с администрацией (т.е. изменять уже никак), если чтото не будет соответствовать вашим идеям - можете сделать своё"?
"Все уже украдено до вас" (с) )))
 
dzhini:

По сути это попытка сделать наработку на будущее, чтобы работать с различными множествами ордеров (а не только с двумя).

При работе цикла просмотра ордеров советник вполне нормально проходит до алерта, но с функцией удаления корректно работать не хочет:

Вроде выглядит все на месте. Не знаю.
 
Sergey_Rogozin:

Как работает вот это: ClosePendingOrder(OP_SELLLIMIT);} // (1) ?

Его код.

Код функции удаления ордера привёл в том самом сообщении... возможно, я не понял вопроса, но попытаюсь объяснить исходя из того, как я его понял:

циклом for задаётся перебор всех имеющихся открытых ордеров и отложек. ClosePendingOrder(OP_SELLLIMIT) - выбирает из этого списка те, которые удовлетворяют символу валюты и параметру OP_SELLLIMIT. Как только он находит эти совпадения, то удаляет эту отложку.

 
dzhini:

Код функции удаления ордера привёл в том самом сообщении... возможно, я не понял вопроса, но попытаюсь объяснить исходя из того, как я его понял:

циклом for задаётся перебор всех имеющихся открытых ордеров и отложек. ClosePendingOrder(OP_SELLLIMIT) - выбирает из этого списка те, которые удовлетворяют символу валюты и параметру OP_SELLLIMIT. Как только он находит эти совпадения, то удаляет эту отложку.

Я уже понял.. Сначала просто невнимательно посмотрел.

Ошибку не вижу.