Стратегии и роботы > Цена последней сделки и AverPrice()

Обсуждение, описание стратегий и роботов, идеи для стратегий
STiTcH
Сообщения: 12
Зарегистрирован: 01 ноя 2019, 09:34
Благодарил (а): 1 раз

Цена последней сделки и AverPrice()

Непрочитанное сообщение STiTcH » 25 ноя 2019, 15:25

Добрый день,
1. Подскажите, как можно в стратегии взять в переменную цену последней сделки?
2. Почему в стратегии например после EnterLong() следующая команда AverPrice() или GetPosition().Price возвращают 0, хотя поза открыта по факту?
Спасибо.

STiTcH
Сообщения: 12
Зарегистрирован: 01 ноя 2019, 09:34
Благодарил (а): 1 раз

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение STiTcH » 25 ноя 2019, 18:23

3. Также получить цену в переменную, по которой отстопился
Спасибо.

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

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение evge » 26 ноя 2019, 06:12

STiTcH писал(а):1. Подскажите, как можно в стратегии взять в переменную цену последней сделки?


1. var quote = GetQuote();
double Last = quote.Last;

или

double Last = GetLast();

GetLast() – функция возвращает цену последней сделки на момент вызова.

var Close = Input1.Close[0] - цена закрытия текущего бара

STiTcH писал(а):2. Почему в стратегии например после EnterLong() следующая команда AverPrice() или GetPosition().Price возвращают 0, хотя поза открыта по факту?
Спасибо.


Как определили что позиция по факту открыта?
Заявка в очереди и может исполнится, а может и не исполнится, а так же вопрос остается открытым о том когда она исполнится. Код стратегии исполняется далее и не ожидает специально исполнения сигнала. В следующую итерацию, возможно, эти переменные наполнятся значениями, которые терминал (стратегия) получит от брокера. От момента возникновения сигнала (ваш код), отправка команды от вас до брокера, выставления вашей заявки брокером на бирже, возврата вам информации о текущем состоянии - целая вечность :)

STiTcH писал(а):3. Также получить цену в переменную, по которой отстопился


GetLastSignalInfo() – возврат информации по последнему сигналу
GetSignalInfo(SignalType signalType, int quantityFromEnd = 0) – возврат сигналов заданного типа, суммарный объем которых не превышает заданное количество (если quantityFromEnd отлично от нуля)

SignalType.All – любое направление сигнала
SignalType.Close – сигналы закрытия позиции
SignalType.Open – сигналы открытия позиции

Результат исполнения – объект или список объектов, содержащих следующие поля

• SignalID – номер сигнала
• OrderType – тип заявки (купить/продать). (enumOrderType.Buy, enumOrderType.Sell)
• ActionType – название действия (команды)
• ActionSuperType – название сигнала
• OperationSize - объём
• OperationExecuted – исполненный объём
• OperationRest – объём оставшийся для исполнения
• PriceOfSignal – цена сигнала
• PriceOfOrder – цена заявки
• PriceOfTrade – цена исполнения
• PriceAdditional – второй ценовой уровень (если предусмотрен. Напр. В заявке типа BRS)
• DateTime – время сигнала
• CurrentPosition – позиция по роботу после обработки сигнала
• IsStatusFilled – исполнена ли заявка по сигналу
• IsStatusTerminal – в конечном ли статусе заявка по сигналу (исполнена, отменена, отклонена)
никогда такого не было и вот опять

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

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение evge » 26 ноя 2019, 08:42

По последнему вопросу:

пример тестовой стратегии с открытием 1 позиции и закрытием по стопу и записью в log файл этих сигналов:

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

function Initialize()
{
   StrategyName = "StopTest";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "RIZ9=ФОРТС");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{


var Sig = GetSignalInfo(SignalType.All);

if (CurrentPosition() == 0 && Sig.Count == 0)
{
   EnterLong(1);
   StopLoss(0.05, SignalPriceType.DeltaInPercentFromAveragePrice);
}

if (CurrentIndex == MaxIndex)
for (int numSig = 0; numSig <= Sig.Count - 1; numSig++)
   LogData(String.Format("Signal: {0} of {1}, ActionType: {2}, ActionSuperType: {3}, OperationSize: {4}, OperationExecuted: {5}, PriceOfSignal: {6}, PriceOfOrder: {7}, PriceOfTrade: {8}, PriceAdditional: {9}, DateTime: {10}, CurrentPosition: {11}, IsStatusFilled: {12}, IsStatusTerminal: {13}", numSig + 1, Sig.Count, Sig[numSig].ActionType, Sig[numSig].ActionSuperType, Sig[numSig].OperationSize, Sig[numSig].OperationExecuted, Sig[numSig].PriceOfSignal, Sig[numSig].PriceOfOrder, Sig[numSig].PriceOfTrade, Sig[numSig].PriceAdditional, Sig[numSig].DateTime.ToString(), Sig[numSig].CurrentPosition, Sig[numSig].IsStatusFilled, Sig[numSig].IsStatusTerminal), StrategyName);
}


StopTest-01.png
StopTest-01.png (27.11 КБ) 20803 просмотра


В лог-файле X:\Users\CURRENT_USER\AppData\Local\Alfa-Direct\Logs\StopTest.000.log следующее:

2019.11.26 09:33:38.585 Signal: 1 of 2, ActionType: EnterLong, ActionSuperType: EnterLong, OperationSize: 1, OperationExecuted: 1, PriceOfSignal: 145070, PriceOfOrder: 145070, PriceOfTrade: 145070, PriceAdditional: , DateTime: 25.11.2019 22:59:00, CurrentPosition: 1, IsStatusFilled: True, IsStatusTerminal: True

2019.11.26 09:33:38.585 Signal: 2 of 2, ActionType: StopLoss, ActionSuperType: EnterLong, OperationSize: 1, OperationExecuted: 1, PriceOfSignal: 145000, PriceOfOrder: 145000, PriceOfTrade: 145000, PriceAdditional: , DateTime: 25.11.2019 23:12:00, CurrentPosition: 0, IsStatusFilled: True, IsStatusTerminal: True
никогда такого не было и вот опять

STiTcH
Сообщения: 12
Зарегистрирован: 01 ноя 2019, 09:34
Благодарил (а): 1 раз

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение STiTcH » 26 ноя 2019, 09:54

Спасибо огромное!)

vdm
Сообщения: 24
Зарегистрирован: 25 ноя 2016, 14:01
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение vdm » 27 ноя 2019, 11:20

evge писал(а):Как определили что позиция по факту открыта?
Заявка в очереди и может исполнится, а может и не исполнится, а так же вопрос остается открытым о том когда она исполнится. Код стратегии исполняется далее и не ожидает специально исполнения сигнала. В следующую итерацию, возможно, эти переменные наполнятся значениями, которые терминал (стратегия) получит от брокера. От момента возникновения сигнала (ваш код), отправка команды от вас до брокера, выставления вашей заявки брокером на бирже, возврата вам информации о текущем состоянии - целая вечность :)

А что будет , если заявка не исполнится. Будет резки гэп и заявка зависнет надолго ? Робот отменит ее по таимаут или будет продолжать работать в ожидании исполнения ?

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

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение evge » 27 ноя 2019, 11:29

vdm писал(а):А что будет , если заявка не исполнится


ну если сами не отмените по CancelActiveOrders(), то будет висеть до исполнения или до отмены по сроку жизни (30 дней, в заявках это видно СрокХР D30) или до нового сигнала с отправкой новой заявки старая снимется. У робота позиция не изменится, но в "последний сигнал" будет, например, EnterLong и его время.

orders-01.png
orders-01.png (19.86 КБ) 20709 просмотров
никогда такого не было и вот опять

JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение JASON » 13 дек 2019, 23:11

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

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

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение evge » 14 дек 2019, 08:47

А как закрывается сделка? По BRS или ClosePosition(), CloseLong()... ? Если второе, то в момент закрытия, информация о прибыльности сделки есть по CurrentPL(). Заведите глоб переменную и устанавливайте ей значение после закрытия позиции, при открытии проверяйте ее.
Если нужно будет с примером, сообщайте, накидаю простой пример сюда.
никогда такого не было и вот опять

JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

Re: Цена последней сделки и AverPrice()

Непрочитанное сообщение JASON » 16 дек 2019, 01:40

Я пытаюсь в стандартном конструкторе стратегий смастерить.
Не могли бы на примере встроенной показать куда вставить такой блок?
Спасибо

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

function Initialize()
{
   StrategyName = "Alfa_MACD";
   AddParameter("Pfast", 45, "быстрая ema", 1);
   AddParameter("Pslow", 65, "медленная ema", 0);
   AddParameter("Psig", 8, "сигнальная ema", 0);
   AddInput("Input1", Inputs.Candle, 60, true, "SBERP=МБ ЦК");
   LongLimit = 1;
   ShortLimit = -1;
   AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) > 0) && (Pfast < Pslow) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0) && (Pfast < Pslow) )
   {
      EnterShort();
   }

}


Вернуться в «Стратегии и роботы»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей