Почему double, а не decimal?

Почему double, а не decimal?
Atom
10/31/2010
anothar


Заинтересовал вопрос, почему параметры в double а не decimal, у которого фиксированная точка?


<< < 2 3 4 
Mikhail Sukhov

Avatar
Date: 5/1/2011
Reply


Maxim
Все верно пишите.
Только как раз не хотелось заниматься разбитием процесса на части (загрузки и выгрузки частями).


Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете?

Maxim

Если касательно торгового робота (где я использую S#), то 5.6 гигов необходимо один раз, при первом старте стратегии, что бы просчитать все данные которые, были с начала истории по текущий момент.


А вы пробовали в конце сессии писать результирующие данные, чтобы на следующий день не делать пересчет для 6 гигов тиков?

Maxim

Если касательно бэктестинга, то там я S# не использую. Но там много памяти надо постоянно :)


Давайте разбираться с конкретикой. На какой версии пробовали, сколько занимало, какой период выбирали, сколько тестировалось стратегий и инструментов.

Maxim

Считаю, что если алгоритм с небольшим количеством параметров (у меня ~7) дает хорошие результаты на 10 годах истории, то с большой вероятностью он будет хорошим и в ближайшие пол года. То есть подгонка в некоторых случаях имеет право на жизнь.
Вы не согласны?


Если говорить о тех анализе, я его вообще считаю профанацией.[laugh] А если ближе к деталям, то у нас рынок меняется каждые 2 года и кризисы каждые 5 лет[smile] . С этими факторами российского стиля жизни сложно найти инструменту, который бы был стабилет на стратегии в течении 10 лет. Так что да, я не верю, что алго даст профит хотя бы на ближайшие пол года. Я думаю это плохое тестирование, которые в реальности не показало бы на прошедших 10 годах тот показатель, что был получен на истории.

Вам то удалось самому найти такой алго?
Thanks:

Maxim

Avatar
Date: 5/1/2011
Reply


Mikhail Sukhov

Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете?

Для бектестинга не использую S#. Все свое :)


Mikhail Sukhov

А вы пробовали в конце сессии писать результирующие данные, чтобы на следующий день не делать пересчет для 6 гигов тиков?


Это надо сделать самый первый раз при запуске одной стратегии.
Потом эти данные считаются и записываются онлайн. И стока памяти не надо.

Maxim

Давайте разбираться с конкретикой. На какой версии пробовали, сколько занимало, какой период выбирали, сколько тестировалось стратегий и инструментов.


Я не использую S# для бектестинга )

Maxim

Вам то удалось самому найти такой алго?


Торговый робот работает с нового года.
До этого времени шел поиск золотого грааля :)
Но постоянно возникают косяки, которые мешают оценить результативность алго.
(Стоит уточнить, что в среднем одна-две сделки в неделю)
Так что через месяц другой может смогу дать Вам ответ.
Thanks:

Maxim

Avatar
Date: 5/1/2011
Reply


Mikhail Sukhov

Если говорить о тех анализе, я его вообще считаю профанацией.[laugh]


А это, мне кажется, надо сделать слоганом S# :)
Thanks:

Mikhail Sukhov

Avatar
Date: 5/1/2011
Reply


Maxim
Mikhail Sukhov

Так сделано сейчас в HistoryEmulationTrader. Вы еще что-то на части разбиваете?

Для бектестинга не использую S#. Все свое :)


Значит нужно сделать переход на S# и решить проблему с потреблением памяти.
Thanks:

Mikhail Sukhov

Avatar
Date: 5/1/2011
Reply


Maxim
Mikhail Sukhov

Если говорить о тех анализе, я его вообще считаю профанацией.[laugh]


А это, мне кажется, надо сделать слоганом S# :)


Это мое личное мнение. А так, на S# чего только не делалось (не мной). В том числе и тех анализ.
Thanks:

Maxim

Avatar
Date: 5/2/2011
Reply


Михаил, может сталкивались со следующим?

При выполнении участка кода:
Code

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);
    }


Получается исключение:
Code

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;amp; d1, Decimal&amp;amp; d2)
at System.Decimal.op_Division(Decimal d1, Decimal d2)
at Goricap.Mts.BuySell.&amp;lt;initProfitTimer&amp;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;amp; d1, Decimal&amp;amp; d2)
at System.Decimal.op_Division(Decimal d1, Decimal d2)
at Goricap.Mts.BuySell.&amp;lt;initProfitTimer&amp;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.
Буду благодарен помощи.
Гугление как то не дает результатов.

И при чем тут деление? Не понимаю :)
Thanks:

Mikhail Sukhov

Avatar
Date: 5/2/2011
Reply


Maxim
И при чем тут деление? Не понимаю :)


Подозреваю, что кусов кода и текст ошибки не связаны между собой.
Thanks:

Maxim

Avatar
Date: 5/2/2011
Reply


Mikhail Sukhov
Maxim
И при чем тут деление? Не понимаю :)


Подозреваю, что кусов кода и текст ошибки не связаны между собой.


Я тоже это подозреваю.
Потому что программа просто заканчивается.
Никаких привычных исключений в дебагере не появляется.

Исключение, которое я написал, появляется в Output окне.



Thanks:

Геннадий Ванин (Gennady Vanin)

Avatar
Date: 11/7/2012
Reply


Alexander Mukhanchikov
А ведь ни цены, ни объём не могут быть отрицательными.
Почему бы не использовать для цен тот же самый Decimal, а для объёмов ulong?


Зато их разница - может
Текущая чистая позиция - разница объёмов, может быть отрицательная
"% изменения от закрытия"
Вход. чист. поз.

Разница цены последней к оценке предыдущей сессиии
Разница цены последней к предыдущей сессиии
и т.д.

Половина парметров, которыми я пользуюсь из КВИК, могут быть отрицательными
Thanks:

Alexander

Avatar
Date: 11/7/2012
Reply


Геннадий Ванин (Gennady Vanin)
Alexander Mukhanchikov
А ведь ни цены, ни объём не могут быть отрицательными.
Почему бы не использовать для цен тот же самый Decimal, а для объёмов ulong?


Зато их разница - может
Текущая чистая позиция - разница объёмов, может быть отрицательная
"% изменения от закрытия"
Вход. чист. поз.

Разница цены последней к оценке предыдущей сессиии
Разница цены последней к предыдущей сессиии
и т.д.

Половина парметров, которыми я пользуюсь из КВИК, могут быть отрицательными


И? Мы и используем decimal поэтому.
Thanks:
<< < 2 3 4 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy