У вас не стоит Flash Player
Настройки
#67814 - Sat Jan 24 2015 04:16 PM Переворот позиции
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Здравствуйте!
http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=67815#Post67815
В скрипте организован переворот. Например, переворот из лонга в шорт выглядит примерно так:

if (ShortPosRevers == null) // если перевернутой позиции не существует, то...
{
source.Positions.SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter"); // открываем шортовую позицию
}
LongPosFirst.CloseAtStop(bar + 1, СтопЦена, "Lo_FirstEnter_StopLoss"); // закрываем первоначальную лонговую позицию

В последнее время пошла масса ситуаций, когда стоп срабатывает, а переворот нет. Техподдержка винит в этом мой код. Поэтому хочется полностью исключить ситуацию, когда теоретически после стопа переворота может не произойти.
Из той справочной информации, которая имеется в свободном доступе, предполагаю, что единственным возможным таким вариантом является:
СтопЦена = LowPrice

Для метода CloseAtStop вроде достаточно коснуться цены LowPrice, и стоп сработает, а для метода SellIfLess цена должна опуститься до LowPrice минус 1 пункт.

Подскажите те, кто знает API, если я оформлю переворот так:
if (ShortPosRevers == null) // если перевернутой позиции не существует, то...
{
source.Positions.SellIfLess(bar + 1, Количество лотов, СтопЦена + 1 пункт, "Sh_ReversEnter"); // открываем шортовую позицию, если цена ниже СтопЦена + 1 пункт (т.е. коснется СтопЦены)
}
LongPosFirst.CloseAtStop(bar + 1, СтопЦена, "Lo_FirstEnter_StopLoss"); // закрываем первоначальную лонговую позицию, когда цена коснется СтопЦены

возможно ли еще теоретическая ситуация, когда позиция не перевернется?


Отредактировано Andrebot (Sat Jan 24 2015 04:18 PM)

Наверх
#67817 - Sat Jan 24 2015 06:22 PM Re: Переворот позиции [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
не стоит разводить темы в каждом разделе. Администрация может обидеться.

вы шорт делаете условным приказом? зачем? без проскальзывания. исполнение вашего ордера может не произойти. переворота не будет.
_________________________
__


Наверх
#67819 - Sat Jan 24 2015 07:05 PM Re: Переворот позиции [Re: ra81]
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Originally Posted By: ra81
не стоит разводить темы в каждом разделе. Администрация может обидеться.

вы шорт делаете условным приказом? зачем? без проскальзывания. исполнение вашего ордера может не произойти. переворота не будет.


За две одинаковые темы прошу прощения. Просто разместил в двух ветках, в которых могут ответить - ведь не факт, что люди просматривают обе...

Да, шорт делаю условным приказом. Почему? Ну, не придумал другого варианта сделать переворот.

Проскальзывания не поставил, т.к. в торговых настройках (можете посмотреть прикрепленный скрин настроек в ветке переписки с Тех. поддержкой) стоит "Ждать исполнения" = 1 и "Действие автооткрытия" = 2 (это по совету техподдержки). Т.е. хочу, чтобы заявка наливалась по СтопЦене, а если не нальется, то остаток по рынку


Attachments
Торговые настройки (последний вариант).png (315 downloads)


Наверх
#67859 - Sun Jan 25 2015 07:17 AM Re: Переворот позиции [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
используйте лимитные ордера для этого. если хотите чтобы наливало без проскальзывания и работали опции которые вы задали. Остаток по рынку не будет налит вообще. По рынку будет только если вообще ничего не налили. Добор по рынку отсутствует.
_________________________
__


Наверх
#67871 - Sun Jan 25 2015 10:14 PM Re: Переворот позиции [Re: ra81]
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Originally Posted By: ra81
используйте лимитные ордера для этого. если хотите чтобы наливало без проскальзывания и работали опции которые вы задали. Остаток по рынку не будет налит вообще. По рынку будет только если вообще ничего не налили. Добор по рынку отсутствует.


1. Вы наверно не совсем поняли проблему. Самое страшное не то, что не налили в заявку (с этим я могу смириться), а то, что даже заявок в менеджере не видно. Это и смущает

2. Судя по http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=1669 приказ SellIfLess вроде и так является лимитным
Или вы предлагаете конструкцию
if (ShortPosRevers == null) // если перевернутой позиции не существует, то...
{
source.Positions.SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter"); // открываем шортовую позицию
}

заменить на:
if (ShortPosRevers == null & LowPrice[bar] <= СтопЦена) // если перевернутой позиции не существует, то...
{
source.Positions.SellAtPrice(...........); // открываем шортовую позицию
}
Но это не совсем правильно. Я рискую никогда не продать по СтопЦене, т.к. заявку вылетит на один интервал позже...

3. Судя по всему, кроме как задать большое проскальзывание, гарантированно перевернуться не возможно?

Наверх
#67874 - Mon Jan 26 2015 06:31 AM Re: Переворот позиции [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Andrebot
1. Вы наверно не совсем поняли проблему. Самое страшное не то, что не налили в заявку (с этим я могу смириться), а то, что даже заявок в менеджере не видно. Это и смущает

Если в менеджере команд нет сигналов значит не выполняются ваши условия на выставление сигналов. Если не видно заявок в менеджере заявок - видимо заявка не была выставлена. По причине того что условия были таковы.

Originally Posted By: Andrebot

2. Судя по http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=1669 приказ SellIfLess вроде и так является лимитным
Или вы предлагаете конструкцию
if (ShortPosRevers == null) // если перевернутой позиции не существует, то...
{
source.Positions.SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter"); // открываем шортовую позицию
}

заменить на:
if (ShortPosRevers == null & LowPrice[bar] <= СтопЦена) // если перевернутой позиции не существует, то...
{
source.Positions.SellAtPrice(...........); // открываем шортовую позицию
}
Но это не совсем правильно. Я рискую никогда не продать по СтопЦене, т.к. заявку вылетит на один интервал позже...

Видимо вам нужно снова повторить все базовые понятия ТСЛаб, перед тем как запускать в торговлю ваш алгоритм. Иначе, потеряете деньги.
SellIfLess - это условный приказ, он же стоп приказ, он же стоп лимит или как его еще там называют. Приказ с условием. Висит на брокере. После активации превращается в лимитку. Пока идет активация, цена рынка обязательно куда нибудь да уйдет. и если вы хотите продать а цена ушла ниже, вы не продадите. Это базовые понятия торговли в торговом терминале без ТСЛаб.
LowPrice[bar] <= СтопЦена - зачем это условие? выставляйте лимитку по цене и все. Если цена будет выше вашей, вам нальют с плюсом. Если цена будет ниже, вам не нальют вообще и вы не схватите лося. Если хотите обязательного исполнения, ставьте Автовход 1 и вам будут наливать в крайнем случае по маркету.

Originally Posted By: Andrebot
3. Судя по всему, кроме как задать большое проскальзывание, гарантированно перевернуться не возможно?

чтобы гарантированно перевернуться, делайте это по рынку. Все остальные варианты не гарантируют что ваши ордера исполнятся ОБЯЗАТЕЛЬНО по цене вашего переворота. Либо будут расхождения, либо вообще что то не сработает. Это рынок. ТСЛаб тут вообще сбоку.

ПС: и не забывайте о том что брокер может тупо не выполнить ваш условный приказ на продажу, если он был выставлен ВЫШЕ рынка. Просто не случится активация приказа, хотя кажется, что он должен сразу активироваться и исполниться.
_________________________
__


Наверх
#67880 - Mon Jan 26 2015 12:24 PM Re: Переворот позиции [Re: ra81]
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Originally Posted By: ra81

Если в менеджере команд нет сигналов значит не выполняются ваши условия на выставление сигналов. Если не видно заявок в менеджере заявок - видимо заявка не была выставлена. По причине того что условия были таковы.

Да какие условия???
Сегодня. Один и тот же скрипт. Два агента: фСбера и фГазпрома. Вход в лонг. Стоп. А дальше один агент с фСбера переворачивается в шорт, а второй, с фГазпрома - нет (цена все еще идет вниз)!
Единственная теоретическая возможность такой ситуации, это цена дошла до СтопЦены, стала ей равной, но потом на этой свече ни на рубль вниз не пошла:

if (ShortPosRevers == null) // если перевернутой позиции не существует, то...
{
source.Positions.SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter"); // открываем шортовую позицию
}
LongPosFirst.CloseAtStop(bar + 1, СтопЦена, "Lo_FirstEnter_StopLoss"); // закрываем первоначальную лонговую позицию

Не часто ли такое происходить стало именно с фГазпромом?

Originally Posted By: ra81

LowPrice[bar] <= СтопЦена - зачем это условие? выставляйте лимитку по цене и все. Если цена будет выше вашей, вам нальют с плюсом. Если цена будет ниже, вам не нальют вообще и вы не схватите лося. Если хотите обязательного исполнения, ставьте Автовход 1 и вам будут наливать в крайнем случае по маркету.

Мне нужно просто перевернуться, ОДНОВРЕМЕННО со стопом. Ни по лучше цене, ни по худшей, а примерно по той же. Поэтому по смыслу я должен выставить только условный приказ. Который, как мы выяснили, лучше делать по рынку, т.е. с большим проскальзыванием (хотя получим риск не исполнения, если цена вылетит за планку)
При прорыве цены вниз, приказ SellAtPrice не сможет исполниться в нужный момент времени и по цене, приближенной к СтопЦене (+ проскальзывание).
Поэтому только приказ SellIfLess сможет обеспечить нормальный переворот

Наверх
#67891 - Mon Jan 26 2015 05:47 PM Re: Переворот позиции [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Ну вам уже было рекомендовано разобраться с приказами. Упомянутый вами SellIfLess еще раз разберу для вас, если одного раза было недостаточно.

Это условный приказ. Он находится на брокере. Он не выводится на биржу. Работает он следующим образом: когда вы производите
SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter")
то ваша СтопЦена это цена активации приказа. Как только цена на рынке станет равна или меньше, приказ активируется. После активации брокер выводит на рынок лимитный приказ на продажу с ценой равной СтопЦена - проскальзывание, которое у вас равно 0. Следовательно, будет лимитный приказ по цене СтопЦена.
Далее, данный приказ может быть исполнен биржей ТОЛЬКО если цена инструмента равна СтопЦена или выше ее. Почему? Вопросы к бирже.
Отсюда, если цена пошла резко вниз, то ваш приказ не будет исполнен. Потому что цена ушла ниже СтопЦена и не может быть исполнена ваша лимитная заявка. А это ситуация вполне естественная. Пошел прорыв и без отката. У вас, следовательно, должен быть пропущенный вход и сообщение об этом. Если сообщения нет, то значит условия if как то не сработали и вообще не было даже сигнала на условный ордер. Если вы хотите знать точно, сработали или нет, используйте элементарные логи в виде ctx.Log(). Тогда вы сможете аргументированно утверждать что косяк в программе. Пока же это не очевидно.

Надеюсь, это поможет вам обратить внимание на свой код и разобраться в проблеме.
_________________________
__


Наверх
#67916 - Tue Jan 27 2015 11:01 AM Re: Переворот позиции [Re: ra81]
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Originally Posted By: ra81

Это условный приказ. Он находится на брокере. Он не выводится на биржу. Работает он следующим образом: когда вы производите
SellIfLess(bar + 1, Количество лотов, СтопЦена, "Sh_ReversEnter")
то ваша СтопЦена это цена активации приказа. Как только цена на рынке станет равна или меньше, приказ активируется. После активации брокер выводит на рынок лимитный приказ на продажу с ценой равной СтопЦена - проскальзывание, которое у вас равно 0. Следовательно, будет лимитный приказ по цене СтопЦена.
Далее, данный приказ может быть исполнен биржей ТОЛЬКО если цена инструмента равна СтопЦена или выше ее. Почему? Вопросы к бирже.
Отсюда, если цена пошла резко вниз, то ваш приказ не будет исполнен. Потому что цена ушла ниже СтопЦена и не может быть исполнена ваша лимитная заявка. А это ситуация вполне естественная. Пошел прорыв и без отката. У вас, следовательно, должен быть пропущенный вход и сообщение об этом. Если сообщения нет, то значит условия if как то не сработали и вообще не было даже сигнала на условный ордер.

Побольше бы таких комментариев - никакой справки не нужно было бы - серьезно! К сожалению (или к счастью) это мне и так понятно. Проблема в том, что не было даже заявок

Originally Posted By: ra81

Если вы хотите знать точно, сработали или нет, используйте элементарные логи в виде ctx.Log()

Сегодня буду разбираться с вопросом

Наверх
#67917 - Tue Jan 27 2015 11:12 AM Re: Переворот позиции [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Quote:
Побольше бы таких комментариев - никакой справки не нужно было бы - серьезно! К сожалению (или к счастью) это мне и так понятно. Проблема в том, что не было даже заявок

Каждый новый человек хочет чтобы ему все разложили, а сам не пробует даже приложить усилия. Это несколько - огорчает.
_________________________
__


Наверх


Moderator:  ViL, sar