Страница 1 из 2

Удвоить позицию

Добавлено: 31 янв 2017, 12:15
A.Lemzhin
Можно ли прописать в стратегии робота удвоение позиции Лонг (Шорт) если цена закрытия меньше (больше) цены открытой позиции?

Re: Удвоить позицию

Добавлено: 31 янв 2017, 13:47
evge
Можно,

AverPrice() - цена открытой позиции
CurrentPosition() - текущая позиция

EnterLong(Q) - открыть позицию в long на Q шт, но не больше максимальной позиции long стратегии
EnterShort(Q) - открыть позицию в short на Q шт, но не больше максимальной позиции short стартегии

всё это поможет удвоить позицию

подобное этому

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

//удвоение уже открытой позиции
if (Input1.Close[0] > AverPrice() && CurrentPosition() < 0) EnterShort(-CurrentPosition());
if (Input1.Close[0] < AverPrice() && CurrentPosition() > 0) EnterLong(CurrentPosition());


это удвоение УЖЕ открытой позиции,
необходимо ещё в стратегии условия на открытие первоначальной позиции. Конечно открытие первоначальной позиции должно быть меньше максимально возможной, т.к. удвоение иначе работать не будет. Например, так EnterLong(Q) - Q кол-во первоначальное меньшее в 2 и более раза чем LongLimit стратегии.

Re: Удвоить позицию

Добавлено: 31 янв 2017, 17:06
Gluker
evge писал(а):

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

//удвоение уже открытой позиции
if (Input1.Close[0] > AverPrice() && CurrentPosition() < 0) EnterShort(-CurrentPosition() * 2);
if (Input1.Close[0] < AverPrice() && CurrentPosition() > 0) EnterLong(CurrentPosition() * 2);


это удвоение УЖЕ открытой позиции,


EnterShort(-CurrentPosition() * 2) - разве это не утроение позиции?

Re: Удвоить позицию

Добавлено: 31 янв 2017, 17:14
evge
Да, поправил. Там не утроение. Там не нужно * 2, вообще.

position-add-01.png
Удвоение позиции
position-add-01.png (25.52 КБ) 21950 просмотров

Re: Удвоить позицию

Добавлено: 31 янв 2017, 17:23
A.Lemzhin
Спасибо за помощь. Всё отлично работает!

Re: Удвоить позицию

Добавлено: 31 янв 2017, 19:33
A.Lemzhin
А можно дополнительно в условии прописать:
if (Input1.Close[0] < AverPrice() * Коэффициент && CurrentPosition() > 0) EnterLong(CurrentPosition())

Re: Удвоить позицию

Добавлено: 31 янв 2017, 20:48
evge
A.Lemzhin писал(а):А можно дополнительно в условии прописать:
if (Input1.Close[0] < AverPrice() * Коэффициент && CurrentPosition() > 0) EnterLong(CurrentPosition())


Конечно, это условие "можно" менять как угодно. Добавьте параметр коэф. в стратегии и добавляйте его в условие.
Здесь нельзя менять только CurrentPosition() > 0, т.к. в данном случае мы проверяем обязательное наличие позиции лонг.

Re: Удвоить позицию

Добавлено: 01 фев 2017, 14:02
A.Lemzhin
Спасибо. Всё получилось! ...... хотя большой радости при тестировании стратегии не принесло..... :D

Re: Удвоить позицию

Добавлено: 16 фев 2017, 17:18
A.Lemzhin
Добрый день.
Для Размера открытой позиции есть оператор CurrentPosition, для Учетной цены - AverPrice. Есть ли оператор для Цена Последней Позиции?

Re: Удвоить позицию

Добавлено: 16 фев 2017, 17:59
evge
A.Lemzhin писал(а):Добрый день.
Для Размера открытой позиции есть оператор CurrentPosition, для Учетной цены - AverPrice. Есть ли оператор для Цена Последней Позиции?


на сегодня нет, но можно запомнить предполагаемую цену в глоб. переменной и использовать, когда сделка произойдёт и изменится CurrentPosition(). Однако, это не реальная цена исполнения будет, а желаемая в случае с открытием по Stop'у.