Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,456+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,456+ Tradern und Entwicklern✦
Обнаружил ошибку в protected методе OnReRegisterOrder в PlazaTrader. Неправильно выставляется обьем заявки и режим. Исходники плазатрейдера у меня достаточно древние, может уже пофиксили, новых исходников в открытом доступе не нашел, чтоб проверить.
Kommentare (15)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
FiNick:
Обнаружил ошибку в protected методе OnReRegisterOrder в PlazaTrader. Неправильно выставляется обьем заявки и режим. Исходники плазатрейдера у меня достаточно древние, может уже пофиксили, новых исходников в открытом доступе не нашел, чтоб проверить.
Да, не изменилось.
Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов.
Это происходит потому что в момент перерегистрации мой робот может еще не знать, что баланс изменился, и послать команду Reregister со старым обьемом, а к тому моменту как команда придет на биржу баланс старой заявки изменится. Эта проблема исчезает, если посылать транзакцию с regime 0, то есть в вашем коде написать SetMoveMode(true). Но тогда иногда будет получаться, что в таблице "заявки" новые заявки (отправленные с помощью ReRegister) будут иметь один обьем, а фактически по ним будет проходить другой обьем. Т.е. в regime 0 неважно какой обьем поставить новой заявке, ей на бирже все равно присвоят обьем равный остатку по старой заявке.
FiNick:
Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов.
Т.е. вы хотите добрать тот же объем но по другой цене? Зачем тогда изменять объем? Пусть он будет равен объему предыдущей заявки, а не балансу.
FiNick:
Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов.
Т.е. вы хотите добрать тот же объем но по другой цене? Зачем тогда изменять объем? Пусть он будет равен объему предыдущей заявки, а не балансу.
Вам не кажется нелогичным, что я выставляю один обьем, а фактически у меня уходит другой обьем. Почему бы не написать метод, где точно сказано, что ререгистриться заявка будет на остаток, и в параметрах вообще не указывать никакой обьем.
Я три дня воевал с этим ререгистром, офигевал от того как криво он работает и ошибок всяких, пока не залез в исходники и документацию по плазе.
FiNick:
Почему бы не написать метод, где точно сказано, что ререгистриться заявка будет на остаток
это фактически regime = 3 выходит
Такс, а вот про режим 3 я не читал раньше. Это что получается, самый нужный режим у вас не реализован?
Короче, странно, но эксперимент показывает, что в режиме 0 заявки ререгистрируются на остаток (то что по документации должно происходить в режиме 3).
Может мы просто неправильно понимаем фразу "0 – не менять объёмы заявок", ведь по логике, кому может понадобиться режим, когда вы ставите заявку с обьемом 20, из него уходит 7, а вы переставляете эту заявку опять с тем же обьемом 20 и в итоге набираете 27?=)
Тут вот эту тему перетирают, но как-то не ясно все равно. Надо еще экспериментировать.
SetMoveMode(oldOrder.Volume == newOrder.Volume)
``` - так вообще не правильно.
Думаю надо плазатрейдеру опцию сделать: режим перерегистрации, либо сделать у метода ReRegisterOrder параметр режим, а если не указан по умолчанию 1 ставить.
Alexander Mukhanchikov:
можно подробнее с цифрами объёма пример привести?
Ставите заявку с обьемом 20, уходит 7, остается 13, ререгистрим заявку выставляя обьем 20 (т.е. внутри плазатрейдера транзакции выставится режим 0). В результате ререгистрации выставится заявка с обьемом 13, а не 20 как мы указали.
Alexander Mukhanchikov:
можно подробнее с цифрами объёма пример привести?
Ставите заявку с обьемом 20, уходит 7, остается 13, ререгистрим заявку выставляя обьем 20 (т.е. внутри плазатрейдера транзакции выставится режим 0). В результате ререгистрации выставится заявка с обьемом 13, а не 20 как мы указали.
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (15)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
текущая реализация. вроде ничего не меняли.
Да, не изменилось. Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов. Это происходит потому что в момент перерегистрации мой робот может еще не знать, что баланс изменился, и послать команду Reregister со старым обьемом, а к тому моменту как команда придет на биржу баланс старой заявки изменится. Эта проблема исчезает, если посылать транзакцию с regime 0, то есть в вашем коде написать SetMoveMode(true). Но тогда иногда будет получаться, что в таблице "заявки" новые заявки (отправленные с помощью ReRegister) будут иметь один обьем, а фактически по ним будет проходить другой обьем. Т.е. в regime 0 неважно какой обьем поставить новой заявке, ей на бирже все равно присвоят обьем равный остатку по старой заявке.
Это очень интересно. Согласен.
Лучше когда обьем не указан тогда на остаток , а если указан то на тот что указан. Зачем делать лишние транзакции. Параметр обьема нужно сохранить .
это фактически regime = 3 выходит
если oldOrder.Volume == newOrder.Volume - это regime = 0
можете более подробно расписать в какой момент у вас возникает проблема, в чём она проявляется и как вы предлагаете её фиксить?
Такс, а вот про режим 3 я не читал раньше. Это что получается, самый нужный режим у вас не реализован? Короче, странно, но эксперимент показывает, что в режиме 0 заявки ререгистрируются на остаток (то что по документации должно происходить в режиме 3). Может мы просто неправильно понимаем фразу "0 – не менять объёмы заявок", ведь по логике, кому может понадобиться режим, когда вы ставите заявку с обьемом 20, из него уходит 7, а вы переставляете эту заявку опять с тем же обьемом 20 и в итоге набираете 27?=)
Тут вот эту тему перетирают, но как-то не ясно все равно. Надо еще экспериментировать.
можно подробнее с цифрами объёма пример привести?
Спасибо, будет фикс
Фикс сделан в ветке 4.1
А можно ссылку? не могу найти
stocksharp.codeplex.com