У вас не стоит Flash Player
Настройки
#85650 - Mon Sep 02 2019 02:23 PM IPositions.GetShares и работа тех поддержки
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Много раз был свидетелем того как пользователей форума отправляют в тех поддержку. Но недавно стал участником уникального процесса: ТЕХ ПОДДЕРЖКА ОТПРАВИЛА МЕНЯ ЗА ОТВЕТАМИ НА ФОРУМ. Нет, не дали ссылку на уже существующее обсуждение, а "спросите, вдруг помогут"

Итак, в описании метода GetShares мы видим:
double TSLab.Script.IPosition.GetShares (int bar)
Количество лотов в момент времении.
Аргументы
bar номер свечи

на английском: The position shares count for bar by number.

Не вижу возможностей для двоякого понимания описания. У меня получается понять это только одним образом: метод вычисляет размер позиции на указанном баре. Но он этого не делает. Бывает... пишу в тех поддержку, что нашел баг. Скидываю им, по их просьбе, скрипт в котором столкнулся с ошибкой. Затем пишу отдельный простенький скрипт демонстрирующий, что метод не делает того, что написано в описании. В общем, все примерно как обычно. Необычно то, что я получил от тех поддержки в ответ.

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

"здесь основная проблема в понимании, как работает программа.
TSLab ничего не хранит между пересчетами, позиции должны насчитываться с нуля."

Причем тут мое понимание работы программы?! Я выше приводил ВАШЕ описание работы метода. Кроме того в режиме агента tslab корректно отображает входы/выходы в позицию на графике и в окне сделки. С учетом пропущенных входов, проскальзывания и тд. Скорее всего по кешу сделок. То есть у агента есть информация о размере позиции на каждом баре. Да он ее вынужден рассчитывать ее с нуля на каждом пересчете и делает это. А в чем проблема?

2.Так же я получил вот такую ссылку:
" Может быть поможет такое видео Димитрия Власова, он использует C# https://youtu.be/CIq7FIFu4Qw?t=268 "
Это двухчасовая запись вебенара по работе с API для начинающих. Каюсь, не просмотрел видео целиком, но причем здесь это? У меня же вполне конкретная проблема!

3. Также получил вот эту ссылку http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=84408#Post84408 на МОЙ ЖЕ )))) пост о работе с позициями напрямую и контрольной панелью. В тот раз, кстати, говоря тех поддержка мне отлично помогла.
4. Вот такую вот ссылку на работу с позициями на прямую http://support.tslab.ru/index.php?/Knowledgebase/Article/View/17/0/rabota-s-zayavkami-napryamuyu Какое отношение все это имеет к методу GetShares у меня идей нет.

Последние сообщения тех поддержки и мое процитирую целиком:


Тех. поддержка:
"Извините, к сожалению на поддержке сейчас нет человека, который мог бы проконсультировать по АПИ и кто мог бы делать примеры на АПИ.
Я еще раз обратился к разработчикам с вопросом, получил тот же ответ.
"Ответ тот же. TSLab ничего не хранит между пересчетами, позиции должны насчитываться с нуля. "
Задайте вопрос на форуме пожалуйста, полагаю пользователи смогут ответить, кто собирает алгоритмы на АПИ.
http://forum.tslab.ru/ubb/ubbthreads.php?ubb=postlist&Board=11&page=1 "
Я:
"Извините, но это не ответ на вопрос: "Если понимаю описание не верно, скажите, что он должен делать?"
Метод IPositions.GetShares же существует? Какие-то значения возвращает. Ок, я понял описание не верно и он и не должен возвращать размер позиции на указанном баре. Тогда разъясните, пожалуйста, что за значения он возвращает? "

Мое последнее сообщение написано 30.08.2019 вечером. Содержащийся в нем вопрос в таком виде сформулирован в третий раз. Понадобится - спрошу еще. Надеюсь рано или поздно получить ответ, ну и конечно же отпишусь здесь и "буду держать в полном курсе"

С учетом не высокой активности на форуме в целом, а в разделе api особенно, я не рассчитываю, что мне ответит кто-то работавший с IPositions.GetShares Тем более, что этот метод, судя по всему, пока ни как не работает. Но вдруг... Как минимум я высказался, это тоже полезно.

P.S. Много и продуктивно до этого работал с тех поддержкой. Тем печальнее сложившаяся ситуация.

Наверх
#85654 - Mon Sep 02 2019 05:17 PM Re: IPositions.GetShares и работа тех поддержки [Re: OldMo]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8135

На поддержке действительно не хватает человека со знаниями АПИ.

Вы не приложили пример, который отправляли в поддержку.
Вероятно вопрос будет проще понять.

Наверх
#85656 - Tue Sep 03 2019 10:54 AM Re: IPositions.GetShares и работа тех поддержки [Re: ViL]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Спасибо за ответ. Пример скрипта прикладываю.

Получил ответ от тех поддержки цитирую переписку тут. Вдруг и вправду кто-нибудь подскажет в чем дело.

