Для примера тестирования возьмём простую стратегию, описанную несколько лет назад Юрием Иванычем в его живом журнале (http://jc-trader.livejournal.com/tag/%D0%B1%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B4%D0%B6%D0%B5%D1%80).
В основе системы — Боллинджер со следующими параметрами: SMA 70, 2 стандартных девиации. Рабочий таймфрейм — часовики.
Условия для открытия/закрытия позиций:
Лонг. Если свеча закрывается выше верхней границы Боллинджера, на открытии следующей свечи открывается лонг. Если свеча закрывается ниже скользящей средней, на открытии следующей свечи лонг закрывается.
Шорт. Если свеча закрывается ниже нижней границы Боллинджера, на открытии следующей свечи открывается шорт. Если свеча закрывается выше скользящей средней, на открытии следующей свечи шорт закрывается.
Позиция открывается на весь депозит. Полное реинвестирование.




//Читаем их 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();
}
}
Писал коментарий к посту http://smart-lab.ru/blog/262419.php, но он получается очень объемным. Решил немного расширить и оформить отдельным постом. Возможно, кому-то будет полезным.
Опишу немного нестандартные способы автоматизации трейдинга, фильтрации акций и геренации сигналов для частного трейдинга и неглубокой разработки. В моем понимании из одной задачи вытекают другие.
АПИ платформ, TOS и платные программы описывать не буду. Информации и так очень много в свободном доступе. Кто захочет-найдет.
Первый вопрос — где брать маркет дату. Историческую и в удобном формате.
Совсем бесплатно проблематично найти что то стоящее. Никто не дает маркет дату бесплатно. риал тайм можно брать с яху финанс, через их апи и получать, например, в эксель, но история доступна в дневках только. Риал тайм, без истории в тот же эксель можно тянуть из стерлинга через АПИ или через RTD add in, что проще. Другой костыль — брать АПИ фьюжина(можно демку) и качать историю куда-то. Тут уже нужно писать свой код.
Теперь о платных вариантах