Стоп сработал сразу после входа
Atom Ответить
07.03.2013


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



Теги:


Спасибо:




21 Ответов
MenDel

Фотография
Дата: 09.03.2013
Ответить


Не могу понять, откуда взялись эти цифры?
2013/03/07 10:09:32.536|Warning|SSLS_RIH3@RTS_BP8536-RF-02|Отправляю заявку на выход по стопу уровень = 153390,00
2013/03/07 10:09:32.537| |SSLS_RIH3@RTS_BP9312-RF-01|Цена текущей NULL и лучшей 158510.
2013/03/07 10:09:32.537| |SSLS_RIH3@RTS_BP9312-RF-01|Лучший бид 153350 и лучший аск 153450.

И что означает Цена текущей NULL и лучшей 158510.
Стоп заявка работает же по последней сделке, если цены выше 153390 не было каким макаром он решил что она была?

График
Автор топика
Спасибо:

MenDel

Фотография
Дата: 26.03.2013
Ответить


Не могу понять че за фигня, то стоп сразу срабатывает, а сегодня тупо тейк ваще не сработал.
Логи ничего не показывают. Моей ошибки в коде нет. Но раз в 1-2 недели обязательно со стопом и тейком косяк случается, притом что код то я не меняю.
Мож подскажите куда лог можно засунуть чтоб найти причину?
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 26.03.2013
Ответить


По логу не понятно, что сработало, что не сработало, почему должно было сработать.
Спасибо:

MenDel

Фотография
Дата: 26.03.2013
Ответить


esper Перейти
По логу не понятно, что сработало, что не сработало, почему должно было сработать.




Тейк должен был сработать в 15:30. Но он не сработал по какой то причине, это уже не в первый раз так.
В 16:32 я руками выставил тейк (к этому моменту он уже в стоп превратился).

Код ТэйкПрофит стратегия, СтопЛосс почти такая же

Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 26.03.2013
Ответить


Смотрели, почему у вас NeedQuoting в это время возвращает 0?
Спасибо:

MenDel

Фотография
Дата: 26.03.2013
Ответить


esper Перейти
Смотрели, почему у вас NeedQuoting в это время возвращает 0?


В этот раз не записалось. Я эту строку забыл раскомментировать.
Буду все записывать при каждом изменение цены: GetProtectivePrice(), BestPrice, Lastprice, currentPrice, currentVolume, acceptablePriceRange, newVolume.

При следущем косяке лог выложу.

Еще кстати во время клиринга стоп или тейк выставляется,
пришлось писать
Код
if (!ExchangeBoard.Forts.IsTradeTime(LoggingHelper.Now))
            {
                return 0;
            }
Автор топика
Спасибо:

MenDel

Фотография
Дата: 28.03.2013
Ответить




Вот сегодня сработал стоп сам по себе. Причем не по всей позиции, а только по 3 контрактам.

Я не могу понять как так получается.
28.03.2013 16:38:24 Отправляю заявку на выход по стопу уровень = 138760.00
Чтоб это сообщение выскочило, должно сработать условие



Но BestPrice не было меньше price! Как так?!


А этот код мог запутаться? Если вторая стратегия в противоположной позиции была?
Автор топика
Спасибо:

MenDel

Фотография
Дата: 03.04.2013
Ответить




03.04.2013 20:58:08 GetProtectivePrice = 10 BestPrice = 137000 Lastprice = 137000 currentPrice = 0 currentVolume = 0 acceptablePriceRange = {Min:137000 Max:137000} newVolume = 3
03.04.2013 20:58:08 return GetProtectivePrice = 10 BestPrice = 0 Lastprice = 137000 currentPrice = 0 currentVolume = 0 acceptablePriceRange = {Min:137000 Max:137000} newVolume = 3
03.04.2013 20:58:08 Отправляю заявку на выход уровень = 10

Как могло так получиться? Как BestPrice оказался равным 0 в середине кода?
Да к тому ж у меня написано if (BestPrice == Lastprice || currentPrice != 0) return 0; А BestPrice = LastPrice. Значит должно вернуться 0. И все.
Делаю вывод, BestPrice изменилось после вывода в Debug и до проверки if (BestPrice == Lastprice || currentPrice != 0)
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


