Господа кодеры, прошу идейного совета, но с практическими направлениями. Есть задача портировать генерируемые стратегией в NT трейды на OEC Trader. Т.к. я сишарплю, а парни за стенкой ноудджиесят, получить у них качественный совет не получилось.
Текущее решение сделано в режиме хелоуворлда — пишем генерируемые трейды StreamWriter'ом в ТХТ, потом слушаем ТХТ файл
FileSystemWatcher'ом и торгуем в ОЕС.
Когда работает одна стратежка, то все выглядит чин-чин, но ессно когда одновременно работают 2+ стратежки, то при вызове StreamWriter по концу часа несколькими идеями код матерится (файл блаблабла занят другим процессом). Делать многопоточный кастыль для передачи трейдов через ТХТ? Мне кажется это некошерно… Смотрю в сторону WCF… Но там не нашел применимых примеров. Там только калькуляторы, которые я не могу в мозгу перевернуть в то, что мне нужно.
Так вот вопрос — абстрагируясь от NT и ОЕС (они умеют обычный C# без проблем), что лучше выбрать для решения задачи? Если аргументы в пользу ТХТ+Thread, то я готов подвинуться религией. Если в сторону WCF, то пните в нормальный пример. Не калькулятор, а где через службу одна прога отправляет что-то как команду, а вторая прога глотает как команду.
Есть вариант через базу данных, но как «слушать» БД? Timer?
PS Прошу, если что, кодерам с вопросов не ржать. Просто пните правильно, я умею быстро плавать. )
PPS Спросили в личке «Зачем такие сложности». Объясню. В NT есть частный рукописный индюк, который на моем уровне сложно портировать в ОЕС (там синхронизация потоков и прочая высшая математика, к которой я не готов). Вот этот индюк используется для генераций трейдов. Под NT я все написал чЬОтенько, работает как
правительство Германии часы. Все тоже самое сделать под ОЕС нет смысла, проще сменить платформу и брокера. Но частный случай требует частного решения — трейдить в ОЕС полученную идею. Поэтому требуется Solution.sln )))
+ интересно сказано
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 (если надо удобно отлаживать)