Избранное трейдера Владимир
2016 год у меня получился сложный, профитный, насыщенный интересными и неожиданными событиями, яркими впечатлениями, знакомствами с замечательными людьми.
Вот и снова наступил конец года. Все дивидендные отсечки за 9 месяцев 2016 года в конце ноября уже были известны. Всё, что я хотела купить под эти отсечки, я купила.
И вновь мной «овладело беспокойство, Охота к перемене мест» ©
В этом году я решила снова путешествовать к одному из Семи Чудес Света. На этот раз я выбрала путешествие в Бразилию, посмотреть Статую Христа на горе Корковадо в Рио-де-Жанейро.
Я уже писала о своём плане путешествий в прошлые годы, поэтому просто коротко напомню
Из школьного курса истории мы помним, что в древности существовало Семь чудес света. Но до нашего времени сохранились только египетские пирамиды.
В середине двухтысячных годов появилась идея выбрать новые Семь чудес света.
Новые семь чудес света — проект, целью которого стал поиск более современных семи чудес света. Выборы новых семи «чудес света» из известных архитектурных сооружений мира происходили через SMS, телефон либо интернет. Всего в выборе новых чудес света приняли участие 90 миллионов человек по всему миру
Конкурс “7 новых чудес мира” Организован некоммерческой организацией New Open World Corporation (NOWC) по инициативе швейцарца Бернара Вербера. 7 июля 2007 года, в день «трёх семёрок», в столице Португалии Лиссабоне были названы новые семь чудес света.
Ими стали :
Великая Китайская Стена,
Римский Колизей,
Тадж-Махал,
Город Петра в Иордании,
Статуя Христа на горе Корковадо в Рио-де-Жанейро,
Город индейцев Мачу-Пикчу в Перу
Пирамида Майя в городе Чичен-Ица (Мексика).
Мне интересно посмотреть все эти великие памятники цивилизации и часть из них я уже посмотрела.
Фотографию кошки, которую я сделала в Римском Колизее, я выбрала моим аватаром
О путешествии в Мексику к Чичен-Ица есть рассказ и фото в моём блоге на СЛ в конце 2014 года.
Как я смотрела древний город Петру в Иордании, я написала в обзоре «ИГИЛ, 7 чудес света и дивиденды» в декабре 2015 года.
Так получилось, что в этом путешествии, мне было особенно интересно наблюдать за необычными событиями и деталями жизни людей тех стран, которые я посетила.
И вот я снова в пути, лечу в Барселону, откуда началось мой путешествие через Атлантику в Южную Америку
И так Барселона. Рынок Бокерия на La Rambla
Что такое Plaza 2 и с чем ее едят! Ч.2.
Дальше будет интереснее.
Контуры Plaza 2.
Существует 2 контура Plaza 2: для тестовых торгов и реальных торгов. Тестовый контур необходим для разработчиков. Доступ можно получить здесь: http://moex.com/s438.
На тестовом цена последней сделки, цена покупки и продажи очень похожи на реальный, но остальные данные далеки от реальности.
Установка и настройка шлюза.
После того как получили логин Plaza 2 скачаем последнюю версию cGate ftp://ftp.moex.com/pub/FORTS/Plaza2/CGate/.
В процесс установки можно параметры по умолчанию не менять, кроме следующих:
Выбираем вариант подключения:
Тестовая система для разработчиков если хотим подключаться к тестовому контуру.
Settings = { Name = "xLinReg", period = 128, deviation=2, line= { { Name = "xLinReg", Color = RGB(0, 0, 255), Type = TYPE_LINE, Width = 3 }, { Name = "xLinReg", Color = RGB(192, 0, 0), Type = TYPE_LINE, Width = 3 }, { Name = "xLinReg", Color = RGB(0, 128, 0), Type = TYPE_LINE, Width = 3 } } } ---------------------------------------------------------- ---------------------------------------------------------- ---------------------------------------------------------- function c_FF() local AMA={} local CC={} return function(ind, _p,_ddd) local period = _p local index = ind local vol = 0 local sigma = 0 local sigma2 = 0 local aav = 0 local bb = 0 local ZZZ = 0 if index == 1 then AMA={} CC={} CC[index]=(C(index)+H(index)+L(index))/3 AMA[index]=(C(index)+O(index))/2 return nil end ------------------------------ AMA[index]=AMA[index-1] CC[index]=(C(index)+H(index)+L(index))/3 --------------------- if index < (_p) then return nil end ---------------------------------------------------- period =_p if index < period then period = index end --------------- sigma=0 sigma2=0 aav=0 ZZZ=0 for i = 0, period-1 do ZZZ=CC[index+i-period+1] aav=aav+ZZZ sigma=sigma+ZZZ*(-(period-1)/2+i) sigma2=sigma2+(-(period-1)/2+i)^2 end ------------------------ bb=sigma/sigma2 aav=aav/period AMA[index]=aav+bb*((period-1)/2) ---------линейная регрессия ------------------------------- sigma=0 sigma2=0 sigma3 = 0 for i = 0, period-1 do ZZZ=CC[index+i-period+1] sigma2=aav+bb*(-(period-1)/2+i) sigma=sigma+(ZZZ-sigma2)^2 end sigma=(sigma/period)^(1/2) for i = 1, period-1 do ZZZ=aav+bb*(-(period-1)/2+i) SetValue(index+i-period+1, 3, ZZZ) SetValue(index+i-period+1, 2, ZZZ+sigma*_ddd) SetValue(index+i-period+1, 1, ZZZ-sigma*_ddd) end SetValue(index+0-period+1, 3, nil) SetValue(index+0-period+1, 2, nil) SetValue(index+0-period+1, 1, nil) ---------------------------------- return AMA[index]-sigma*_ddd,AMA[index]+sigma*_ddd, AMA[index] end end ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- function Init() myFF = c_FF() return 3 end function OnCalculate(index) return myFF(index, Settings.period,Settings.deviation) end
require(quantmod) require(xts) require(TTR) require(PerformanceAnalytics) getSymbols('^GSPC', src='yahoo', from = '1900-01-01') monthlyGSPC <- Ad(GSPC)[endpoints(GSPC, on = 'months')] movAvg <- SMA(monthlyGSPC, 10) signal <- monthlyGSPC > movAvg gspcRets <- Return.calculate(monthlyGSPC)Далее построим две системы одна с ошибкой заглядывания, вторая корректная. Суть системы простая, месячная SMA с периодом 10, выше покупаем, ниже продаем.
lookahead <- signal * gspcRets correct <- lag(signal) * gspcRets
compare <- na.omit(cbind(gspcRets, lookahead, correct)) colnames(compare) <- c("S&P 500", "Lookahead", "Correct") charts.PerformanceSummary(compare) rbind(table.AnnualizedReturns(compare), maxDrawdown(compare), CalmarRatio(compare)) logRets <- log(cumprod(1+compare)) chart.TimeSeries(logRets, legend.loc='topleft')
Как было отмечено в предыдущей части – вся суть технического анализа со всеми его индикаторами сводится к пересечению линий. Например, быстрая скользящая средняя пересекает медленную скользящую среднюю; цена пересекает уровень или любую линию какого-нибудь индикатора; RSI пересек уровень 70% и т.д. Ну пусть даже и есть исключения – напишем под них отдельные функции, главное, что наше обобщение будет охватывать 90% случаев ))).
Итак, из чего же состоят сигналы пересечения линий? А состоят они из событий и состояний. Событие – это факт пересечения, состояние – это фактическое расположение линий относительно друг друга.
На рисунке показано, как это выглядит геометрически на примере пересечения скользящих средних. А с точки зрения программирования эти события и состояния удобно представить в виде битовых флагов – сопоставить каждому из них определенный бит числа и если он установлен, то событие или состояние имеется и наоборот. Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:
8=FIX.4.4;9=78;35=A;49=FG;56=tgFhcfx901U05;34=1;52=20160212-11:42:51.812;98=0;108=3000;141=Y;10=047;
Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:
С длиной сообщения разобрались. Теперь про разделитель. Пока в моем скрине это ";". В документациях западных написано что это символ SOH. Чтобы однозначно ответить на этот вопрос, я запустил прилагаемого клиента биржи и сниффером стал перехватывать сообщения между клиентом и биржей. Кстати, программа ведет логи, и их общение выглядит так (зеленое — передача запроса на биржу, красное — ответ от биржи)://Получаем ip сервера
IPAddress ipAddr = IPAddress.Parse(server);
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
//Создаем заголовк
HeaderMessage msHeader = new HeaderMessage
{
BeginString = «FIX.4.4»,
MsgType = «A», //Тип сообщения на установку сессии
SenderCompID = "",
TargetCompID = «FG»,
MsgSeqNum = 1
};
//Создаем сообщение на подключение onLogon
LogonMessage msLogon = new LogonMessage
{
EncryptMethod = 0,
HeartBtInt = 3000,
ResetSeqNumFlag = true
};//Вычисляем длину сообщения
msHeader.BodyLength = msHeader.GetHeaderSize() + msLogon.GetMessageSize();
//Создаем концовку сообщения
TrailerMessage msTrailer = new TrailerMessage(msHeader.ToString() + msLogon.ToString());//Формируем полное готовое сообщение
string fullMessage = msHeader.ToString() + msLogon.ToString() + msTrailer.ToString();
Console.WriteLine(«Сообщение для отправки {0}»,fullMessage);//Создаем сокет для подключения
sSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Подключаемся
sSender.Connect(ipEndPoint);
Console.WriteLine(«Сокет соединился с {0} », sSender.RemoteEndPoint.ToString());
byte[] msg = Encoding.UTF8.GetBytes(fullMessage);
//Отправляем сообщение
int bytesSent = sSender.Send(msg);
Console.WriteLine(«Отправил {0} байт», bytesSent.ToString());
//Получаем ответ от сервера
byte[] bytes = new byte[1024];
int bytesRec = 0;
bytesRec = sSender.Receive(bytes);
Console.WriteLine(«Ответ от сервера: {0}», Encoding.UTF8.GetString(bytes, 0, bytesRec));