Может надо лочить?
Спасибо:

MenDel

Фотография
Дата: 03.04.2013
Ответить


VassilSanych Перейти
Может надо лочить?


Если б я знал где его вставить.
И кстати если lock не будет справляться с потоком сделок, то стратегия начнет запаздывать.
Тут надо если он пропустил сделку, то считай он её пропустил, а не ставил в очередь.
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


Возможно глюки коннектора, и надо просто нулевые значения отфильтровывать.
Спасибо:

MenDel

Фотография
Дата: 03.04.2013
Ответить


VassilSanych Перейти
Возможно глюки коннектора, и надо просто нулевые значения отфильтровывать.


Может быть, но мне это на данном этапе не под силу.
Дальше своего кода, я ничего изменить не могу.
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


MenDel Перейти
VassilSanych Перейти
Может надо лочить?


Если б я знал где его вставить.
И кстати если lock не будет справляться с потоком сделок, то стратегия начнет запаздывать.
Тут надо если он пропустил сделку, то считай он её пропустил, а не ставил в очередь.

Если состояние хранится в полях общего экземпляра класса, то лочить надо обязательно.
Либо переписывать на полный stateless (но при обращении к API лочить всё-равно придётся, ибо он не тредсэйф ни разу)
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


MenDel Перейти
VassilSanych Перейти
Возможно глюки коннектора, и надо просто нулевые значения отфильтровывать.


Может быть, но мне это на данном этапе не под силу.
Дальше своего кода, я ничего изменить не могу.

У себя и отфильтровывать. По принципу: вот это берём, а вот это лажа какая-то - игнорируем.

Спасибо:

MenDel

Фотография
Дата: 03.04.2013
Ответить


VassilSanych Перейти

Если состояние хранится в полях общего экземпляра класса, то лочить надо обязательно.
Либо переписывать на полный stateless (но при обращении к API лочить всё-равно придётся, ибо он не тредсэйф ни разу)


А куда лок вставить?
Тут надо чтоб весь класс в локе был.
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


MenDel Перейти

А куда лок вставить?
Тут надо чтоб весь класс в локе был.

При чём тут класс? Лочатся действия. В вашем случае, наверное, тело NeedQuoting.
Хотя, не вижу откуда там нулю взяться, но для порядку работы с LastPrice не помешает.

Спасибо: MenDel

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


MenDel Перейти
Тут надо если он пропустил сделку, то считай он её пропустил, а не ставил в очередь.

Ну это просто:
- оборачиваем действие в Action
- кладём в очередь ConcurrentQueue
- дальше с локом: Dequeue её в цикле до конца и последнее действие выполняем
Спасибо:

MenDel

Фотография
Дата: 03.04.2013
Ответить


VassilSanych Перейти
MenDel Перейти
Тут надо если он пропустил сделку, то считай он её пропустил, а не ставил в очередь.

Ну это просто. Я тут даже пример приводил:
- складываем действия в очередь ConcurrentQueue
- другим потоком её Dequeue в цикле до конца и последнее действие, так и быть, выполняем



Ни туя не понял)

Что такое ConcurrentQueue?
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


MenDel Перейти
Что такое ConcurrentQueue?

Новый класс такой в .net. Потокобезопасная очередь. в MSDN описан

Спасибо: MenDel

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


А можно и без очереди - просто класть Action в поле до лока, а в локе: выбирать из поля, если не нулевое - выполнять, и обнулять поле.
Это если порядок не важен. Потому что выполняться будет в таком случае только первое действие, а те, которые ждали, - отбрасываться.
С очередью выполняется первое и последнее.
Спасибо:

VassilSanych

Фотография
Дата: 03.04.2013
Ответить


Но это вообще-то так. Для спорта. :)
Метод простой. Лочиться будут от силы 2-3 параллельных запуска.
Чтоб там реальная пробка была, надо на два-три порядка более тяжёлый код наваять :)
Так что обычного лока хватит.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy