День добрый Уважаемые господа
Хочу рассказать небольшую историю про то как мы писали софт для сферы трейдинга.
Это история покажет какие ошибки могут возникнуть.
Уверен кому-то будет полезно!
Я не писатель и не могу описать все детали по, этому буду предельно краток
Мы небольшой компанией решили как- то написать софт, для торговли на рынке американских фьючерсов. Дело было где-то в начале 2013 года, в тот момент уже была куча решений по типу TS-Lab и прочей лабуды, но если подумать, то приходит понимание того, что ты зависишь от компании, которая написала платформу для алготрейдинга и их техподдержки, которая нех…я не хочет работать.
И от тех идей, которые в принципе эта платформа позволит реализовать, ведь сначала кажется, что можно все, но наделе серьезную вещь там не реализуешь.
Поэтому, на ум приходит только нанимать программиста и писать свой софт с нуля. Только так ты будешь уверен в софте и безотказной работе, и если будут ошибки, то в этом виноват будешь ты сам.
//Читаем их 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(); } }
На сегодня невозможно получить демо счет и торговать через NinjaTrader новым клиентам брокера АМР ( логин и пароль не приходит на почту от CQG , лично проверил)); однако, для тех кто ранее открывался, будут поддерживать до их логического конца ( слив, вывод, и т. далее), а он будет.., пошлая карма брокера всеж вещь материальная и заразная… и она отразиться на их клиентах.
ИМХО, если начальство АМР хамит своему стратегическому партнеру NinjaTrader™, LLC, что говорить о простых клиентах в случае чего-то..., пошлют нах и плюнут в спину..
Ниже подробности конфликта, ссылка на форумы: Большого Майкла и Горячей линии NinjaTrader.