Dukascopy Support Board
http://www.dukascopy.com/swiss/english/forex/jforex/forum/

помогите разобраться
http://www.dukascopy.com/swiss/english/forex/jforex/forum/viewtopic.php?f=175&t=55608
Page 1 of 1

Author:  Todesko [ Sat 14 Oct, 2017, 18:04 ]
Post subject:  помогите разобраться

Здравствуйте. Не так давно начал осваивать конструктор, прошу помощи в решении задачи - по определённым параметрам робот открывает позицию по закрытию определённой свечи, как сделать так что бы эта позиция была закрыта после закрытия следующей свечи? (тоесть что бы позиция охватывала только одну свечу)

Author:  vadim_berezhnoj [ Thu 19 Oct, 2017, 12:11 ]
Post subject:  Re: помогите разобраться

Добрый день.

В переменной типа Position есть значение Fill Time. К нему можно прибавить время свечи в милисекундах.
На пример для 5 min = 5*60*1000 = 300000.
И на onTick поставить проверку если время тика больше полученной переменной то закрыть позицию.

Author:  valador [ Mon 29 Oct, 2018, 10:50 ]
Post subject:  Re: помогите разобраться

Я бы хотел предложить другой вариант.

На сколько я понимаю механика работы "OnCandle" следующая: весь код в рамках OnCandle выполняется один раз на каждой свече графика на первом тике новой свечи.

Тогда, если в советнике в ветке OnCandle перед кодом открытия позиции поставить условие проверяющее есть ли уже открытая сделка текущим советником, мы сможем код разделить на две части.
Первая часть кода (когда сделка ещё не открыта) выполняется как и было задумано автором - открывается сделка.
Вторая часть кода (когда сделка уже открыта) - тут создаем ветку с блоком закрытия ранее открытой сделки.

Технически я себе представляю так. В условии проверяем значение Positions Amount из раздела "Positions info" и подраздела "Open Positons". Если Positions Amount меньше 1, то открываем позицию при соблюдении условия для открытия позиции, если равно 1, то закрываем позицию, если больше 1, то это третья ветка на случай, если советник будет работать с несколькими сделками.

Возможно, на случай, если на одном счете используется несколько стратегий, для идентификации сделки понадобится отдельно созданная переменная с типом "position", с предварительным прочтением имеющихся позиций с помощью цикла Positions Viewer (см. Component-Logical) и последующей проверкой переменной с типом position .Commet на соответствие заранее установленное текстовое значение уникальное для вашего советника. Естественно при открытии позиции нужно этим значением заполнять поле "Comment".

Итак, получится следующая последовательность действий советника (например, период графика 1час):
9:00
- проверка наличия ранее открытых сделок текущим советником
- сделок нет, поэтому проверка соблюдения условий для открытия сделки
- условия соблюдены, поэтому открываем сделку
10:00
- проверка наличия ранее открытых сделок текущим советником
- 1 сделка есть, поэтому закрываем эту сделку

По поводу того, как работает Positions Viewer подсказать не смогу, потому как пока сам не до конца в нем разобрался.

Author:  Todesko [ Sun 02 Dec, 2018, 10:59 ]
Post subject:  Re: помогите разобраться

Спасибо за ответы. Буду пробовать

  Page 1 of 1