Блог им. Dzam

Получаем данные из Excell для использования в Wealth-lab, Ninjatrader и так далее.

    • 27 июня 2015, 14:43
    • |
    • Dzam
  • Еще
Получаем данные из Excell для использования в Wealth-lab, Ninjatrader и так далее.
Есть задачи, когда необходимо читать внешние данные для работы роботов или индикаторов. Например, можно в Excel лист занести уровни, от которых будет торговать робот. Либо список тикеров, по которым необходимо собирать информацию.



Для чтения данных из Excel нам потребуется библиотека Microsoft.Office.Interop.Excel.dll. В моей Windows7 она расположилась в папке:

C:\Program Files (x86)\Microsoft Office\Office15\DCF

В проект необходимо добавить ссылку на эту библиотеку. Код чтения данных простой:


//Читаем их 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();
    }
} 

Все банально и просто. И можно использовать для различных целей
Оригинал статьи. 

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.

356 | ★30
19 комментариев
Копипаст. Сто пудов.
Вестников, это код из моей недавней работы.
avatar
Dzam, вы сможете написать приблуду к квику чтобы можно было с чарта из ниндзи в него заявки отправлять?
А стакан квиковский в ниндзю трнслировать сможете?

avatar
Growex, Можно. Свяжитесь со мной через контакты, указанные в профиле. Обсудим.
avatar
TRADERS GLOBUS, Ничего не прошу. Совершенно бесплатно делюсь информацией. Нужно — берем, не нужно — мимо идем. :)
avatar
Dzam, да ладно. Не обижайся. Молодец.
TRADERS GLOBUS, Я сам долго искал эту информацию. А тут и для меня будет доступна всегда и может еще кому понадобится.
avatar
Dzam, Спасибо тебе огромное, есть немного забытый проект для которого все расчеты ведутся в Excel, теперь благодаря твоему посту смогу соединить C# и Excel:-)
Твой пост сэкономил мне кучу времени!
avatar
Как это поможет в работе?
avatar
margin, Была задача: брать данные из Excel и по этим данным открывать сделки.
avatar
Dzam, любое действие должно иметь цель и смысл. С какой целью это делать и каков результат?
avatar
Dzam, спасибо за работу — уверен, многим пригодится! Вроде понятно, ещё и с комментариями к коду.
Правда сам перешёл на LibreOffice, поэтому как руки дойдут, придётся изобретать код для Либры. Из-за лени приходится переводить в текстовый файл, и читать из него.
avatar
Yuri, на неделе поищу информацию и выложу описание и код, как читать ods файлы. Самому интересно стало. Так как тоже в основном на OpenOffice
avatar
Если ваш робот требует данных о каких-то там уровнях из экселя то это плохой робот
avatar
Если ваш робот не выдает сигналы в режиме online для скальпинга и требует данные из Excel, нет ничего плохого. Подумываю использовать встроенный в Excel редактор Visual Basic для простых расчетов.
Если кроме Wealth-lab, Ninjatrader понадобятся платформы, можно взять их спокойно здесь: http://getanyplatform.com

Читайте на SMART-LAB:
Фото
Дивиденды и закрытие гэпа: какие акции выбрать этим летом
Дивидендный сезон — время не только получить выплаты, но и заработать на росте акций после закрытия дивидендного гэпа. Мы решили...
Фото
❗️22 мая Совет директоров МГКЛ рассмотрит вопрос рекомендации выплаты дивидендов
ПАО «МГКЛ» сообщает, что 22 мая состоится заседание Совета директоров, на котором будет рассмотрен вопрос рекомендации выплаты дивидендов...
Фото
Скрипт сегодняшнего размещения ТЛК (ruBB-, 250 млн руб., YTM 29,34%)
🔵 Сегодня стартует размещение нового выпуска облигаций ТЛК ruBB- // 250 млн р. // 3 года // купон / доходность: 26% / 29,34%...
Мозговой штурм! Что нового на текущий момент?
Доброго дня, дорогие товарищи! Сегодня у нас в офисе прошел традиционный мозговой штурм. Делюсь  основным.

теги блога Dzam

....все тэги



UPDONW
Новый дизайн