[FIXED] TakeProfitStrategy отправляет неправильный ордер
Atom Ответить
23.06.2011


Разобравшись с https://stocksharp.ru/fo...arameter-name--security/
наткнулся на другую проблему:

var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

в момент срабатывания посылает в QUIK заявку с Price = this.TakeProfitThreshold что существенно ниже лимитов рынка и заявка отвергается:

23.06.2011 11:11:00.667 [BS] [BS] [SLS] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00al8; CLIENT_CODE=S#; TRANS_ID=40036888; CLASSCODE=SPBFUT; SECCODE=LKU1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=6;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Цена сделки вне лимита".'.
Parameter name: transactionTxt
at #=q3C5AM$iq8NbweFUGFWK_sU7Vcw7Z$U4vlB2Hc50kdH4=.#=qLgL84qMEfuN5KhECfgmmVtmEjdZHFTZu$WkBCYieTcI=(String #=qgclQ_YrKOL8W24OU8dAXtQ==, OrderStatus& #=q_xaMqAhWgI5tV2SZaQTgUw==, UInt32& #=q9f$NCAgNEA2P_dgSYQX4ag==, Int64& #=qwVmYFYP0ooLLxsTPLQePQg==, String& #=qR6gf_ntTXrn2yuZ9RSMZLQ==)
at StockSharp.Quik.QuikTrader.#=q4vcoB7VlrVy4GatAp8_nMJ6AYLGi58dOpiGwxMBn6UQ=(Order #=qbn0ghccP_Nk8KrwPARMMqA==, TransactionBuilder #=qxOobaox1SG$xe4kqR2_8ZA==)
at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qFNjSJ7N1u5acr$1keu3nHg==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qeubD$wKedi$ApPCf6cLO3rlmhGW$ZeerQHKTqhIth$w=.#=qEsRZe$IDBR8A0j$0apLQ$Q==()
at StockSharp.Algo.Strategies.StrategyRule.#=qm8VBf4GDpEbeabai3WtCE_YuhOxfkovbmj6wDnrDrR0=.#=q0OgKPN9vlMKZZIjBhTnAcw==(Object #=q0xxkRlvbFaZQkdN1O3pBCA==)
at StockSharp.Algo.Strategies.StrategyRule.#=qwurDVpnPEgnquLK$nRLn9OHeSuX4XtP79q8cEhLyYMI=.#=qTxwzPP4CbQG2ITMlWDV$_nA93xIudHPYiyO3YFbU4x4=()
at StockSharp.Algo.Strategies.Strategy.#=qIHDBOzkYlc1Ka0H4Q5rQnQ==(StrategyRule #=qsRkj9dGU3TX31YwcXiQefQ==, Action #=qREJnLkxJR0fsGiLETZNSBg==)


Environment: S# v3.2.2, QUIK

Теги:


Спасибо:




16 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.06.2011
Ответить


Нужен лог.
Спасибо:

President

Фотография
Благотворитель
Дата: 23.06.2011
Ответить


это и был кусок из лога - вот все что касается этого тейкпрофита

Lku1/Lkoh 23.06.2011 11:10:59.827 Trade 340523601 at price 17531 for security LKU1 with volume 1 at 23.06.2011 11:11:00.
Lku1/Lkoh 23.06.2011 11:10:59.846 [BS] Стратегия запущена. - тут создаю батч стратегию с тейк профитом и стоп лоссом - все как по хэлпу
Lku1/Lkoh 23.06.2011 11:10:59.846 [BS] [BS] Стратегия запущена.
Lku1/Lkoh 23.06.2011 11:10:59.850 [BS] [BS] [TPS] Стратегия запущена.
Lku1/Lkoh 23.06.2011 11:10:59.851 [BS] [BS] [SLS] Стратегия запущена.
Lku1/Lkoh 23.06.2011 11:11:00.001 [BS] [BS] [SLS] Регистрация новой заявки на Buy с ценой 6 и объемом 1.
Lku1/Lkoh 23.06.2011 11:11:00.554 Отмена заявки 40036887. - это в основной стратегии я убрал заявку
Lku1/Lkoh 23.06.2011 11:11:00.667 [BS] [BS] [SLS] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00al8; CLIENT_CODE=S#; TRANS_ID=40036888; CLASSCODE=SPBFUT; SECCODE=LKU1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=6;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Цена сделки вне лимита".'.
Parameter name: transactionTxt
at #=q3C5AM$iq8NbweFUGFWK_sU7Vcw7Z$U4vlB2Hc50kdH4=.#=qLgL84qMEfuN5KhECfgmmVtmEjdZHFTZu$WkBCYieTcI=(String #=qgclQ_YrKOL8W24OU8dAXtQ==, OrderStatus& #=q_xaMqAhWgI5tV2SZaQTgUw==, UInt32& #=q9f$NCAgNEA2P_dgSYQX4ag==, Int64& #=qwVmYFYP0ooLLxsTPLQePQg==, String& #=qR6gf_ntTXrn2yuZ9RSMZLQ==)
at StockSharp.Quik.QuikTrader.#=q4vcoB7VlrVy4GatAp8_nMJ6AYLGi58dOpiGwxMBn6UQ=(Order #=qbn0ghccP_Nk8KrwPARMMqA==, TransactionBuilder #=qxOobaox1SG$xe4kqR2_8ZA==)
at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qFNjSJ7N1u5acr$1keu3nHg==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qeubD$wKedi$ApPCf6cLO3rlmhGW$ZeerQHKTqhIth$w=.#=qEsRZe$IDBR8A0j$0apLQ$Q==()
at StockSharp.Algo.Strategies.StrategyRule.#=qm8VBf4GDpEbeabai3WtCE_YuhOxfkovbmj6wDnrDrR0=.#=q0OgKPN9vlMKZZIjBhTnAcw==(Object #=q0xxkRlvbFaZQkdN1O3pBCA==)
at StockSharp.Algo.Strategies.StrategyRule.#=qwurDVpnPEgnquLK$nRLn9OHeSuX4XtP79q8cEhLyYMI=.#=qTxwzPP4CbQG2ITMlWDV$_nA93xIudHPYiyO3YFbU4x4=()
at StockSharp.Algo.Strategies.Strategy.#=qIHDBOzkYlc1Ka0H4Q5rQnQ==(StrategyRule #=qsRkj9dGU3TX31YwcXiQefQ==, Action #=qREJnLkxJR0fsGiLETZNSBg==)
Lku1/Lkoh 23.06.2011 11:11:00.669 [BS] [BS] Стратегия останавливается.
Lku1/Lkoh 23.06.2011 11:11:00.672 [BS] [BS] [TPS] Стратегия останавливается.
Lku1/Lkoh 23.06.2011 11:11:00.675 [BS] [BS] Стратегия остановлена.
Lku1/Lkoh 23.06.2011 11:11:00.675 [BS] [BS] [TPS] Стратегия остановлена.
Lku1/Lkoh 23.06.2011 11:11:00.675 [BS] [BS] [SLS] Стратегия остановлена.


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

Alexander

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


var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?
Спасибо:

President

Фотография
Благотворитель
Дата: 23.06.2011
Ответить


Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


тейк профит был 8
а стоп лосс 6
в обоих случаях аналогичный экспешн
Автор топика
Спасибо:

Alexander

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


President Перейти
Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


8 или 6 - судя по логам в примере вверху было 6



так по этой цене невозможно зарегистрировать заявку - цена вне пределов лимита.
Нижняя возможная цена по лукойлу на сегодня - 16 471.

соответственно если попробовать зарегистрировать заявку с ценой ниже этой - возникает ошибка.
так же и с верхней планкой - нельзя зарегистрировать заявку с ценой выше верхнего лимита цены - 18 575 на сегодня.
Спасибо:

President

Фотография
Благотворитель
Дата: 23.06.2011
Ответить


Alexander Перейти
President Перейти
Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


8 или 6 - судя по логам в примере вверху было 6



так по этой цене невозможно зарегистрировать заявку - цена вне пределов лимита.
Нижняя возможная цена по лукойлу на сегодня - 16 471.

соответственно если попробовать зарегистрировать заявку с ценой ниже этой - возникает ошибка.
так же и с верхней планкой - нельзя зарегистрировать заявку с ценой выше верхнего лимита цены - 18 575 на сегодня.


хм. мне казалось что этот параметр задает дельту от цены трейда а не абсолютное значение цены. по крайней мере я так понял документацию.
вас понял. попробую с абсолютным значением...
Автор топика
Спасибо:

Alexander

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


President Перейти
Alexander Перейти
President Перейти
Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


8 или 6 - судя по логам в примере вверху было 6



так по этой цене невозможно зарегистрировать заявку - цена вне пределов лимита.
Нижняя возможная цена по лукойлу на сегодня - 16 471.

соответственно если попробовать зарегистрировать заявку с ценой ниже этой - возникает ошибка.
так же и с верхней планкой - нельзя зарегистрировать заявку с ценой выше верхнего лимита цены - 18 575 на сегодня.


хм. мне казалось что этот параметр задает дельту от цены трейда а не абсолютное значение цены. по крайней мере я так понял документацию.
вас понял. попробую с абсолютным значением...


Действительно в документации так. Надо править либо доку, либо код. Сделаем фикс, спасибо.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.06.2011
Ответить


President Перейти
Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


тейк профит был 8
а стоп лосс 6
в обоих случаях аналогичный экспешн


Какого типа эти 6 и 8? Я посмотрел по коду - все таки это дельта. Но не понятно, почему не работает. Наверное, ошибка где-то в другом месте.
Спасибо:

President

Фотография
Благотворитель
Дата: 23.06.2011
Ответить


Mikhail Sukhov Перейти
President Перейти
Alexander Перейти
var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);

Чему конкретно равен this.TakeProfitThreshold?


тейк профит был 8
а стоп лосс 6
в обоих случаях аналогичный экспешн


Какого типа эти 6 и 8? Я посмотрел по коду - все таки это дельта. Но не понятно, почему не работает. Наверное, ошибка где-то в другом месте.


decimal TakeProfitThreshold;
decimal StopLossThreshold;
this.TakeProfitThreshold = 8;
this.StopLossThreshold = 6;
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.06.2011
Ответить


President Перейти

decimal TakeProfitThreshold;
decimal StopLossThreshold;
this.TakeProfitThreshold = 8;
this.StopLossThreshold = 6;


А чему равно t.Trade.Price? Вывод сделайте в лог прямо перед созданием стратегии.
Спасибо:

President

Фотография
Благотворитель
Дата: 23.06.2011
Ответить


возможно проблема только со StopLoss.
сейчас два раза подряд TakeProfit отработал нормально - специально вызвать стоплосс пока не получилось - я еще поиграюсь и отпишусь...

а price - вот он выводится первой строкой
Lku1Lku1 22.06.2011 23:28:27.699 Trade 340440040 at price 17664 for security LKU1 with volume 1 at 22.06.2011 23:28:25.
Lku1Lku1 22.06.2011 23:28:27.722 [BS] Стратегия запущена.
Lku1Lku1 22.06.2011 23:28:27.722 [BS] [BS] Стратегия запущена.
Lku1Lku1 22.06.2011 23:28:27.727 [BS] [BS] [TPS] Стратегия запущена.
Lku1Lku1 22.06.2011 23:28:27.727 [BS] [BS] [SLS] Стратегия запущена.
Lku1Lku1 22.06.2011 23:28:27.992 Отмена заявки 84411747.
Lku1Lku1 22.06.2011 23:28:28.212 [BS] [BS] [SLS] Регистрация новой заявки на Buy с ценой 8 и объемом 1.
Lku1Lku1 22.06.2011 23:28:28.747 [BS] [BS] [SLS] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00al8; CLIENT_CODE=S#; TRANS_ID=84411749; CLASSCODE=SPBFUT; SECCODE=LKU1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=8;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Цена сделки вне лимита".'.
Parameter name: transactionTxt
at #=q3C5AM$iq8NbweFUGFWK_sU7Vcw7Z$U4vlB2Hc50kdH4=.#=qLgL84qMEfuN5KhECfgmmVtmEjdZHFTZu$WkBCYieTcI=(String #=qgclQ_YrKOL8W24OU8dAXtQ==, OrderStatus& #=q_xaMqAhWgI5tV2SZaQTgUw==, UInt32& #=q9f$NCAgNEA2P_dgSYQX4ag==, Int64& #=qwVmYFYP0ooLLxsTPLQePQg==, String& #=qR6gf_ntTXrn2yuZ9RSMZLQ==)
at StockSharp.Quik.QuikTrader.#=q4vcoB7VlrVy4GatAp8_nMJ6AYLGi58dOpiGwxMBn6UQ=(Order #=qbn0ghccP_Nk8KrwPARMMqA==, TransactionBuilder #=qxOobaox1SG$xe4kqR2_8ZA==)
at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qFNjSJ7N1u5acr$1keu3nHg==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qeubD$wKedi$ApPCf6cLO3rlmhGW$ZeerQHKTqhIth$w=.#=qEsRZe$IDBR8A0j$0apLQ$Q==()
at StockSharp.Algo.Strategies.StrategyRule.#=qm8VBf4GDpEbeabai3WtCE_YuhOxfkovbmj6wDnrDrR0=.#=q0OgKPN9vlMKZZIjBhTnAcw==(Object #=q0xxkRlvbFaZQkdN1O3pBCA==)
at StockSharp.Algo.Strategies.StrategyRule.#=qwurDVpnPEgnquLK$nRLn9OHeSuX4XtP79q8cEhLyYMI=.#=qTxwzPP4CbQG2ITMlWDV$_nA93xIudHPYiyO3YFbU4x4=()
at StockSharp.Algo.Strategies.Strategy.#=qIHDBOzkYlc1Ka0H4Q5rQnQ==(StrategyRule #=qsRkj9dGU3TX31YwcXiQefQ==, Action #=qREJnLkxJR0fsGiLETZNSBg==)
Lku1Lku1 22.06.2011 23:28:28.749 [BS] [BS] Стратегия останавливается.
Lku1Lku1 22.06.2011 23:28:28.751 [BS] [BS] [TPS] Стратегия останавливается.
Lku1Lku1 22.06.2011 23:28:28.753 [BS] [BS] Стратегия остановлена.
Lku1Lku1 22.06.2011 23:28:28.754 [BS] [BS] [TPS] Стратегия остановлена.
Lku1Lku1 22.06.2011 23:28:28.754 [BS] [BS] [SLS] Стратегия остановлена.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.06.2011
Ответить


President Перейти
возможно проблема только со StopLoss.


А трейлинг-стоп включен?
Спасибо:

President

Фотография
Благотворитель
Дата: 24.06.2011
Ответить


Mikhail Sukhov Перейти
President Перейти
возможно проблема только со StopLoss.


А трейлинг-стоп включен?


а что это такое?Blushing

моя догадка что это только со стоп лосс повторилась - я специально поставил большой порог для тейк профита - чтобы ближе был стоп лосс и вот что вышло:


Lku1Str 24.06.2011 12:17:15.152 Trade 341553398 with direction SELL at price 17521 for security LKU1 with volume 1 at 24.06.2011 12:17:15.
Lku1Str 24.06.2011 12:17:15.165 [BS] Стратегия запущена.
Lku1Str 24.06.2011 12:17:15.165 [BS] [BS] Стратегия запущена.
Lku1Str 24.06.2011 12:17:15.168 [BS] [BS] [TPS] Стратегия запущена.
Lku1Str 24.06.2011 12:17:15.168 [BS] [BS] [SLS] Стратегия запущена.
Lku1Str 24.06.2011 12:17:15.394 [BS] [BS] [SLS] Регистрация новой заявки на Buy с ценой 6 и объемом 1.
Lku1Str 24.06.2011 12:17:16.574 [BS] [BS] [SLS] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00al8; CLIENT_CODE=S#; TRANS_ID=43945351; CLASSCODE=SPBFUT; SECCODE=LKU1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=6;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Цена сделки вне лимита".'.
Parameter name: transactionTxt
at #=q3C5AM$iq8NbweFUGFWK_sU7Vcw7Z$U4vlB2Hc50kdH4=.#=qLgL84qMEfuN5KhECfgmmVtmEjdZHFTZu$WkBCYieTcI=(String #=qgclQ_YrKOL8W24OU8dAXtQ==, OrderStatus& #=q_xaMqAhWgI5tV2SZaQTgUw==, UInt32& #=q9f$NCAgNEA2P_dgSYQX4ag==, Int64& #=qwVmYFYP0ooLLxsTPLQePQg==, String& #=qR6gf_ntTXrn2yuZ9RSMZLQ==)
at StockSharp.Quik.QuikTrader.#=q4vcoB7VlrVy4GatAp8_nMJ6AYLGi58dOpiGwxMBn6UQ=(Order #=qbn0ghccP_Nk8KrwPARMMqA==, TransactionBuilder #=qxOobaox1SG$xe4kqR2_8ZA==)
at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qFNjSJ7N1u5acr$1keu3nHg==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qeubD$wKedi$ApPCf6cLO3rlmhGW$ZeerQHKTqhIth$w=.#=qEsRZe$IDBR8A0j$0apLQ$Q==()
at StockSharp.Algo.Strategies.StrategyRule.#=qm8VBf4GDpEbeabai3WtCE_YuhOxfkovbmj6wDnrDrR0=.#=q0OgKPN9vlMKZZIjBhTnAcw==(Object #=q0xxkRlvbFaZQkdN1O3pBCA==)
at StockSharp.Algo.Strategies.StrategyRule.#=qwurDVpnPEgnquLK$nRLn9OHeSuX4XtP79q8cEhLyYMI=.#=qTxwzPP4CbQG2ITMlWDV$_nA93xIudHPYiyO3YFbU4x4=()
at StockSharp.Algo.Strategies.Strategy.#=qIHDBOzkYlc1Ka0H4Q5rQnQ==(StrategyRule #=qsRkj9dGU3TX31YwcXiQefQ==, Action #=qREJnLkxJR0fsGiLETZNSBg==)
Lku1Str 24.06.2011 12:17:16.575 [BS] [BS] Стратегия останавливается.
Lku1Str 24.06.2011 12:17:16.577 [BS] [BS] [TPS] Стратегия останавливается.
Lku1Str 24.06.2011 12:17:16.579 [BS] [BS] Стратегия остановлена.
Lku1Str 24.06.2011 12:17:16.579 [BS] [BS] [TPS] Стратегия остановлена.
Lku1Str 24.06.2011 12:17:16.579 [BS] [BS] [SLS] Стратегия остановлена.
Lku1Str 24.06.2011 12:17:16.790 Отмена заявки 43945349.
Lku1Str 24.06.2011 12:17:17.327 Отмена заявки 43945352.

PS. было this.StopLossThreshold = 6;
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.06.2011
Ответить


Ошибку нашел. Выложу в 3.2.3
Спасибо: President

President

Фотография
Благотворитель
Дата: 24.06.2011
Ответить


Mikhail Sukhov Перейти
Ошибку нашел. Выложу в 3.2.3


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

critic

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


Я бы не спасибо Мише говорил, а морду набил. Как можно было попутать прайс с дельтой? Если бы биржа не защищала от таких тупых ошибок - человек потерял бы немалые деньги. Как можно использовать такую библиотеку не имея исходных её кодов? Где ещё найдём "случайные" баги, приводящие к убыткам? Да и не похоже это на ошибку. В документации точно написано дельта. На практике библиотека ставит заявку по абсолютному значению. Верим что это ошибка? :) Ну а про закрытый код стратегии дельта-хэджирования и отсутствие её описания я вообще молчу. Всё больше убеждаюсь в том, что библиотеку Михаил выложил не с целью того, чтобы народ деньги зарабатывал :)
Спасибо:


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

loading
clippy