Избранное трейдера zam
Начал вчера работы по реализации "Брошенной стратегии". Хорошо когда есть наработки: взял готовые куски кода, немного доработал под новые нужды, соединил их вместе и уже все готово — почти все необходимые данные передаются в DLL, расставляются по местам и готовы к использованию. С этим почти закончено, остальное будет делаться по ходу пьесы, и по мере необходимости.
С передачей данных закончено, а стратегия даже не начиналась. Система новая и архитектора системы пока не ясна, есть несколько вариантов, выбрать из которых не так просто.
Пока суд, да дело, решил написать о передаче данных из Quik в С++DLL.
О том как сделать простую С++DLL для работы с Quik-Lua написано на сайте https://quikluacsharp.ru здесь и о передаче данных из Lua — здесь и в других материалах сайта. Наверняка многие из вас все это видели и знают, а некоторые это даже применяют. Я это все не использую, не очень разбирался, но, тем не менее, сам сайт
В основе человеческой психологии лежит желание купить то, что подешевело, то, что стоило раньше 100, а сейчас, к примеру, 90. Подобные сделки кажутся очень выгодными, тем более, что в обычной повседневной жизни они, как правило, действительно являются выгодными. Например, выгодно покупать продукты по акциям в магазине со скидкой, выгодно отовариваться на распродажах, покупать товары при ликвидации магазинов и т.д. Именно поэтому многие и на фондовом рынке придерживаются такой же стратегии, покупая акции компаний аутсайдеров, которые падают и, зачастую, падают сильно. Не скрою, что когда-то и я так торговал, но анализ собственных сделок, а также анализ движения цен на акции лидеров рынка и аутсайдеров, заставили меня пересмотреть этот подход.
Если вы уже давно торгуете на фондовом рынке, то наверняка заметили, что одни и те же бумаги растут сильнее рынка, а другие все время стоят на месте или даже падают. Примеров можно привести много: это и ВТБ, который разместился на IPO в 2007 году по 13.6 копеек, а сейчас стоит менее 4 копеек, это и Газпром, который когда-то в 2008 году стоил более 300 рублей, а сейчас, спустя 10 лет, стоит в два раза меньше. Да и каждый из вас без труда может привести множество подобных примеров. В то же время есть бумаги, которые выросли за это время в несколько раз, оставаясь лучшими много лет подряд.
В своем недавнем топике я объяснял, почему шорты лучше торговать на фьючерсе, а лонги на споте. Там же был и предложен метод, как можно, получая безрисковую ставку, торговать шорты по данным спота. Понятно, что все эти рассуждения не учитывали комиссии брокеров. И я в том топике предложил посчитать все За и Против, исходя из реальных условий. Вот и давайте проведем такие расчеты на примере моего личного счета. Что он из себя представляет?
RI – 50%
SBER, GAZP, GMKN, ROSN – по 12.5%
Si – 33%
OФЗ – 33%
Что из себя представляют приведенные %%? Это соотношение между полным лонгом по моим системам в соответствующем эмитенте по номиналу, рассчитанному по цене закрытия предыдущего дня к размеру счета, рассчитанному по тем же ценам. Так как в RI, SBER, GAZP, GMKN, ROSN торгуются по три трендовых торговых идеи, две из которых разбиваются на 2-3 торговых алгоритма с разными параметрами (у одной идеи оптимизируемый параметр один и на нем особо с портфелями не разбежишься) плюс еще в RI торгуется одна контртрендовая система с реальным таймфреймом пара часов. Поэтому в этой части портфеля полный лонг, как и полный шорт, дело нечастое (примерно по 30% времени в году). В Si торгуется одна идея с одним набором параметров, так как при среднем времени в позиции 12 с небольшим дней заморачиваться с портфелями тоже смысла большого не имеет, поэтому тут и полный лонг и полный шорт занимают примерно по 45% времени. Ну и в ОФЗ у меня банальный B&H.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Timers;
using System.Threading;
using XlDde;namespace ConsoleApplication2
{
class Program
{
const string service = «myDDE»;
const string candleSPOT = «SPOT»;
static void Main(string[] args)
{
using (XlDdeServer server = new XlDdeServer(service))
{
server.AddChannel(candleSPOT, new SPOTChannel());
server.Register();Console.WriteLine(«DDE server ready. Press Enter to exit.\n\n»);
Console.ReadLine();
}
}
}
// **********************************************************************
// * Классы DDE каналов с обработчиками данных *
// **********************************************************************
class SPOTChannel: XlDdeChannel
{
//static int time2 = 1000;
static int em = 7;
static int m = 1200;
static int[] NM = new int[em];
static int NMM = 0;
static int LastMinute = 0;
static int mm = 1638400;
static double[] Price_trade = new double[mm];
string[] EM_trade = new string[mm];
static int[] Time_trade_I = new int[mm];
static int[] Volume_trade = new int[mm];
static int[,] Time = new int[em,m];
static double[,] O = new double[em,m];
static double[,] H = new double[em,m];
static double[,] L = new double[em,m];
static double[,] C = new double[em,m];
static double[,] V = new double[em,m];
protected override void ProcessTable(XlTable xt)
{
//int time3 = 1000;
int[] nach = new int[em];
int nach1 = 0;
int i = 0;
int j = 0;
int s = 0;
int curHour = 0;
int curMin = 0;
int curDay = 0;
int curSec = 0;
int curDay_1 = 0;
string name;
string[] bf;
string[] EM = new string[em];
DateTime moment;
string[] Time_trade = new string[mm];
Первая часть лежит тут… smart-lab.ru/blog/155810.php… думал частично переписать, но решил просто добавить...
1 Основа торговли
Трейдинг — это прогнозирование будущих цен и торговля этого прогноза с целью извлечения прибыли.
Прогнозирование будущих цен можно делать на основе различных методов и способов, например: фундаментального анализа, новостей, цены, объемов, элиотов и прочих методов или их сочетания. В любом случае выделяется параметр наблюдения или ряд параметров на основании которых принимается решение об исходе прогноза.
В конечном итоге, исходы прогноза всего 2 — тренд и контртренд. В случае тренда мы делаем вывод что параметр наблюдения достаточно изменился, чтоб движение продолжилось, а для контртенда на основаниии такого же изменения параметра мы сделаем вывод что движение прекратится и сменится на противоположное.