facevalue
facevalue личный блог
22 мая 2017, 23:02

Мост NinjaTrader -> OEC Trader

Господа кодеры, прошу идейного совета, но с практическими направлениями. Есть задача портировать генерируемые стратегией в NT трейды на OEC Trader. Т.к. я сишарплю, а парни за стенкой ноудджиесят, получить у них качественный совет не получилось.

Текущее решение сделано в режиме хелоуворлда — пишем генерируемые трейды StreamWriter'ом в ТХТ, потом слушаем ТХТ файл FileSystemWatcher'ом и торгуем в ОЕС.

Когда работает одна стратежка, то все выглядит чин-чин, но ессно когда одновременно работают 2+ стратежки, то при вызове StreamWriter по концу часа несколькими идеями код матерится (файл блаблабла занят другим процессом). Делать многопоточный кастыль для передачи трейдов через ТХТ? Мне кажется это некошерно… Смотрю в сторону WCF… Но там не нашел применимых примеров. Там только калькуляторы, которые я не могу в мозгу перевернуть в то, что мне нужно.

Так вот вопрос — абстрагируясь от NT и ОЕС (они умеют обычный C# без проблем), что лучше выбрать для решения задачи? Если аргументы в пользу ТХТ+Thread, то я готов подвинуться религией. Если в сторону WCF, то пните в нормальный пример. Не калькулятор, а где через службу одна прога отправляет что-то как команду, а вторая прога глотает как команду.

Есть вариант через базу данных, но как «слушать» БД? Timer?

PS Прошу, если что, кодерам с вопросов не ржать. Просто пните правильно, я умею быстро плавать. )

PPS Спросили в личке «Зачем такие сложности». Объясню. В NT есть частный рукописный индюк, который на моем уровне сложно портировать в  ОЕС (там синхронизация потоков и прочая высшая математика, к которой я не готов). Вот этот индюк используется для генераций трейдов. Под NT я все написал чЬОтенько, работает как правительство Германии часы. Все тоже самое сделать под ОЕС нет смысла, проще сменить платформу и брокера. Но частный случай требует частного решения — трейдить в ОЕС полученную идею. Поэтому требуется Solution.sln )))

25 Комментариев
  • Max Xaser
    22 мая 2017, 23:16
    «Просто пните правильно, я умею быстро плавать.»

    + интересно сказано
  • Авентадор
    22 мая 2017, 23:21
    копайте в сторону pipe (именованные и анонимные каналы).
  • Replikant_mih
    22 мая 2017, 23:40
    Посижу тоже послушаю. Софт такой не использую, но ход мысли и решение тоже будет интересно послушать.
  • Lafert
    23 мая 2017, 00:05

    WCF — оверкилл для данной задачи, хотя проблему и решит

    еще варианты (чем выше в списке, тем более адекватный на мой взгляд)
    1)quick&dirty оставить все как есть, но использовать файлик на рамдиске (к примеру, https://www.softperfect.com/products/ramdisk/). Все станет работать шустрее, и ошибки станут реже. Если писать в цикле, пока не запишет, используя try catch, может быть и ок

    2)использовать шаред мемори, к примеру https://sharedmemory.codeplex.com/

    3)использовать zmq

    4)читальщик сделать на простеньком веб сервере типа http://nancyfx.org/ писать в него пост запросами

    5)использовать WebApi2 или Owin

    6)если все таки БД, то in-memory базы вроде redis, aerospike должны зайти ок, их можно опрашивать с очень большой частотой, но это оверкилл тоже

    7)использовать сокеты (TcpClient, TcpListener)

    8)использовать полноценную очередь сообщений (не zmq)

    для сериализации вне зависимости от варианта 1-7 можно использовать protobuf-net (если надо бороться за доли миллисекунд), или Newtonsoft.Json (если надо удобно отлаживать)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн