Mikhail Sukhov
|
Дата: 01.05.2011
|
|
|
|
Maxim Все верно пишите. Только как раз не хотелось заниматься разбитием процесса на части (загрузки и выгрузки частями). Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете? Maxim Если касательно торгового робота (где я использую S#), то 5.6 гигов необходимо один раз, при первом старте стратегии, что бы просчитать все данные которые, были с начала истории по текущий момент.
А вы пробовали в конце сессии писать результирующие данные, чтобы на следующий день не делать пересчет для 6 гигов тиков? Maxim Если касательно бэктестинга, то там я S# не использую. Но там много памяти надо постоянно :)
Давайте разбираться с конкретикой. На какой версии пробовали, сколько занимало, какой период выбирали, сколько тестировалось стратегий и инструментов. Maxim Считаю, что если алгоритм с небольшим количеством параметров (у меня ~7) дает хорошие результаты на 10 годах истории, то с большой вероятностью он будет хорошим и в ближайшие пол года. То есть подгонка в некоторых случаях имеет право на жизнь. Вы не согласны?
Если говорить о тех анализе, я его вообще считаю профанацией.[laugh] А если ближе к деталям, то у нас рынок меняется каждые 2 года и кризисы каждые 5 лет[smile] . С этими факторами российского стиля жизни сложно найти инструменту, который бы был стабилет на стратегии в течении 10 лет. Так что да, я не верю, что алго даст профит хотя бы на ближайшие пол года. Я думаю это плохое тестирование, которые в реальности не показало бы на прошедших 10 годах тот показатель, что был получен на истории. Вам то удалось самому найти такой алго?
|
|
Спасибо:
|
|
|
|
|
Maxim
|
Дата: 01.05.2011
Mikhail Sukhov Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете?
Для бектестинга не использую S#. Все свое :) Mikhail Sukhov А вы пробовали в конце сессии писать результирующие данные, чтобы на следующий день не делать пересчет для 6 гигов тиков?
Это надо сделать самый первый раз при запуске одной стратегии. Потом эти данные считаются и записываются онлайн. И стока памяти не надо. Maxim Давайте разбираться с конкретикой. На какой версии пробовали, сколько занимало, какой период выбирали, сколько тестировалось стратегий и инструментов.
Я не использую S# для бектестинга ) Maxim Вам то удалось самому найти такой алго?
Торговый робот работает с нового года. До этого времени шел поиск золотого грааля :) Но постоянно возникают косяки, которые мешают оценить результативность алго. (Стоит уточнить, что в среднем одна-две сделки в неделю) Так что через месяц другой может смогу дать Вам ответ.
|
|
Спасибо:
|
|
|
|
|
Maxim
|
Дата: 01.05.2011
Mikhail Sukhov Если говорить о тех анализе, я его вообще считаю профанацией.[laugh]
А это, мне кажется, надо сделать слоганом S# :)
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 01.05.2011
Maxim Mikhail Sukhov Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете?
Для бектестинга не использую S#. Все свое :) Значит нужно сделать переход на S# и решить проблему с потреблением памяти.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 01.05.2011
Maxim Mikhail Sukhov Если говорить о тех анализе, я его вообще считаю профанацией.[laugh]
А это, мне кажется, надо сделать слоганом S# :) Это мое личное мнение. А так, на S# чего только не делалось (не мной). В том числе и тех анализ.
|
|
Спасибо:
|
|
|
|
|
Maxim
|
Дата: 02.05.2011
|
|
|
|
Михаил, может сталкивались со следующим? При выполнении участка кода: Код ring _query = "SELECT HistoryId, Money, Paper FROM {0} WHERE Date = (SELECT MAX(DATE) FROM {0} )"; _query = String.Format(_query, sqlTableName); SqlCommand _sqlCommand = new SqlCommand(_query, _sqlConn);
using (SqlDataReader _dataReader = _sqlCommand.ExecuteReader()) while (_dataReader.Read()) { HistoryId = _dataReader.GetInt64(0); Money = _dataReader.GetDecimal(1); Paper = _dataReader.GetInt32(2); }
Получается исключение: Код A first chance exception of type 'System.DivideByZeroException' occurred in mscorlib.dll System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>Mts.vshost.exe</AppDomain><Exception><ExceptionType>System.DivideByZeroException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Attempted to divide by zero.</Message><StackTrace> at System.Decimal.FCallDivide(Decimal&amp; d1, Decimal&amp; d2) at System.Decimal.op_Division(Decimal d1, Decimal d2) at Goricap.Mts.BuySell.&lt;initProfitTimer&gt;b__c(Object data) in G:\C\Development\MTS_Decimal\Programm\BuySellClass.cs:line 333 at System.Threading._TimerCallback.TimerCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading._TimerCallback.PerformTimerCallback(Object state)</StackTrace><ExceptionString>System.DivideByZeroException: Attempted to divide by zero. at System.Decimal.FCallDivide(Decimal&amp; d1, Decimal&amp; d2) at System.Decimal.op_Division(Decimal d1, Decimal d2) at Goricap.Mts.BuySell.&lt;initProfitTimer&gt;b__c(Object data) in G:\C\Development\MTS_Decimal\Programm\BuySellClass.cs:line 333 at System.Threading._TimerCallback.TimerCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading._TimerCallback.PerformTimerCallback(Object state)</ExceptionString></Exception></TraceRecord>
Исключения появляется при исполнении using (SqlDataReader _dataReader = _sqlCommand.ExecuteReader()) Раньше было Double, все работало. Ошибка появилась после перехода на Decimal. Буду благодарен помощи. Гугление как то не дает результатов. И при чем тут деление? Не понимаю :)
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 02.05.2011
Maxim И при чем тут деление? Не понимаю :) Подозреваю, что кусов кода и текст ошибки не связаны между собой.
|
|
Спасибо:
|
|
|
|
|
Maxim
|
Дата: 02.05.2011
Mikhail Sukhov Maxim И при чем тут деление? Не понимаю :) Подозреваю, что кусов кода и текст ошибки не связаны между собой. Я тоже это подозреваю. Потому что программа просто заканчивается. Никаких привычных исключений в дебагере не появляется. Исключение, которое я написал, появляется в Output окне.
|
|
Спасибо:
|
|
|
|
|
Геннадий Ванин (Gennady Vanin)
|
Дата: 07.11.2012
Alexander Mukhanchikov А ведь ни цены, ни объём не могут быть отрицательными. Почему бы не использовать для цен тот же самый Decimal, а для объёмов ulong? Зато их разница - может Текущая чистая позиция - разница объёмов, может быть отрицательная "% изменения от закрытия" Вход. чист. поз. Разница цены последней к оценке предыдущей сессиии Разница цены последней к предыдущей сессиии и т.д. Половина парметров, которыми я пользуюсь из КВИК, могут быть отрицательными
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 07.11.2012
Геннадий Ванин (Gennady Vanin) Alexander Mukhanchikov А ведь ни цены, ни объём не могут быть отрицательными. Почему бы не использовать для цен тот же самый Decimal, а для объёмов ulong? Зато их разница - может Текущая чистая позиция - разница объёмов, может быть отрицательная "% изменения от закрытия" Вход. чист. поз. Разница цены последней к оценке предыдущей сессиии Разница цены последней к предыдущей сессиии и т.д. Половина парметров, которыми я пользуюсь из КВИК, могут быть отрицательными И? Мы и используем decimal поэтому.
|
|
Спасибо:
|
|
|
|