Стратегии и роботы > Цена последней сделки и AverPrice()
Цена последней сделки и AverPrice()
Добрый день,
1. Подскажите, как можно в стратегии взять в переменную цену последней сделки?
2. Почему в стратегии например после EnterLong() следующая команда AverPrice() или GetPosition().Price возвращают 0, хотя поза открыта по факту?
Спасибо.
1. Подскажите, как можно в стратегии взять в переменную цену последней сделки?
2. Почему в стратегии например после EnterLong() следующая команда AverPrice() или GetPosition().Price возвращают 0, хотя поза открыта по факту?
Спасибо.
Re: Цена последней сделки и AverPrice()
3. Также получить цену в переменную, по которой отстопился
Спасибо.
Спасибо.
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Цена последней сделки и AverPrice()
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
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Цена последней сделки и AverPrice()
По последнему вопросу:
пример тестовой стратегии с открытием 1 позиции и закрытием по стопу и записью в log файл этих сигналов:
В лог-файле 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
пример тестовой стратегии с открытием 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);
}
В лог-файле 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
никогда такого не было и вот опять
Re: Цена последней сделки и AverPrice()
evge писал(а):Как определили что позиция по факту открыта?
Заявка в очереди и может исполнится, а может и не исполнится, а так же вопрос остается открытым о том когда она исполнится. Код стратегии исполняется далее и не ожидает специально исполнения сигнала. В следующую итерацию, возможно, эти переменные наполнятся значениями, которые терминал (стратегия) получит от брокера. От момента возникновения сигнала (ваш код), отправка команды от вас до брокера, выставления вашей заявки брокером на бирже, возврата вам информации о текущем состоянии - целая вечность
А что будет , если заявка не исполнится. Будет резки гэп и заявка зависнет надолго ? Робот отменит ее по таимаут или будет продолжать работать в ожидании исполнения ?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Цена последней сделки и AverPrice()
vdm писал(а):А что будет , если заявка не исполнится
ну если сами не отмените по CancelActiveOrders(), то будет висеть до исполнения или до отмены по сроку жизни (30 дней, в заявках это видно СрокХР D30) или до нового сигнала с отправкой новой заявки старая снимется. У робота позиция не изменится, но в "последний сигнал" будет, например, EnterLong и его время.
никогда такого не было и вот опять
Re: Цена последней сделки и AverPrice()
Доброго времени суток.
Помогите пожалуйста прописать в стратегию условие неоткрытия позиции в противоположном направлении после профитной сделки или (и) пропуска сделки в прежнем направлении .
Помогите пожалуйста прописать в стратегию условие неоткрытия позиции в противоположном направлении после профитной сделки или (и) пропуска сделки в прежнем направлении .
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Цена последней сделки и AverPrice()
А как закрывается сделка? По BRS или ClosePosition(), CloseLong()... ? Если второе, то в момент закрытия, информация о прибыльности сделки есть по CurrentPL(). Заведите глоб переменную и устанавливайте ей значение после закрытия позиции, при открытии проверяйте ее.
Если нужно будет с примером, сообщайте, накидаю простой пример сюда.
Если нужно будет с примером, сообщайте, накидаю простой пример сюда.
никогда такого не было и вот опять
Re: Цена последней сделки и AverPrice()
Я пытаюсь в стандартном конструкторе стратегий смастерить.
Не могли бы на примере встроенной показать куда вставить такой блок?
Спасибо
Не могли бы на примере встроенной показать куда вставить такой блок?
Спасибо
Код: Выделить всё
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();
}
}
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя