На
главную страницу
Примеры
создания одноразовых автоматических заявок
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}
Конечно для одноразовых операций можно и
вручную подать нужные заявки в АД-терминал, но за
ними придется следить и периодически обновлять.
Использование же автоматических заявок
позволяет полностью автоматизировать весь
процесс и кроме того, не требуется постоянного
наличия активных заявок в АД-терминале. Заявки
появятся автоматически при наступлении заданных
условий.