На главную страницу

Описание 'Cash' и 'mmddCash' заявок:

  Cash-заявка реализует вывод указанного портфеля в кэш, НАЧИНАЯ с заданного (ЧЧММ) времени. Для этого надо в параметрах функции MoveMICE_SHR (или MoveFORTS) задать параметр 'ВидЗаявки' равным 'Cash' и ввести нужные значения часов ЧЧ и минут ММ серверного времени. Часы задаются целым числом в параметре Stop%, а минуты - в параметре  Add%Stop. Хотя здесь используются параметры обычно задаваемые для стопов, но Cash-заявка не создает никаких стопов, а указанные параметры используются только для указания серверного времени АД-терминала, после достижения которого сработает процедура поиска и закрытия всех имеющихся в портфеле позиций, как Long, так и Short.  После наступления времени срабатывания процедуры вывода портфеля в кэш CASH-заявка остается активной ДО КОНЦА ДНЯ пока не будет завершен вывод в кэш!
(пример Cash-заявки, которая заявка выводит в 18:35 весь портфель '1234-000' на рынке ММВБ в кэш:
   FAlert:=False OR Cum(1)=LastValue(Cum(1)); {здесь добавлено условие, чтобы заявка срабатывала только при каждом обновлении данных на последнем баре графика}
   FNull:=If(FAlert, ExtFml("Borisoff.MoveMICEX_SHR","1234-000",0,0.5,Cash,18,Simple,35,False,1), False);   
                                                                            ^               ^            ^            ^
                                                                            |                |             |            |       
                                                                       портфель    %прос -    часы      минуты
                                                                                        кальзы-
                                                                                        вания от Close-цены для заявок на закрытие позиций в портфеле);

  Поскольку разовое срабатывание в нужное время функции MoveMICEX_SHR или MoveFORTS с Cash-заявкой вызовет вывод в кэш всего портфеля, то задавать несколько Сash-заявок для одного и того же портфеля в разных советниках смысла нет. Лучше строку с вызовом Cash-заявки записать в отдельный индикатор, или в отдельную строку на Symbols-вкладке Советника, как показано на рисунке ниже, можно с несколькими cash-заявками, как в вышеприведенном примере для разных портфелей, и прикрепить этот индикатор, например, к графику какой-нибудь бумаги. Этот индикатор можно назвать например  'Cash_MICEX_1234-000' и в нем после строки с вызовом Cash-функции прописать время, например в виде числа '16.30;' тогда на графике появится линия со значением времени, т.е на графике сразу будет видно для какого портфеля и на какое время установлена Cash-заявка. И при достижении серверным временем АД-терминала заданного значения времени, сработают процедуры вывода в кэш сразу для всех портфелей, которые будут указаны в этом индикаторе или советнике. Но можно также и просто вставить вышеуказанную строку с нужными параметрами в какой-либо Buy- или Sell-приказ в каком-нибудь советнике. Подчеркну, что Cash-заявка проверяет наступление заданного времени именно с серверным временем в АД-терминале, а не с временем графика в Метастоке и не с временем на локальном компьютере.
  Замечу, что время начала и окончания торгов на ММВБ и на ФОРТС обычно отличается, поэтому, когда авто-торговля ведется сразу на двух рынках, важно помещать индикатор вывода в кэш на график, соответствующий рынку. Иначе возможна ситуация, когда, к примеру, вы зададите для портфеля на ФОРТС вывод в кэш в конце торгов, а индикатор вывода в кэш поместите на график ММВБ-инструмента. В этом случае у вас вывод в кэш на ФОРТС не произойдет(!) из-за того что торги на ММВБ завершатся раньше. А поскольку обновление данных в Метастоке по бумагам с ММВБ уже закончится, то индикатор для инструментов торгуемых на ФОРТС уже не сработает в заданное время. Эта реальная ситуация однажды случилась со мной :))
  Если в одном портфеле используются инструменты, торгуемые на разных рынках, например на ММВБ и на РТС-стандарт, то кэш-заявки надо создавать для обоих этих рынков и помещать их рядом в одном индикаторе)

Пример, как реализован вывод в кэш в моей ТС:
                             
CashTime.GIF (13922 bytes)
                       
т.е. в Советнике для авто-трейдинга создана дополнительная строка со следующими формулами:
                               
FLast:=LastValue(Cum(1))=Cum(1); {условие, чтобы заявка на срабатывание проверялась при каждом обновлении данных только на последнем баре}
FDate:=Month()*100 + DayOfMonth(); {задаем дату}
CashHour:=18; {задаем часы}
CashMinute:=35; {задаем минуты}
{далее задаем условие для проверки, наступило ли время вывода в кэш}
FCash:=If((Hour()*100 + Minute())>=(CashHour*100 + CashMinute)
AND FDate=LastValue(FDate), True, False)
AND FLast;
FNull:=If(FCash, ExtFml("Borisoff.MoveFORTS","12345-000",0,0.5,Cash,CashHour,Simple,CashMinute,FCash,0),False); {если при очередном обновлении данных на графике условие стало истинно, то подаем заявку на вывод портфеля в кэш на соответствующем рынке}
FNull1:=If(FCash, ExtFml("Borisoff.MoveRTS_STANDARD","12345-000",0,0.5,Cash,CashHour,Simple,CashMinute,FCash,0),False); {если при очередном обновлении данных на графике условие стало истинно, то подаем заявку на вывод портфеля в кэш на соответствующем рынке}
FCash; {рисуем на графике кэш-сигнал}

               

  Еще один вид заявки, 'mmddCash'-заявка, функционально аналогична 'Cash' заявке, только выводит портфель в кэш в заданную дату и время дня. Дата задается значениями месяца и дня, а время задается числом минут, рассчитываемых по формуле: (часы*60 + минуты). Т.е. для времени 17 часов 35 минут и даты 30 июня заявка будет выглядеть так:
(пример mmddCash-заявки, которая выводит весь портфель '1234-000' на рынке ФОРТС в кэш 30-го июня в 17:35 часов:
FNull:=False OR ExtFml("Borisoff.MoveFORTS","1234-000",0,1.5,mmddCash,6,Simple,30,False,1055);   
                                                                    ^              ^                   ^            ^              ^
                                                                    |               |                    |            |               |
                                                                портфель   %прос-           месяц       день     время дня в минутах по формуле: часы*60+минуты
                                                                                 кальзы-
                                                                                вания от Close-цены для заявок на закрытие позиций в портфеле);  
  По умолчанию, после наступления времени срабатывания процедуры вывода портфеля в кэш CASH-заявка остается активной ДО КОНЦА ДНЯ пока не сработает. При выводе портфеля в кэш модуль считывает имеющиеся в портфеле позиции и формирует заявки на закрытие этих позиций по текущей Close-цене, увеличенной/уменьшенной на размер заданного в параметре Add%ToClose проскальзывания для Buy и Sell заявок соответственно.
  Ведется контроль исполнения каждой заявки, поданной для закрытия какой-либо позиции в портфеле. Время контроля по умолчанию составляет 52 сек (это значение можно изменить в конфигурационном cfg-файле). Кроме того, при выводе портфеля в кэш удаляются и все активные заявки, для выводимого в кэш рынка, портфеля и инструмента, если они будут находится в очереди заявок АД-терминала.
  После вывода портфеля в кэш, производится отключение авто-трейдинга, чтобы после вывода в кэш не начали формироваться новые позиции по сигналам из Метастока. Отключение делается при завершении процедуры вывода в кэш, автоматическим созданием LOCK-файла, блокирующего в дальнейшем работу с выведенным в кэш портфелем, до тех пор пока этот LOCK-файл не будет вручную удален или перемещен в архив
НЕ ЗАБЫВАЙТЕ удалять LOCK-файл на следующий день, чтобы после вывода в кэш возобновить авто-трейдинг в следующую торговую сессию!!!
           
  Кстати, LOCK-файлом удобно пользоваться для временной приостановки или отключения авто-трейдинга, например, изменением в названии этого файла одного символа можно лишить этот файл его блокирующего действия, а восстановление в прежнем виде имени файла снова включает блокировку авто-трейдинга для портфеля, который записан в названии этого файла.
            
  Выход в кэш можно организовать и по другому
, например так, как вначале это было описано в ТС Альфа-тренд в разделе 21, то есть указать время выхода в кэш и после этого времени задавать в заявке, соответствующей текущей позиции в портфеле (т.е. в Buy-заявке для лонговой позиции и в Sell-заявке для шортовой позиции), торгуемую долю в портфеле равной нулю и после наступления времени выхода в кэш позиция будет уменьшена до нуля. Например, можно использовать формулы:         
              
  NumBarRight := 1;
          
  FCashTime:=If( (Hour()*100 + Minute()) > 1830, True, False );  {проверяем текущий бар на время наступления выхода в кэш}
  FPos:=-20;  {размер позиции в лотах для примера}
  FPos:=If( CashTime, 0, FPos );  {если наступило время выхода в кэш, то зануляем размер позиции}
           
  {для лонг-позиции в портфеле}   
  FBuyOrder:=FBuy AND FCashTime=False;  {проверяем текущий бар на время наступления выхода в кэш};          
  FNull:=if( FBuyOrder OR FCashTime, ExtFml("Borisoff.MoveFORTS","1234-000",FPos,0.5,B,0,Simple,0,FBuyOrder OR FCashTime,NumBarRight), False);
 {выводим бумагу в кеш или исполняем очередную Buy-заявку}; 

  {для шорт-позиции в портфеле}  
  FSellOrder:=FSell AND FCashTime=False;  {проверяем текущий бар на время наступления выхода в кэш};             
  FNull1:=if( FSellOrder OR FCashTime, ExtFml("Borisoff.MoveFORTS","1234-000",FPos,0.5,S,0,Simple,0,FSellOrder OR FCashTime,NumBarRight), False); 
{выводим бумагу в кеш или исполняем заявку очередную Sell-заявку}

Hosted by uCoz