Постов с тегом "Excel": 113

Excel


Как потестить систему в Экселе. Пошагово. Часть 2

Поскольку предыдущую часть мы завершили на том, как задавать условия и цену для открытия/закрытия позиций, то в начале этой части рассмотрим две распространённые ошибки, допускаемые при тестировании систем: открытие позиции внутри гэпа и заглядывание в будущее.



( Читать дальше )

Как потестить систему в Экселе. Пошагово) Часть 1

Для примера тестирования возьмём простую стратегию, описанную несколько лет назад Юрием Иванычем в его живом журнале (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 стандартных девиации. Рабочий таймфрейм — часовики.
Условия для открытия/закрытия позиций:
Лонг. Если свеча закрывается выше верхней границы Боллинджера, на открытии следующей свечи открывается лонг. Если свеча закрывается ниже скользящей средней, на открытии следующей свечи лонг закрывается.
Шорт. Если свеча закрывается ниже нижней границы Боллинджера, на открытии следующей свечи открывается шорт. Если свеча закрывается выше скользящей средней, на открытии следующей свечи шорт закрывается.
Позиция открывается на весь депозит. Полное реинвестирование.



( Читать дальше )

trans2quik - excel appcrash

    • 21 сентября 2015, 18:06
    • |
    • v3Rtex
  • Еще
Товарищи, программисты, подсобите советом пожалуйста!
Пытаюсь наладить сообщение между excel и квиком посредством api trans2quik
Какое то время всё работает нормально, заявки отправляются, коллбеки принимаются, но затем внезапно эксель отваливается с access violation. 
Записал дамп, но разобраться в нем что то не вышлоtrans2quik - excel appcrash

Как выловить метод, порождающий ошибку? Стандартный экселевский дебаг отваливается вместе с самим экселем…

Помогите сделать в Excel звуковой сигнал.

Помогите сделать в Excel звуковой сигнал.









Как сделать в Excel звуковой сигнал при достижении определенного значения.
 

исследуем влияние времени дня и дня недели на своих роботов

Продолжаем анализировать часть своих роботов (24 штуки).
Кхм, хотел по традиции написать «продолжаем сканировать киберпространство в поисках граалей».
Но судя по предыдущей статье нафиг никому граали не сдались.
предыдущая статья из цикла smart-lab.ru/blog/264482.php

исследуем влияние времени дня и дня недели на своих роботов
Пояснения к картинке 1.
Добавляем новые колонки с днём недели и часом дня, делаем сортировку и субтотал.
Отмечу что функция эксель для получения дня недели из даты считает Воскресенье первым днём.

Отмечу что огромные значения на 23 часу — это значит что позиции были в диапозоне от 23часов и до утра, соответсвенно этому набору роботов переносы на ночь помогают.
А в 12-13 часов дня роботы работают в минус в среднем. Что, в принципе, и на глаз заметил, и статьи читал на смартике что в это время часто идёт смена тренда, а большинство роботов ярковыраженные трендовики.

( Читать дальше )

продолжаем шаманить в экселе чтобы сделать мегаробота на основе 24 существующих

предыстория в предыдущей статье  smart-lab.ru/blog/264251.php

Сначала ответим на вопросы.
Нафига столько роботов?
У меня пока мало опыта чтобы построить нормального робота, поэтому приходится такой фигнёй заниматься.
Я экспериментирую с разными роботами, большинство из них пока оказываются лошариками и отключаются вскоре.
Также по глупости был печальный опыт когда у меня было всего пара роботов и одним из них я заработал пару сотен тысяч рублей за 2 недели, и этот-же робот потом их слил за несколько дней. Вот тогда я решил что нужно сильнее диверсифицироваться. Ок, как оказалось такое увеличение роботов не так уж и много мне дало. Сначала я на глаз это заметил, а потом решил посчитать корреляцию и убедился в этом.

С подсчётом корреляций и всяких просадок я не закончил, но пока это далеко не на первом месте. Капитал будет распределяться исходя из полученной информации, но уже понятно что чудо прироста это не даст. Может несколько процентов годовых.

( Читать дальше )

показываю как посчитал корреляцию между своими 24 роботами в excel, картинки, выводы по итогам

Добрый день дорогие читатели.
Неделя торговли вышла не очень удачной, поэтому решил себя наказать — заставил сделать то что давно было лениво.
Посчитать корреляцию и прочую фигню для своих роботов.
Зачем? Долго объяснять, будут ещё части в статье, пока лишь часть покажу, и кое-что оставил на десерт ;)

Итак, роботов запущено на самом деле больше 24, и не у всех по одному коню, так что сами картинки отображают то что мне интересно, а не реальную картину. Если вкратце то используется около 10-15 разных идей, остальные роботы это их вариации. 

К сожалению в Тслабе нет портфельного тестирования, блиииин. Поэтому самому пришлось делать. Вот краткие шаги.
0. Копируем рабочий скрипт.
1. Выбираем период истории в тслабе для скрипта.
2. Во вкладке сделки делаем экспорт в эксель (получается готовый файл со сделками для одного робота, повторяем операцию 24 раза)
3. Делаем 1 скрипт с историей сишки от финам, чтобы сделка открывалась и закрывалась на каждом баре. Выбираем таймфрейм в соответсвиии в желаемой точностью, у меня это 10 мин.  

( Читать дальше )

Получаем данные из 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();
    }
} 

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

....все тэги
UPDONW
Новый дизайн