Всем привет!
Решил поделиться своим небольшим опытом по хеджированию портфеля ETF от падения покупкой фьючерсов RVI.
Было ли это решение правильным или нет — вопрос отдельный, но любой практический опыт имеет ценность.
Буду краток.
Понравилось:
1) при сильном падении рынка поможет в какой-то мере компенсировать убытки
Не понравилось:
1) движения фьюча ну очень сильно отстают от движения индекса RVI: индекс может взлететь на 20%, а фьючерс всего на 3%. Справедливости ради добавлю, что фьючерс отстает и при падении.
2) жесткий неликвид — непросто набирать позицию, особенно, если нужно несколько десятков бумаг
3) плавное снижение рынка может сопровождаться и снижением волатильность, то есть, хедж еще и дополнительный убыток может дать.
3) длительность контракта 1 месяца — менять каждый месяц неликвид еще то удовольствие
4) приличная разница цен при замене фьюча: например, июньский продается по 34 пункта, а июльский уже по 35.
Есть мнение, что этот инструмент делали в основном для опционщиков, но имеет ли он для них какую-нибудь ценность — не знаю.
На мой взгляд, такой вариант хеджа может помочь при резких обвалах рынка (вроде коронавирусного), но в «обычное» время от него пользы немного.
<code class="rainbow" data-language="lua"> while stopped == false do
Quotes_1 = getQuoteLevel2("SPBFUT", "SRU0")
Bid_Count_1 = tonumber(Quotes_1.bid_count)
if Bid_Count_1>1 then
aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity)
SetCell(Table, 1, 1, tostring(aa))
end
local asset = getFuturesHolding("SPBFUT", "SPBFUT****","SRU0",0).totalnet
repeat
if aa>1 and asset>0 then
local ID_B_Order=10
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT****",
["OPERATION"] = "S",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "SRU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_B_Order),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(OrderSell)
message(Err_Order)
end
asset=asset-1
sleep(1000)
until asset==5<br />end</code>local SecCode = «LKU0»
local Quantity=1
function main()
while stopped == false do
local Quotes = getQuoteLevel2(«SPBFUT», SecCode)
local Offer_Price = tonumber(Quotes.offer[1].price)
local Offer_Vol = tonumber(Quotes.offer[1].quantity)
--отправка формы заявки
local LimitOrderBuy = { ххххх}
--условие входа в лонг
if Offer_Vol>10 then
message(Order)
local Order = sendTransaction(LimitOrderBuy)
end
sleep (200)
end
Смысл его такой: если количество лукойла в первой строке стакана больше 10, то покупается 1 бумага и работа скрипта завершается.
Так как скрипт срабатывает при определенном условии, то для перезапуска используется while stopped == false do и sleep (200).
Прикол в том, что при наступлении условия, скрипт начинает бомбить заявки по 1 шт пока не кончаются деньги (виртуальные).