Добрый день!
Прошу помочь со следующим вопросом:
по стратегии количество лотов/контрактов на вход в каждую сделку разное, рассчитывается исходя из текущего депозита и допустимого % риска.
Необходимые заявки на вход в сделки описал в тексте робота - на вход использую функции EnterLongStop и EnterShortStop.
При этом при тестировании робот всегда берет те количества, которые заданы в мастере тестирования - все время одни и те же.
Вопрос - как все-таки написать код, чтобы количество лотов на вход в сделки было разным?
Пробовал пользоваться функциями SetLongLimit и SetShortLimit (нашел в одной из соседних тем).
При тестировании на истории дополнительно с этими функциями робот не вошел ни в одну сделку, не дал ни одного сигнала.
Помимо прочего после компиляции текста с этими функциями перестали работать корректно некоторые кнопки в окне написания кода и в следующем окне (перезагрузка терминала не устранила проблему((.
Надеюсь кто-то сталкивался с такой же задачей
Стратегии и роботы > вход в сделку разным количеством лотов/контрактов
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: вход в сделку разным количеством лотов/контрактов
Приветствую!
Задавайте количество в параметре
EnterLongStop(Price) - вариант без указания кол-ва
EnterLongStop(Price, Q) – закрыть текущий шорт в момент отправки команды по рыночным ценам (если он есть) и выставить стоп-заявку (STP) на открытие позиции лонг на разрешенное стратегией количество (или заданное количество Q) по цене Price.
EnterShortStop(Price) - вариант без указания кол-ва
EnterShortStop(Price, Q) – закрыть текущий лонг в момент отправки команды по рыночным ценам (если он есть) и выставить стоп-заявку (STP) на открытие позиции шорт на разрешенное стратегией количество (или заданное количество Q) по цене Price.
В тестировании и в роботе задается не количество на вход, а максимальное (разрешенное) количество, которое робот не превысит.
Если в заявке не указываете количество, то будет отправлять заданное максимальное (разрешенное).
Смотрите полезный документ Документация по скриптам для индикаторов и роботов в терминале Альфа-Директ 4.0, размещенный на этой странице:
Обучение работе с торговыми роботами
Задавайте количество в параметре
EnterLongStop(Price) - вариант без указания кол-ва
EnterLongStop(Price, Q) – закрыть текущий шорт в момент отправки команды по рыночным ценам (если он есть) и выставить стоп-заявку (STP) на открытие позиции лонг на разрешенное стратегией количество (или заданное количество Q) по цене Price.
EnterShortStop(Price) - вариант без указания кол-ва
EnterShortStop(Price, Q) – закрыть текущий лонг в момент отправки команды по рыночным ценам (если он есть) и выставить стоп-заявку (STP) на открытие позиции шорт на разрешенное стратегией количество (или заданное количество Q) по цене Price.
В тестировании и в роботе задается не количество на вход, а максимальное (разрешенное) количество, которое робот не превысит.
Если в заявке не указываете количество, то будет отправлять заданное максимальное (разрешенное).
Смотрите полезный документ Документация по скриптам для индикаторов и роботов в терминале Альфа-Директ 4.0, размещенный на этой странице:
Обучение работе с торговыми роботами
никогда такого не было и вот опять
Re: вход в сделку разным количеством лотов/контрактов
Евгений, спасибо за обратную связь!
Именно так и делаю - считаю необходимое количество order и вхожу в сделку EnterLongStop (Price, order), при этом order пробовал и double и int - одинаковый результат - всегда робот входит в лонг одинаковым количеством контрактов, которое при тестировании указал.
Собственно отсюда все функции и брал, параллельно смотрел курс по созданию роботов на сайте АД )
Полный текст входа в лонг задаю следующим образом - может быть тут в логике проблема у меня?
Предполагаю, что эти 3 команды (2-3-4)ложатся в очередь и исполнятся по очереди:
1 - CancelStopLoss(); ///отменяю предыдущий стоплосс
2 - StopLoss(Input.High, SignalPriceType.Price); ///тут выхожу из предыдущей сделки - шорта, по рынку, если цена достигнет хая свечи. По стратегии нужно именно так, а не выход из шорта по рынку, как при прямом действии EnterLongStop, поэтому сначала эту заявку ставлю
3 - EnterLongStop(Input.High, order); ///Сразу же ставим вход в лонг по той же цене, который исполнится сразу после закрытия шорта (пока не рассматриваю кривые варианты частичного закрытия позиции)
4 - StopLoss(stop_loss, SignalPriceType.Price); ///сразу же выставляю новый стоплосс к новой сделке, если она осуществится
Тут у меня тоже вопрос - правильно ли понимаю, что 3 использованные команды StopLoss, EnterLongStop и StopLoss лягут в очередь и исполнятся по очереди, как мне нужно? или же есть какой-то другой более явный вариант?
evge писал(а):EnterLongStop(Price, Q) – закрыть текущий шорт в момент отправки команды по рыночным ценам (если он есть) и выставить стоп-заявку (STP) на открытие позиции лонг на разрешенное стратегией количество (или заданное количество Q) по цене Price.
Именно так и делаю - считаю необходимое количество order и вхожу в сделку EnterLongStop (Price, order), при этом order пробовал и double и int - одинаковый результат - всегда робот входит в лонг одинаковым количеством контрактов, которое при тестировании указал.
evge писал(а):Смотрите полезный документ Документация по скриптам для индикаторов и роботов в терминале Альфа-Директ 4.0
Собственно отсюда все функции и брал, параллельно смотрел курс по созданию роботов на сайте АД )
Полный текст входа в лонг задаю следующим образом - может быть тут в логике проблема у меня?
Предполагаю, что эти 3 команды (2-3-4)ложатся в очередь и исполнятся по очереди:
1 - CancelStopLoss(); ///отменяю предыдущий стоплосс
2 - StopLoss(Input.High, SignalPriceType.Price); ///тут выхожу из предыдущей сделки - шорта, по рынку, если цена достигнет хая свечи. По стратегии нужно именно так, а не выход из шорта по рынку, как при прямом действии EnterLongStop, поэтому сначала эту заявку ставлю
3 - EnterLongStop(Input.High, order); ///Сразу же ставим вход в лонг по той же цене, который исполнится сразу после закрытия шорта (пока не рассматриваю кривые варианты частичного закрытия позиции)
4 - StopLoss(stop_loss, SignalPriceType.Price); ///сразу же выставляю новый стоплосс к новой сделке, если она осуществится
Тут у меня тоже вопрос - правильно ли понимаю, что 3 использованные команды StopLoss, EnterLongStop и StopLoss лягут в очередь и исполнятся по очереди, как мне нужно? или же есть какой-то другой более явный вариант?
- evge
- Администратор
- Сообщения: 1813
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: вход в сделку разным количеством лотов/контрактов
Я бы убедился что order - точно рассчитан, поставьте тут
EnterLongStop(Input.High, order);
например
EnterLongStop(Input.High, 1);
т.е. конкретное число и проверьте после этого равно ли открытие позиции в тестировании заданному кол-ву максимальной позиции заданной в тестировании
EnterLongStop(Input.High, order);
например
EnterLongStop(Input.High, 1);
т.е. конкретное число и проверьте после этого равно ли открытие позиции в тестировании заданному кол-ву максимальной позиции заданной в тестировании
никогда такого не было и вот опять
Re: вход в сделку разным количеством лотов/контрактов
evge писал(а):Я бы убедился что order - точно рассчитан, поставьте тут
EnterLongStop(Input.High, order);
например
EnterLongStop(Input.High, 1);
т.е. конкретное число и проверьте после этого равно ли открытие позиции в тестировании заданному кол-ву максимальной позиции заданной в тестировании
Евгений, благодарю! разобрался, действительно неверно подтягивались глобальные переменные и order неправильно рассчитывался.
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей