Избранное трейдера goelro
Насколько могут быть прибыльны портфельные инвестиции, если ими правильно управлять? О своем опыте рассказывает Frank Grossman в блоге Seeking Alpha.
Стратегия ротации глобальных рынков использует переключение между 6 разными биржевыми фондами ETF на месячных отрезках. Бэктестирование доходности такой стратегии c 2003 года впечатляет.
В заглавии статьи приведен график доходности стратегии по сравнению с индексом S&P500.
Используются следующие рынки и инструменты:
//Читаем их Excel данные в массив List getParamsFromExcel(string filePath) { //С какой строки начинаем читать данные int start_from_row = 2; //Индекс колонки с Тикером int symbol_index = 1; //Индекс колонки с типом ордера int order_type_index = 2; //Индекс колонки с ценой входа int entry_price_index = 4; //Индекс колонки с ценой стопа int stop_price_index = 5; //Индекс колонки с временем входа int entry_time_index = 7; int current_index = start_from_row; //Текущий символ графика string read_symbol = Bars.Symbol; //Текущий считанный из Excel символ string current_symbol; //Список параметров считанный из Excell List result; result = new List(); //Переменная Excel приложение Excel.Application xlApp; //Переменная рабочая книга Excel.Workbook xlWorkBook; //Переменная рабочий лист Excel.Worksheet xlWorkSheet; //Переменная диапазон Excel.Range range; //Инициализируем переменные xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(filePath); xlWorkSheet = xlWorkBook.Worksheets.get_Item(1); range = xlWorkSheet.UsedRange; //Считываем тикер из Excel current_symbol = (string)(range.Cells[current_index, symbol_index] as Excel.Range).Value2; //Читаем тикеры, пока не наткнемся на пустую строку while(current_symbol != null) { //Если считанный тикер совпадает с тикером графика, на котором запустили робота if(read_symbol == current_symbol) { //Читаем и добавляем параметры ордера result.Add(new OrderParams { ePrice = Convert.ToDouble((range.Cells[current_index, entry_price_index] as Excel.Range).Value2), sPrice = Convert.ToDouble((range.Cells[current_index, stop_price_index] as Excel.Range).Value2), eTime = DateTime.FromOADate((range.Cells[current_index, entry_time_index] as Excel.Range).Value2), pType = ((string)(range.Cells[current_index, order_type_index] as Excel.Range).Value2 == "Short" ? PositionType.Short : PositionType.Long) }); } current_index++; //Считываем очередной тикер current_symbol = (string)(range.Cells[current_index, symbol_index] as Excel.Range).Value2; } //Закрываем рабочую книгу xlWorkBook.Close(true, null, null); //Выходим из приложения xlApp.Quit(); //Уничтожаем созданные объекты releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); return result; } //Уничтожаем переданный объект private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; } finally { GC.Collect(); } }
Определение и основные принципы построения импульсных стратегий изложены в блоге blog.johandp.com. Стратегии очень простые, но являются основой для многих сложных алгоритмов, их элементы используются и в моих роботах. Привожу здесь перевод статьи из блога в целях классификации различных видов стратегий.
Импульс это старейшая особенность, присущая финансовым рынкам. Также это простейшая и одновременно одна из самых запутанных для применения аномалий. Импульс представляет собой тенденцию, при которой активы, демонстрировавшие рост (или падение) в прошлом, продолжат это движение в будущем. Много исследований этой особенности проводилось в академической литературе и было выяснено, что она присутствует на всех рынках и на всей выборке имеющихся данных. И тем не менее, остается много вопросов в использовании импульса для алгоритмической торговли.
Для начала представим, что мы разработали систему, которая за N-промежуток времени показывает очень хороший результат.
И вот мы (отнесем нас к группе А) стартуем с суммой (примерно как наши 10 З.П.) на этом этапе мы еще работаем на дядю.
Дела идут в гору, система пашет, мы выводим денюжки, так же увеличиваем объем торгов.
Дальше больше, торговый робот. БОльше отдыха. Меньше нервов.
И через какой-то промежуток времени, другая группа Б-тредеров, начинает ощущать, что их система начинает сливать.
Они вынуждены, если не деморализованы, изменять свою систему под новые реалий рынка.
И таких групп много.
Выводы: Нет вечной рабочей системы и даже нет, которой хватит одной вам на всю жизнь.
Будьте всегда на чеку, учитесь, тестируйте.
Подозреваю что срок жизни системы зависит от тайм фрейма на котором разработана система, короче внутридневыные стратегий схлапываются быстрее.
Суть системы заключается в следующем:
Используя систему мартингейл, игрок не получает преимущества, он всего лишь перераспределяет свой выигрыш. Игрок проигрывает редко, но помногу, а выигрывает часто, но помалу.