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

 
rigonich:

И еще если это скрипт -- надо чтобы было включено разрешение на торговлю для экспертов.


это советник.

все разрешения конечно включены (есть другие советники - они работаю -НЕ одновременно)

 

то есть проблема в коде. что-то там не то..... 

 
Desead:

Спасибо за ответ. Отложенники нужны не все, только байлимит и селлимит, да и ставлю я тоже только их, магик тоже присутствует везде одинаковый. Приведённый вами код посмотрел, столько там всего, сидел разбирался ,вообщем если своими силами проблему не решу то сяду разбирать ваши скрипты более основательно, по другому иначе никак, не удаляет и все тут (

Я тут о чем подумал. У меня удаление всех отложенников стоит только в одном месте - когда я выгружаю робота ,те в разделе деинит. Может на этот раздел есть какое то ограничение по времени ? и поэтому ордера не успевают удалиться ? ведь когда ордеров мало все шикарно удаляется, а когда раскидывается полностью сетка то ппц что твориться, десяток ордеров всегда остаётся и руками потом это чистить не вариант, это же АТС вроде как.

Мой скрипт использует эту библиотеку. А в ней за удаление ордеров отвечает функция:

/*int fClose_AllOrders (double& fd_Pribul,         // Возвращаемый профит закрытых ордеров
                        int fi_Type = -1,          // тип закрываемых ордеров: -1 - все; -2 - рыночные; 7 - отложенные или OrderType()
                        int fi_NBars_Life = 0,     // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                        int fi_Period = 0,         // Период
                        int fi_OrderProfit = 0)*/  // Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку

Для выдирания функции из библиотеки нужны определённые знания, а вот использовать всю библиотеку вполне приемлемо для новичка.

 
rigonich:

Ура, я , кажется проблему удаления ордеров у себя решил. Отдельной функцией считаю количество "нужных"(подлежащих удалению) ордеров -- Total --, вызываю эту функцию, затем while с условием  ( Total>0) потом, цикл удаления for(int i=Total-1 ;i<=0l;i--), опять ф-я подсчета "нужных" , счетчик попыток удаления с выходом из   while при достижении заданного уровня. Так удаляются все. 
При использовании циклов ВСЕГДА нужно быть осторожным: ставить счётчик итераций и условие выхода при запрете советнику на торговлю.
 
TarasBY:
При использовании циклов ВСЕГДА нужно быть осторожным: ставить счётчик итераций и условие выхода при запрете советнику на торговлю.


Спасибо за подсказку. Про условие выхода при запрете торговли я забыл. сейчас себе поставлю.
 
Desead:

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

Можно в deinit() через библиотеку загрузить на чарт скрипт:

 // 7.9. Функция загружает на указанный график скрипт по его имени.
 void ServiceLoadScript(int    hwndChart,    // Системный дескриптор окна графика, куда загружается скрипт.
                        string szNameScript, // Имя загружаемого скрипта.
                        int    bOK);         // Подтверждение запуска скрипта, при наличии диалогового окна свойств скрипта. Скрипт может не иметь окна свойств!
                                             // При использовании функции для загрузки скрипта из скрипта на текущем графике параметр не работает из-за
                                             // невозможности одновременной работы двух скриптов на одном графике.
                                             // TRUE - автонажатие на кнопку "OK" разрешено, FALSE - автонажатие на кнопку "OK" запрещено.

с функцией удаления всех ордеров.

P.S. С теми или иными затратами средств и энергии можно решить ЛЮБЫЕ экзотические желания трейдера, НО нужна ли подчас эта "экзотика"... :)))

 

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

 

if OrdersTotal() > 0 

 

 все ясно и понятно... было бы...

а то я уже час не могу понять КАК это условие записать... 

 
lottamer:

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

 

if OrdersTotal() > 0 

 

 все ясно и понятно... было бы...

а то я уже час не могу понять КАК это условие записать... 


Почему нельзя? можно, но будет срабатывать при наличии открытых или отложенных ордеров на любом инструменте.
 
rigonich:

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


да пусть бы срабатывал -у меня одна позиция и один инструмент.

но ведь не работает!

ругается на ошибки в коде 

на вот это

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

int start()

  {

//----

   if OrdersTotal()>0

PlaySound ("alert.wav");

//----

   return(0);

  } 

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

 

выдает 8 ошибок!!  

 

//---------------------------

int start()

  {

//----

   if (OrdersTotal()>0)

PlaySound ("alert.wav");

//----

  }

 return(0);

 
//-----------------------------

А так ?
 
BeerGod:

А так ?


:)))))))))))))))))))

 

шикарно! Спасибо  

Причина обращения: