Избранное трейдера Vitastic
Это третья часть моего описания направленной торговли опционами, посвященная управлению позицией, и рекомендуемая к прочтению после предыдущей части, а также первой части.
Лучшее управление позицией – это заключать только прибыльные сделки, и не делать убыточных. Я серьезно. И так и пытаюсь действовать.
В смысле при закрытии позиции (отдельной леги или всей комбинации) я стараюсь, чтобы каждая сделка была в плюс. Согласитесь, что тогда и в целом у меня будет прибыльная торговля, если каждая сделка будет в плюс! :-)
Но это все же не управление позицией, а закрытие сделок. Вопрос в том, как подвести все наши опционы к прибыли.
Управление позицией – это то, чего не бывает c акциями. Что ты будешь делать, если ты купил акцию и играешь на её повышение, а цена упала? Закрывать или усредняться, больше ничего. Если усредняться, так это по сути не управление позицией, а открытие новой сделки по тому же тикеру, с новой ценой. Ведь на риски и профит по ранее открытой позиции ты никак не повлиял, вместо этого ты открыл новую сделку по тому же тикеру. И еще непонятно, хорошо это или плохо. А важно, что это действие потребовало добавления капитала, т.е. начиная с определенного момента падения и оно станет недоступным, с точки зрения риск-менеджмента. Итого ты фактически можешь только закрыть позицию – признать убыток, и ничего больше. Или тебе надо для работы с акциями делать что-то фьючем или опционами, в общем опять же приходим к опционам.

В первую очередь, следить собираюсь, если рынок пойдет на 1500-1600 по широкому индексу ММВБ, за ГМК Норникель, ВСМПО Ависма, Росагро, Фосагро, Мосбиржа, ЛСР. Кроме того, Газпром, Роснефть, Мечел пр., ФСК, Русал, Ленэнерго пр. присутствуют в моем портфеле в заметных количествах, так что тоже приглядывать буду волей-неволей. Если цены будут существенно ниже текущих – я буду добирать акции этих списков, вероятно.
PORTFOLIO_EX BRENT_RUB;
DESCRIPTION Нефть в рублях;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
PROGRAM
' =========Пользовательские настройки=============
INSTRUMENT_BRENT="BRK7" ' код инструмента BRENT
INSTRUMENT_USDRUB="USD000UTSTOM" ' код инструмента USDRUB_TOM
CLASSCODE_FUT="SPBFUT" ' код группы
CLASSCODE_ETC="CETS" ' код группы
PriceBrent = 0 + GET_PARAM(CLASSCODE_FUT,INSTRUMENT_BRENT, "OFFER")
PriceUSDRUB = 0 + GET_PARAM(CLASSCODE_ETC,INSTRUMENT_USDRUB, "OFFER")
BRENT_RUB=PriceBrent*PriceUSDRUB
' ===============СЕРВЕРНЫЕ ДАТА И ВРЕМЯ===============
SERVERDATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера в формате DD.MM.YYYY
SERVERTIME=GET_INFO_PARAM("SERVERTIME") ' время сервера в формате HH:MM:SS
DATETIME(SERVERDATE,SERVERTIME) ' вызов функции даты-времени
' ===============ДАННЫЕ В ТАБЛИЦУ===============
OUTPUT_BRENT=CREATE_MAP()
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"BRENT_RUB" , BRENT_RUB)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERTIME" , SERVERTIME)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERDATE" , SERVERDATE)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"INSTRUMENT" , INSTRUMENT_BRENT)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT_BRENT)
' ===============ФУНКЦИИ===============
' ФУНКЦИЯ СЕРВЕРНЫХ ДАТЫ И ВРЕМЕНИ
FUNC DATETIME(FSERVERDATE,FSERVERTIME)
CURYEAR=SUBSTR(FSERVERDATE,6,4) ' текущий год в текстовом формате
CURMONTH=SUBSTR(FSERVERDATE,3,2) ' текущий месяц в текстовом формате
CURDAY=SUBSTR(FSERVERDATE,0,2) ' текущий день в текстовом формате
CURDATE=CURYEAR & CURMONTH & CURDAY ' дата в текстовом формате
CURHOUR=SUBSTR(FSERVERTIME,0,2) ' текущие часы в текстовом формате
CURMIN=SUBSTR(FSERVERTIME,3,2) ' текущие минуты в текстовом формате
CURSEC=SUBSTR(FSERVERTIME,6,2) ' текущие секунды в текстовом формате
CURTIME=CURHOUR & CURMIN & CURSEC ' время в текстовом формате
END FUNC
END_PROGRAM
PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата;
PARAMETER_TYPE STRING(10);
END
PARAMETER SERVERTIME;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(10);
END
PARAMETER BRENT_RUB;
PARAMETER_TITLE Нефть (руб.);
PARAMETER_DESCRIPTION Нефть (руб.);
PARAMETER_TYPE STRING(10);
END
END_PORTFOLIO_EX
ссылка на скриптЛениво бродив по западному интернету, нашел интересную стратегию, которая своими корнями уходит к некоему Larry Connors. Стратегия построена на простом RSI с периодом 2.
Суть ее в следующем:
покупаем индексный ETF, когда значение меньше 15 на закрытии дня (да, это можно сделать без проблем и проскальзываний на всех ликвидных ETF) и продаем, когда клоуз текущего дня выше хая предыдущего (можете придумать свои выходы, стратегия не очень-то чувствительна к выходам).
В общем MR в чистом виде. И в принципе это должно работать на большинстве ETF развитых рынков.
Тестил на Multicharts.Net, код ниже.
using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;
namespace PowerLanguage.Strategy {
public class rsi_2_spy : SignalObject {
public rsi_2_spy(object _ctx):base(_ctx){}
private IOrderMarket buy_order;
private IOrderMarket sell_order;
private RSI m_RSI;
private VariableSeries<Double> m_myrsi;
private ISeries<double> Price { get; set; }
protected override void Create() {
// create variable objects, function objects, order objects etc.
buy_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy));
sell_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Sell));
m_RSI = new RSI(this);
m_myrsi = new VariableSeries<Double>(this);
}
protected override void StartCalc() {
// assign inputs
Price = Bars.Close;
m_RSI.price = Price;
m_RSI.length = 2;
}
protected override void CalcBar(){
// strategy logic
m_myrsi.Value = m_RSI[0];
if (Bars.Close[0]>Bars.High[1]){
sell_order.Send();
return;
}
if (m_RSI[0]<15){
buy_order.Send();
}
}
}
}
Индикатор ATR (Average True Range) показывает среднюю величину изменения цены внутри дня за указанный период. Отлично подходит для выбора уровней стопов. Также индикатор показывает рост волатильности в активе, когда сохраняет высокие значения.
Работаем на Quantopian (см. сюда), код пишем на Python. Проверяем стратегии:
