Общие вопросы по разработке > Торговые действия

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Торговые действия

Непрочитанное сообщение BugsDigger » 04 фев 2019, 19:01

Привет всем.

Как-то неясно написано в документации:
EnterLong(Q) – закрыть текущий шорт (если он есть) и открыть позицию лонг на Q штук инструмента, если оно не превышает разрешенное стратегией количество.


При наличии шорта вроде понятно, после EnterLong(15) позиция будет 15.
Ну а если уже есть лонг, скажем, 10 шт., то какова будет согласно этому описанию позиция после EnterLong(15) ? 15? или 25=10 старых+15 новых?..

Вообще, что-то не вижу действий просто Buy(Nшт.) и Sell(Nшт.), т.е. безотносительно текущей позиции. А почему, собственно?..

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Торговые действия

Непрочитанное сообщение BugsDigger » 05 фев 2019, 17:31

> Ну а если уже есть лонг

Правильный ответ: добавит еще 15. Документация не дает ясной информации на этот счет.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Торговые действия

Непрочитанное сообщение evge » 06 фев 2019, 09:05

Действий Buy или Sell независимых от текущей позиции действительно нет:

Если отправить EnterLong(Q), а текущая позиция Short, то Short будет закрыт полностью и открыт Long на Q штук.
Если отправить EnterLong(Q), а текущая позиция Long, то Long позиция будет увеличена на Q штук, но не более чем на MaxLongLimit заданный в стратегии.

MaxLongAllowed() – возвращает допустимое количество в позиции лонг по стратегии
MaxShortAllowed() – возвращает допустимое количество в позиции шорт по стратегии

Но есть возможность проверять текущую позицию и действовать по обстоятельствам:

CurrentPosition() - текущая позиция
CloseLong(Q) - закрыть Long на Q штук
CloseShort(Q) - закрыть Short на Q штук
никогда такого не было и вот опять

Аватара пользователя
Indigo-On
Сообщения: 55
Зарегистрирован: 28 ноя 2018, 18:44
Откуда: Russia
Благодарил (а): 24 раза
Поблагодарили: 9 раз

Re: Торговые действия

Непрочитанное сообщение Indigo-On » 06 фев 2019, 16:10

evge писал(а):Действий Buy или Sell независимых от текущей позиции действительно нет:
Если отправить EnterLong(Q), а текущая позиция Short, то Short будет закрыт полностью и открыт Long на Q штук.
Если отправить EnterLong(Q), а текущая позиция Long, то Long позиция будет увеличена на Q штук, но не более чем на MaxLongLimit заданный в стратегии.

А EnterLongLimit тоже все короткие позиции закрывает перед тем как лимитную заявку выставить?

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Торговые действия

Непрочитанное сообщение BugsDigger » 06 фев 2019, 17:38

Привет, evge. спасибо за комментарий.

> Если отправить EnterLong(Q), а текущая позиция Short, то Short будет закрыт полностью и открыт Long на Q штук.
>Если отправить EnterLong(Q), а текущая позиция Long, то Long позиция будет увеличена на Q штук

Да, это даже можно проверить, но согласитесь, что описание в документации недостаточно четкое.

> Buy или Sell независимых от текущей позиции действительно нет.

И это кажется несколько странным. Вообще, в методах торговых действий большой крен (~100%) в сторону переворотов, а простых действий почему-то нет. (Хотелось бы знать - хотя бы для общего развития - почему.) Ну и вот кусочек кода (используется в тестировании с учетом постепенного роста депозита), который получается из-за отсутствия базовых операций Buy или Sell:

Код: Выделить всё

   int cp=(int)CurrentPosition();
   if(Sig>0) // индикатор пошел в рост
   {
    // double AvailMoney                 // наличные
    // double P                 // цена закрытия  бара
    int n=(int)(AvailMoney/P)/FI.Lot;    // сколько всего можно купить лотов
    n*=FI.Lot;                           // сколько штук можно купить с учетом лотов

    int ns=(cp<0 ? cp+n : n);            // сколько окажется после покупки, если был шорт

    if(ns>0) EnterLong(ns); else         // закроет шорт, если был, и купит ns; без шорта добавит ns
    if(ns<0) CloseShort(n); else         // сокращение шорта сколько можно (денег на полное закрытие не хватает)
    if(cp<0) CloseShort();               // ns=0: закрытие шорта, если был (денег хватает)
    ...

Вместо последних 4-х операторов мне бы хватило простого Buy(n)...
Последний раз редактировалось BugsDigger 06 фев 2019, 17:57, всего редактировалось 1 раз.

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Торговые действия

Непрочитанное сообщение BugsDigger » 06 фев 2019, 17:54

Indigo-On писал:

> А EnterLongLimit тоже все короткие позиции закрывает перед тем как лимитную заявку выставить?

Это еще одна сторона вопроса: нет описания логики отработки действий. Например, "закрыть" - понятие растяжимое, закрывать можно по-разному.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Торговые действия

Непрочитанное сообщение evge » 06 фев 2019, 18:38

Indigo-On писал(а):А EnterLongLimit тоже все короткие позиции закрывает перед тем как лимитную заявку выставить?

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

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Торговые действия

Непрочитанное сообщение BugsDigger » 10 фев 2019, 19:17

> Закроет сразу

Да, на сей счет в док-ции есть (не с первого раза узрел):
При появлении сигнала закрытия позиции (CloseLong(), CloseShort(), ClosePosition()) робот отправляет на рынок торговые поручения:
 с типом «маркет» (MKT)

(список действий в цитате - как в оригинале: один пункт, но упоминается во множественном числе; copy/paste любимый :))

Хотя, если еще точнее, это прописано для операций БЕЗ параметров, так что формально для операций С параметрами опять получается какая-то недомолвка.
---------------------------------
Сейчас на другое налетел (целенаправленно раньше это не проверял): EnterLong(Q)/EnterShort(Q) при Q>LongLimit/ShortLimit не делает операцию на разрешенное количество, а просто её игнорирует.

Конечно, в док-ции прямо сказано, что
закрыть текущий шорт/лонг (если он есть) и открыть позицию лонг/шорт на Q штук инструмента, если оно не превышает разрешенное стратегией количество

но было бы удобнее, чтобы делалось просто с ограничением. А так приходится дополнительно вручную сравнивать с лимитом...


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и 23 гостя