На
главную страницу
Оперативное
управление размером позиций в портфеле:
В ходе торгов можно
управлять размером позиции, и в зависимости от
ситуации на графиках увеличивать или уменьшать
размер доли бумаги в портфеле. Рассмотрим график:
Например, на самых верхних Sell-сигналах на продажу
можно сформировать шортовую позицию с долей в
портфеле 20% с помощью строки:
MaxInPortfel:=20;
{задаем долю бумаги в портфеле 20%}:
FNull:=IF(FSell,
ExtFml("Borisoff.MoveMICEX_SHR","xxxx-000",LastValue(MaxInPortfel),1,S,0,Simple,0,FSell,3),
False);
А на нижних Sell-сигналах долю шорта в портфеле
можно уменьшить до 15% с помощью строки:
MaxInPortfel:=15;
{задаем уменьшеную долю бумаги в портфеле 15%}:
FNull:=IF(FSell,
ExtFml("Borisoff.MoveMICEX_SHR","xxxx-000",LastValue(MaxInPortfel),1,S,0,Simple,0,FSell,3),
False);
и поскольку доля по бумаге в формуле
уменьшится, то и имеющаяся в портфеле позиция
будет уменьшена до величины, заданной в функции.
На последнем Sell-сигнале долю шорта в портфеле
можно например уменьшить до 10% с помощью строки:
MaxInPortfel:=10;
{задаем долю бумаги в портфеле 10%}:
FNull:=IF(FSell,
ExtFml("Borisoff.MoveMICEX_SHR","xxxx-000",LastValue(MaxInPortfel),1,S,0,Simple,0,FSell,3),
False);
Т.е. при очередных сигналах того же направления,
если доля в портфеле (параметр MaxQuantInPortfel) в
функции MoveMICEX_SHR() будет уменьшена, то
и доля ЦБ в портфеле будет уменьшена путем
автоматического выставления модулем заявки на
покупку для уменьшения шортовой позиции в
портфеле до величины, заданной в формуле. Если
имеются стопы, то текущие стоп-завки в очереди
АД-терминала будут удаляться и создаваться новые
стопы, но уже для уже нового размера позиции по
бумаге в портфеле. Все аналогично и для лонгов.
ЗАМЕЧУ, что изменение размера позиций в
портфеле осуществляется только на очередных Buy
или Sell сигналах на графике, т.е. если долю в
формуле изменить и после этого Buy/Sell сигналов на
графике еще не будет, то и уменьшения или
увеличения размера позиции в портфеле не
произойдет. Конечно можно было сделать так, чтобы
как только изменяется доля портфеля в формуле, то
при очередном обновлении данных в Метастоке
сразу бы уменьшалась или увеличивалась и
соответствующая позиция, но это было бы
неправильно, т.к. при этом и начальное
формирование позиций происходило бы без
соответствующего Buy или Sell сигнала. Но
реализовать разовое увеличение или уменьшение
доли в портфеле, можно через формулу с каким-либо
одноразовым условием, например, по событию
начала роста или снижения цен каких-либо ЦБ.
Пример, как можно сформировать
позицию в портфеле в течении нескольких
баров графика с помощью всего одного сигнала
на покупку/продажу:
Если прописать в Советнике Метастока следующую
последовательность строк, то можно сформировать лонг-позицию
в портфеле с помощью покупок заданного кол-ва
лотов на каждом последующем баре после появления
всего одного buy-сигнала на графике:
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-1,0.5,B,0,Simple,0,FBuy,1), False); {на
следующем баре после сигнала купится один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-2,0.5,B,0,Simple,0,FBuy,2), False); {на
2-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-3,0.5,B,0,Simple,0,FBuy,3), False); {на
3-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-4,0.5,B,0,Simple,0,FBuy,4), False); {на
4-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-5,0.5,B,0,Simple,0,FBuy,5), False); {на
5-м баре после сигнала купится еще один лот и
всего в лонг-позиции станет 5 лотов}
Можно также сформировать лонг-позицию в
портфеле с помощью покупок заданного кол-ва
лотов на произвольных барах графика
после появления всего одного buy-сигнала на
графике, если прописать в Советнике Метастока
следующую последовательность строк:
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-1,0.5,B,0,Simple,0,FBuy,1), False); {на
следующем баре после сигнала купится один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-2,0.5,B,0,Simple,0,FBuy,3), False); {на
3-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-3,0.5,B,0,Simple,0,FBuy,5), False); {на
5-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-4,0.5,B,0,Simple,0,FBuy,7), False); {на
7-м баре после сигнала купится еще один лот}
FNull:=IF(FBuy, ExtFml("Borisoff.MoveMICEX_SHR","12345-000",-5,0.5,B,0,Simple,0,FBuy,9), False); {на
9-м баре после сигнала купится еще один лот и
всего в лонг-позиции станет 5 лотов, последовательность номеров
баров после сигнала для покупок/продаж может
быть совершенно произвольной}
Если на последующих барах
задавать меньший размер позиции, то модуль автоматически
будет уменьшать величину позиции до
заданного на очередном баре уровня. Т.е. таким
образом можно постепенно уменьшать
величину позиции в портфеле при предполагаемом
развороте тренда.