Kazai Mazai
|
Date: 10/28/2013
|
|
|
|
Bond Quote: Нужно качать swarmOps.
Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.
Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.
Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.
Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.
Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.
Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики? Тут же от задач зависит, и от масштабов вычислений. Итерационный, кстати, вещь очень нужная. Особенно полезно было бы, например, делать прогон с большим шагом, а потом уже иметь возможность уменьшить шаг для какого-то определенного диапазона значений для каких-параметров. Если к этому прикрутить еще какую-либо визуализацию, то такой research-tool будет, имхо, полезнее самого навороченного генетического супер-искателя максимального PnL.
|
|
|
|
|
Bond
|
Date: 11/6/2013
|
|
|
|
|
Иван З.
|
Date: 11/6/2013
Если свечи в минутах, то у меня не улетают сделки вот так: Code
private void DrawTrade(IEnumerable<MyTrade> trade)
{
this.GuiAsync(
() =>
CandleChart.ProcessValues(
TimeSpan.FromMinutes(SelectedTimeFrame).GetCandleBounds(trade.Last().Trade.Time).Min,
new Dictionary<IChartElement, object>
{
{_tradeElement, trade.Last()},
}));
}
Сделки передаю так: Code
_trader.NewMyTrades += DrawTrade;
Для других видов свечей (VolumeCandle, TickCandle, и тп) этот код не пойдет.
|
|
|
|
|
Андрей Гунинский
|
Date: 11/8/2013
|
|
|
|
Великолепное начинание! Спасибо Алексей.
В C# коде не профи поэтому особо не помогу, есть ряд идей по поводу адаптивного поиска, то есть «тестирование» на первом этапе не идёт в полном виде с учётом бид-аск разницы, комиссии проскальзываний и прочих давлеющих факторов, а ищется некий фактор валидности закономерности данной ТС при данных параметрах, такое вычисление делается очень быстро и оно очень сильно коррелирует с детальным тестированием, другими словами, такое фаст-вычисление для разряженного пространства параметров даст «разметку», те места которые показали наличие закономерности «пробить» тем же алгоритмом но уже с меньшим шагом в пространстве параметров, 2-3 итерации такой процедуры даст «маску» в параметрическом пространстве(ПП), для тестирования уже «классическим» путём, перебором генетикой и тп. Это в сотни раз быстрее с потерями за пределами 2х сигм валидных вариантов, причем эти патери скорее шум. Такое маскирование ПП можно настраивать в зависимости от например погога и тп. Одно можно сказать что профитные кластера в ПП будут топологически совпадать как если бы вычисления делать детальным тестером, отличия будут только в отрицательную сторону из за издержек. Можно ещё ускорить есть это вычисление сделать выборочным по какому нибуть стохастическому алгоритму.
Думаю никто здесь не будет оспаривать то, что «выбросы» эффективности стратегии в ПП это наверняка полная лажа, используя выше предложенный фэйк можно упустить массу таких выбросов, но вероятность их работоспособности минимальна.
|
|
|
|
|
Bond
|
Date: 11/11/2013
-
|
|
Thanks:
|
|
|
|
|
SavosRU
|
Date: 11/18/2013
|
|
|
|
Bond Хорошая новость! Вышла первая версия Анализатора) Возможности: - Отрисовывает исторические данные, - Строит индикаторы, - Показывает процесс отрисовки и тестирования стратегий, - Можно выбирать свои таймфреймы и временные диапазоны тестирования, - Ведет логирование, - Отображает в процессе тестирования сделки на графиках.
Спасибо, начал разбираться и тестировать. НО... При проверке на данных по RIZ3, закачанных Гидрой из Финама (это я на всякий случай, хотя источник данных тут явно не причем) я наблюдаю следующее: - график и индикаторы рисует, то есть с данными вроде бы работает верно - но сделок не совершено ни одной (стратегия та же, что в исходниках - пока ничего не менял, хотел сначала заставить сам софт работать) - а в логах 900 ошибок одинаковых, мол, заявка не была принята по причине нехватки денег: надо 142 тысячи с чем-то, а у вас НОЛЬ Вот скрин прикрепляю. Там видно сразу две проблемы: - первая самая очевидная - в тестовом кошельке (счете, портфеле) не указана изначальная сумма. - вторая менее очевидная, но все же... если на счету у меня будет меньше, чем "цена" RI в проверяемый момент, то я не смогу совершить сделку даже в том случае, если бы в реальности у меня хватило денег на ГО даже нескольких контрактов. Ведь фактически можно с 15 тысячами рублей торговать одним контрактом RIZ3 сейчас, а программа не даст ни одного контракта купить, пока в кошельке не будет 140-150 тысяч. Вопросы по обеим вышеописанным проблемам: как быть, что делать, где копать и в чем я не прав (если не прав)???
|
|
Thanks:
|
|
|
|
|
SavosRU
|
Date: 11/18/2013
По поводу стартового капитала - уже нашел ответ. Надо в коде сразу после строки var portfolio = new Portfolio {Name = "test"};вписать еще одну строку: portfolio.BeginValue = 300000; // Это мы, допустим, начинаем с тремя сотнями тысяч в кошельке А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи??? То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы??? ДОБАВЛЕНО ПОЗЖЕ:Поскольку вопрос остался, но вопрос явно не по программе уважаемого BOND, а по самому S#.API - то вынес вопрос в отдельную ветку. А за Analyzer - большое спасибо!!!
|
|
Thanks:
|
|
|
|
|
SavosRU
|
Date: 11/19/2013
|
|
|
|
SavosRU А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи??? То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???
Не дождался ответа. В том числе и в расхваленном чате техподдержки на сервере TFS [bored] ... Методом ненаучного тыка нашел решение. Делюсь, если кому интересно. Сначала скриншот результатов - реально вплоть до 10 тысяч на счету (и ниже!) можно еще в тестере купить один контракт RI, если сумма ГО + комиссия не превышает размер оставшихся средств: Теперь что надо было сделать для этого... В коде при создании тестового инструмента надо было дописать две строчки, которые на нижеприведенном листинге имеют номера 9 и 10: Code
//Создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
Id = "RIZ3@FORTS",
Code = "RIZ3",
Name = "RTS-12.13",
MinStepSize = 10,
MinStepPrice = (decimal) 6.50506,
MarginBuy = (decimal) 7615.44,
MarginSell = (decimal) 7615.44,
ExchangeBoard = ExchangeBoard.Forts,
};
Разумеется, кому-то для тестирования не нужно указывать размер ГО с точностью до копейки. Ради Бога - можно просто 7620 указать. Но это в любом случае в двадцать раз меньше, чем пытается использовать тестер без такой поправки кода. Ну и, конечно, у каждого фьючерса при тестировании нужно указывать его собственный размер ГО - это, надеюсь, многие и сами понимают [biggrin] ДОБАВЛЕНО:Кстати, в реальном роботе, который будет работать с QUIK (с другими коннекторами не знаю, не проверял) для того, чтобы он тоже корректно мог работать с ГО (вдруг надо будет кому-то) после стандартного создания трейдера надо еще добавить вот такие строчки: Code
if (!_trader.SecuritiesTable.Columns.Contains(DdeSecurityColumns.MarginBuy))
{
_trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginBuy);
}
if (!_trader.SecuritiesTable.Columns.Contains(DdeSecurityColumns.MarginSell))
{
_trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginSell);
}
В этом случае программа будет прямо из Квика получать корректные данные по требуемому Гарантийному Обеспечению для каждого выбранного инструмента.
|
|
|
|
|
Bond
|
Date: 11/19/2013
Спасибо за исследование! Я до этого еще не добрался. Довожу до ума Оптимизатор и Анализатор. Сериализация и десериализация многомерных массивов массивов объектов меня убивает... Но уже почти допилил. От родного логировпния S# я отказался. Написал свое. Под себя. Переделал полностью график Эквити, а если быть точнее тоже от него отказался и написал свой))) Оказалось он еруеду какую-то считает. Не то что нужно. Вообще приложения притерпели значительные изменения. Не гарантирую, что все выложу, но интересными вещами конечно поделюсь)
П.С. Программа заточена под работу со свечами. С тиками работает на много медленнее. Если вообще работает) Советую скачать мои свечки из хранилища.
|
|
Thanks:
|
|
|
|
|
SavosRU
|
Date: 11/19/2013
С данными проблем нет: и Гидра качает, и Велслаб и свои наработки. Если будет новая версия Анализатора и/или оптимизатора, которые пожелаете сделать публичными - с удовольствием приму участие в тестировании. Особо, конечно, интересует, что за "ерунду" рисует график эквити в этой версии, что пришлось переписывать полностью самому???
|
|
Thanks:
|
|
|
|