Тех поддержка:
"Добрый день,


Ответ: GetShares - возвращает размер позиции, но не между пересчетами.
Позиция должна быть насчитана с 0.

К сожалению, в данный момент на поддержке нет человека, кто мог быть сделать пример."

Я:
"Во первых по отсутствию человека. Подскажите, пожалуйста, его нет, но он скоро появится (заболел/в отпуске и тд) или такого сотрудника нет в принципе и ждать его появления бессмысленно?

По сути проблемы. Спасибо за ответ. Хотя понятней мне не стало. Если может развернуть его, сделайте это, пожалуйста.

Я запускаю выложенный мной выше скрипт в режиме агента, он открывает позицию на 1 лот и через три бара закрывает ее. При этом на каждом пересчете для любого аргумента (бара) метод GetShares возвращает мне 1.
То есть:
- для открытой в данный момент позиции на барах до ее открытия: 1
- для открытой в данный момент позиции на барах после ее открытия: 1
- для закрытой в данный момент позиции на барах до ее открытия: 1
- для закрытой в данный момент позиции на барах после ее открытия и до закрытия: 1
- для закрытой в данный момент позиции на барах после закрытия: 1"


Attachments
GetShares.cs (85 downloads)
тест.tscript (70 downloads)


Наверх
#85657 - Tue Sep 03 2019 11:14 AM Re: IPositions.GetShares и работа тех поддержки [Re: OldMo]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Вот тут http://support.tslab.ru/index.php?/Knowl...-razmer-pozicii нашел следующее: pos.Shares для неактивной позиции не валиден.
"Вверсии 2.0 стоит использовать pos.GetShares(barNum) чтобы точно понимать размер позиции на конкретной свече."

понятнее не стало (

Наверх
#85658 - Tue Sep 03 2019 01:09 PM Re: IPositions.GetShares и работа тех поддержки [Re: OldMo]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Что именно вам не понятно? GetShares работает для позиций открытых в рамках одного пересчета и до закрытия этой позиции.

Можно сделать скрипт на блоках используя блок "Изменить позицию" и посмотреть, как он работает.

Наверх
#85659 - Tue Sep 03 2019 02:00 PM Re: IPositions.GetShares и работа тех поддержки [Re: Nektodron]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Спасибо за ответ.
Чуть переделал скрипт. Он покупает 1 лот, через три бара увеличивает размер позиции до 2 еще через три бара закрывает позицию.

Вижу следующее:
- после покупки 1 лота на всех барах размер позиции равен 1
- после увеличения размера позиции на барах до открытия позиции выводит 0, 1 там где был 1 лот и 2 там где лотов 2. То есть все соответствует реальности!!!!
-после закрытия позиции на барах до открытия позиции выводит 0, 1 там где был 1 лот и 2 там где лотов 2 и 2 после закрытия позиции. Врет опять.

Странно что GetShares показывает не корректные данные на барах когда позиции не существовало. Еще более странно, что после изменения размера позиции результаты на барах до открытия позиции становятся верными. Мне кажется это выглядит как баг. Ну или в этом есть какой-то смысл от меня скрытый. В любом случае теперь понятно как с этим работать.

Заменил pos.GetShares на такую вот простенькую функцию:
public double RealGetShares(IPosition pos, int bar)
{
if (!pos.IsActiveForBar(bar))
return 0;

return pos.GetShares(bar);
}

судя по моим простеньким тестам подправляет работу GetShares и возвращает корректный размер позиции по номеру бара, что соответствует описанию функции GetShares (мне кажется она все таки забагованная и подобного условия не хватает в самом методе).

Vil, Nektodron спасибо за помощь вы очень помогли.

P.S. Очень раздражал вот этот ответ: "Ответ тот же. TSLab ничего не хранит между пересчетами, позиции должны насчитываться с нуля." Как видно, с нуля ничего насчитывать не надо.







Отредактировано OldMo (Tue Sep 03 2019 02:07 PM)

Наверх
#85660 - Tue Sep 03 2019 02:23 PM Re: IPositions.GetShares и работа тех поддержки [Re: OldMo]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Т.е. проблема в том, что функция не возвращает 0 для свечи, где позиция не активна? Проверим, просто никто ее не использовал в таком режиме, т.к. это не имеет смысла.

Наверх
#85661 - Tue Sep 03 2019 02:39 PM Re: IPositions.GetShares и работа тех поддержки [Re: Nektodron]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Ну, никогда не угадаешь зачем люди будут использовать то, что ты делаешь ))) А в описании ни каких ограничений на применение функции только для открытых позиций нет, как, например, для IPosition.Profit

Мне, кстати говоря, это было нужно для расчета комиссии. Если GetShares(ctx.BarsCount-1) != GetShares(ctx.BarsCount-2) значит была сделка и пора считать комиссию. В текущем виде, само-собой, это не работало.

Наверх


Moderator:  ViL, sar