#47330 - Wed Oct 03 2012 01:44 PM
Расхождения данных в TSlab с реальным счетом!
|
stranger
Registered: Wed Oct 03 2012
Записи: 6
|
У нас возникла такая проблема. Скрипт написанный на API показывает совершенно разные данные на графике с данными которые фигурирую на реальном счете. На реальных торгах скрипт встает в short или в long правильно, но выход из позиции происходит совершенно по непонятным ценам, которых в принципе не должны фигурировать. Т.е. на реальном счете мы выходим из позиции, а на графике показывает, что мы стоим в позиции.
В сложившейся ситуации дорогие форумчане и разработчики помогите разобраться!
Вот часть листинга скрипта.
for (int bar = StartBar; bar < barsCount; bar++) { ShortPos = source.Positions.GetLastActiveForSignal("SN"); LongPos = source.Positions.GetLastActiveForSignal("LN"); if ((ShortPos == null)) { if ((ShortPrice > 0) && (LongPos == null) ) { source.Positions.SellIfLess(bar+1, 1, ShortPrice, "SN"); } ShortPos = source.Positions.GetLastActiveForSignal("SN"); } else { if (CoverPrice > 0) { ShortPos.CloseAtStop(bar+1, CoverPrice, "SX"); ShortPos.CloseAtProfit(bar+1,CloseShortPrice, "TPS"); ctx.Log("TPS = "+ CloseShortPrice.ToString()+" "+ CoverPrice.ToString(),1); } } //============================================================================== // выполнение сигналов для длинной позиции LongPos = source.Positions.GetLastActiveForSignal("LN"); ShortPos = source.Positions.GetLastActiveForSignal("SN"); if ((LongPos == null) ) { if ((BuyPrice > 0) && (ShortPos==null) ) { source.Positions.BuyIfGreater(bar+1, 1, BuyPrice, "LN"); } LongPos = source.Positions.GetLastActiveForSignal("LN"); } else { if (SellPrice > 0) { LongPos.CloseAtStop(bar+1, SellPrice, "LX"); LongPos.CloseAtProfit(bar+1, CloseLongPrice, "TPL"); ctx.Log("TPL = "+ CloseLongPrice.ToString()+" "+ SellPrice.ToString(),1); } } } }
|
Наверх
|
|
|
|
#47332 - Wed Oct 03 2012 02:52 PM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Alaxan]
|
member
Registered: Fri Apr 22 2011
Записи: 137
|
Вот часть листинга скрипта. for (int bar = StartBar; bar < barsCount; bar++) { ShortPos = source.Positions.GetLastActiveForSignal("SN"); LongPos = source.Positions.GetLastActiveForSignal("LN"); if ((ShortPos == null)) { if ((ShortPrice > 0) && (LongPos == null) ) { source.Positions.SellIfLess(bar+1, 1, ShortPrice, "SN"); } ShortPos = source.Positions.GetLastActiveForSignal("SN"); } else { if (CoverPrice > 0) { ShortPos.CloseAtStop(bar+1, CoverPrice, "SX"); ShortPos.CloseAtProfit(bar+1,CloseShortPrice, "TPS"); ctx.Log("TPS = "+ CloseShortPrice.ToString()+" "+ CoverPrice.ToString(),1); } } //============================================================================== // выполнение сигналов для длинной позиции LongPos = source.Positions.GetLastActiveForSignal("LN"); ShortPos = source.Positions.GetLastActiveForSignal("SN"); if ((LongPos == null) ) { if ((BuyPrice > 0) && (ShortPos==null) ) { source.Positions.BuyIfGreater(bar+1, 1, BuyPrice, "LN"); } LongPos = source.Positions.GetLastActiveForSignal("LN"); } else { if (SellPrice > 0) { LongPos.CloseAtStop(bar+1, SellPrice, "LX"); LongPos.CloseAtProfit(bar+1, CloseLongPrice, "TPL"); ctx.Log("TPL = "+ CloseLongPrice.ToString()+" "+ SellPrice.ToString(),1); } } } } Подчеркнутые строки лишние. В реальном времени позиция будет открыта позже. Если ShortPrice, BuyPrice, CoverPrice, CloseShortPrice, SellPrice, CloseLongPrice - локальные переменные, то их значения надо рассчитывать каждый раз. Между пересчетами скрипта их значения не сохраняются.
|
Наверх
|
|
|
|
#47333 - Wed Oct 03 2012 02:56 PM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Gji]
|
stranger
Registered: Wed Oct 03 2012
Записи: 6
|
Спасибо за ответ! Хотелось бы узнать почему система отражает разные данные, в программе показывает что позиция открыта, а на реальном счете, что позиция закрыта, разве данные не синхронизируются.
А глобальных переменных можно хранить данные ? Т.е. описывать и инициализировать в не public virtual void Execute(IContext ctx, ISecurity source)
|
Наверх
|
|
|
|
#47335 - Wed Oct 03 2012 03:07 PM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Alaxan]
|
member
Registered: Fri Apr 22 2011
Записи: 137
|
Хотелось бы узнать почему система отражает разные данные, в программе показывает что позиция открыта, а на реальном счете, что позиция закрыта, разве данные не синхронизируются. Не могу знать, может у Вас два скрипта работает по одному инструменту? Один в шортах, другой в лонгах, совокупная позиция = 0. Может программа виртуальную позицию показывает, т.е. в лаборатории вход есть, а в реале нет - проскальзывания не хватило. Гадать можно долго... А глобальных переменных можно хранить данные ? Т.е. описывать и инициализировать в не public virtual void Execute(IContext ctx, ISecurity source)
Можно, но лучше сначала с текущей проблемой разберитесь, иначе не раз еще об нее споткнетесь.
|
Наверх
|
|
|
|
#47355 - Thu Oct 04 2012 06:56 AM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Gji]
|
stranger
Registered: Wed Oct 03 2012
Записи: 6
|
Работает один скрипт и вход в позицию осуществляется синхронно(одинаковое вхождение в позицию со стороны tslab и реального счета).
А что имеете в виду под проскальзыванием в данном контексте?
|
Наверх
|
|
|
|
#47361 - Thu Oct 04 2012 11:15 AM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Alaxan]
|
stranger
Registered: Wed Oct 03 2012
Записи: 6
|
При тестировании была замечена проблема, мы пытаемся одновременно отправить две заявки по закрытию позиции, когда срабатывает одна из заявок, то другая сразу теряет активность и на оборот.
LongPos.CloseAtStop(bar+1, SellPrice, "LX"); LongPos.CloseAtProfit(bar+1, CloseLongPrice, "TPL");
Можно ли так отправить две заявки ???
Отредактировано Alaxan (Thu Oct 04 2012 11:20 AM)
|
Наверх
|
|
|
|
#47375 - Thu Oct 04 2012 04:56 PM
Re: Расхождения данных в TSlab с реальным счетом!
[Re: Alaxan]
|
Carpal Tunnel
Registered: Thu Oct 23 2008
Записи: 5492
|
|
Наверх
|
|
|
|
|
|