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

Примеры создания одноразовых автоматических заявок OneBuy и OneSell
               
  Для автоматического выполнения без участия трейдера одно-разовых заданий по покупке/продаже ЦБ или закрытию позиций при достижении ценами заданных уровней (таргетов) можно создавать в 'Indicator Builder'е специальные индикаторы, примеры которых приведены ниже.
  Для одноразовых операций удобно использовать одноразовые OneBuy и OneSell заявки, т.е заявки срабатывающие один раз и после этого создающие lock-файл, блокирующий повторное срабатывание таких заявок, пока этот файл не будет удален. Создается этот файл в каталоге '\External Function Dlls'.
                 
1-й пример:
для автоматического закрытия позиции по GMKN, при достижении ценой уровня 7600 руб, можно создать индикатор с названием 'Закрыть GMKN по 7600 руб' и прописать в нем следующие строки:
              
FClosePos:= IF(Close>7600, True, False);  {проверка, что Close-цена превысила уровень 7600 руб};
{можно использовать и такой вариант: FClosePos:= Cross( Close, 7600); }
FNull:=False OR ExtFml("Borisoff.MoveMICEX_SHR","1234-000", 0, 0.2, OneSell, 0, Simple, 0, FClosePos, 1);  {здесь прописана Sell-заявка и размер доли в портфеле задан нулевым, что для функции означает, что если в портфеле есть позиции по этому инструменту, то их нужно закрыть и новые позиции не открывать}
7600;  {на графике рисуется линия со значением 7600};
             
Затем нужно поместить этот индикатор на график GMKN. Далее при каждом обновлении данных на графике будет происходить проверка условия, заданного в первой строке индикатора. Если условие не выполняется, то формирования заявки не происходит. По умолчанию индикатор работает с тикером той бумаги, на график которой он помещен, и когда Close-цена превысит уровень 7600 руб, значение FClosePos станет истинным и произойдет подача Sell-заявки в терминал АД для закрытия имеющейся позиции. В этом индикаторе при необходимости можно прописать еще несколько строк для закрытия позиций по GMKN одновременно и в других портфелях, имеющих GMKN.
                
2-й пример: уменьшить на 30% лонговые позиции по LKOH во всех портфелях при снижении цены от 2300 до 2270 рублей после 1 ноября 2007 года.
OldPercentLKOH:=20; {пусть доля LKOH в портфелях первоначально равна 20%}
FAlert:=If (
BarsSince(LastValue(DayOfMonth())>=01 AND LastValue(Month())>=11 AND LastValue(Year())>=2007 AND Cross(2300,Close))>0
AND Close<=2270, True, False );
NewPercentLKOH:=If( FAlert, OldPercentLKOH * 0.7, OldPercentLKOH); {умножение на 0.7 соответствует уменьшению доли на 30%, т.е до 20*0.7=14%};
FNull:=False OR ExtFml("Borisoff.MoveMICEX_SHR","1234-001", LastValue(NewPercentLKOH), 0.2, OneBuy, 0, Simple, 0, FAlert, 1); {для лонговых позиций нужно использовать функцию с Buy!!!}
FNull:=False OR ExtFml("Borisoff.MoveMICEX_SHR","1234-002", LastValue(NewPercentLKOH), 0.2, OneBuy, 0, Simple, 0, FAlert, 1); {для лонговых позиций функция с Buy
FNull:=False OR ExtFml("Borisoff.MoveMICEX_SHR","1234-003", LastValue(NewPercentLKOH), 0.2, OneBuy, 0, Simple, 0, FAlert, 1); {для лонговых позиций функция с Buy
{т.е. когда условие FAlert станет истинным, будут поданы Sell-заявки для уменьшения лонговых позиций в трех портфелях с величины OldPercentLKOH=20% до величины NewPercentLKOH = 14%. Заявка OneBuy сработает всего один раз и дальнейшие Buy-операции с этой бумагой, портфелем и рынком будут заблокированы до удаления lock-файла OneBuyLKOHMICEX_SHR1234-001, OneBuyLKOHMICEX_SHR1234-002, OneBuyLKOHMICEX_SHR1234-003!!!}

Можно создать заявку не только из Метастока, но и из другой программы: для этого нужно запустить на исполнение файл MoveOrderADirect3.exe например с такими параметрами в командной строке:
MoveOrderAdirect3.exe "MICEX_SHR" "1234-001" "LKOH" "14" "1" "2200.0" "OneBuy" "0.0" "Y" "2" "0" "Simple" "2265.00"   "0"';
                                           ^                 ^              ^        ^     ^        ^             ^          ^            ^                           ^            ^
рынок, портфель, ЦБ,  %доля, лот, расч.цена, buy, %стоп, пост.знач,точность цены, %размещ.стопа от Close-цены,Close-цена, NumBarRight}

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

Hosted by uCoz