Я довольно новичок в F # и все еще пытаюсь решить, какой должна быть лучшая структура для моей финансовой программы (бэк-тестирование).
Поскольку данные неизменны, я думаю, что «тяжелые» / все-в-одном структуры не могут быть идеальными.
Вот что я пытаюсь достичь:
- Механизм тестирования на истории, который создает стратегию каждые рабочие дни.
Стратегия состоит из нескольких инструментов с последовательностью / списком сделок
(торговая дата / количество / цена)
- Затем я ежедневно запускаю расчет (стоимость, риски и т. Д.) По всем этим позициям для каждого портфеля. Я также добавляю сделки к каждому инструменту каждый день, когда корректирую позицию.
Как я его построил:
- Список или последовательность дат: [D1 .. Dn]
- Список или последовательность портфолио Pi [P1 .. Pn] (с несколькими инструментами). Каждый portoflio начнет свою жизнь в разных Di
- Для каждого портфеля у меня будет несколько ежедневных сделок по инструментам
когда я вычисляю стоимость, прибыль и убытки, риски ...
То, что я использовал сейчас (очень упрощенно):
type Instrument1 = {
some specifications
}
type Instrument2 = {
some specifications
}
type Instrument =
| Inst1 of Instrument1
| Inst2 of Instrument2
type Trade = {
Dt ; DateTime
Qty : float
Price : float }
type Portfolio = {
InitDate : DateTime // one of the Di above
Inst : Instruments
Trades : Trade seq }
type BackTesting =
Dates : DateTime seq
Port : Portfolio seq }
И затем я создаю seq (Даты) seq (Портфолио) из seq (Инструмент), показывающий, скажем, P & L.
Однако для каждого портфеля Pi я перебираю все даты, чтобы проверить, нужно ли мне корректировать портфель, а затем добавить сделку в список сделок, это означает, что каждый день, для каждого портфеля, для каждого инструмента я создание нового BackTesting (не изменяемого). Я полагаю, что такой способ рассуждений намного больше ООП, чем FP, но я немного растерялся из-за правильных шаблонов использования (используемые мной книги F # не очень ясны в отношении структуры данных, которая лучше всего работает для FP - или я не совсем понял их).
Возможно, я не совсем уверен, но если у кого-то есть направление, на которое я должен смотреть (или какая-либо полезная документация / поддержка по этому вопросу), пожалуйста, не стесняйтесь. Большое спасибо за вашу помощь.