← Zurück

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

Разобравшись с http://stocksharp.com/forum/1684/-BUG--BatchStrategy---Value-cannot-be-null--Parameter-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

War dieses Thema hilfreich?

Thema teilen

Kommentare (16)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Нужен лог.

President
President Autor

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

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
Alexander

<mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

President
President Autor

Alexander: <mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

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

Alexander
Alexander

President:

Alexander: <mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

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

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

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

President
President Autor

Alexander:

President:

Alexander: <mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

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

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

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

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

Alexander
Alexander

President:

Alexander:

President:

Alexander: <mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

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

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

President:

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

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

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

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

President
President Autor

Mikhail Sukhov:

President:

Alexander: <mark>var takeProfit = new TakeProfitStrategy(t, this.TakeProfitThreshold);</mark>

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

President
President Autor

возможно проблема только со 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
Mikhail Sukhov

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

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

President
President Autor

Mikhail Sukhov:

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

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

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

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

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
Mikhail Sukhov

Ошибку нашел. Выложу в 3.2.3

President
President Autor

Mikhail Sukhov: Ошибку нашел. Выложу в 3.2.3

спасибо

critic
critic

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