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

А в АД4 можно трейсить?

Добавлено: 13 апр 2017, 20:14
nik7799
Добрый вечер!

А можно ли в АД4, пошагово выполнять программу-робота, получая какие-то промежуточные результаты?

Заранее спасибо.

Re: А в АД4 можно трейсить?

Добавлено: 14 апр 2017, 06:46
evge
Отладки нет. Можно писать в log файл данные.

Re: А в АД4 можно трейсить?

Добавлено: 19 апр 2017, 23:09
nik7799
Подскажите как передать из индикатора (NRTRm) в робот признак Current "true/false" и вывести его в лог?
У меня в лог вываливается просто - "не число".

Re: А в АД4 можно трейсить?

Добавлено: 20 апр 2017, 06:24
evge
nik7799 писал(а):Current "true/false" и вывести его в лог?


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

LogData(String.Format("{0}", Current), IndicatorName);


или

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

LogData(Current.ToString(), IndicatorName);


или

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

LogData("" + Current, IndicatorName);


Все варианты проверил, выдают в лог: True, False

2017.04.20 07:18:47.022 False
2017.04.20 07:18:47.022 False
2017.04.20 07:18:47.022 False
2017.04.20 07:18:47.022 False
2017.04.20 07:18:47.022 True
2017.04.20 07:18:47.022 True
2017.04.20 07:18:47.022 True

Re: А в АД4 можно трейсить?

Добавлено: 20 апр 2017, 21:50
nik7799
Если в индикатор встраивать лог, все работает.
А у меня не получается затянуть это значение из индикатора в робот и уже в нем оперировать с логом и данным флагом.

Re: А в АД4 можно трейсить?

Добавлено: 21 апр 2017, 07:24
evge
nik7799 писал(а):затянуть это значение из индикатора в робот


Только серии доступны в стратегиях / роботах из индикаторов.
Для этого надо из глоб. переменных current перенести в серии или добавить дополнительно к глоб. переменной current ещё и серию, которая будет дублировать там значения глоб. переменной.

Но в сериях нет значений boolean. Можно писать туда -1 (при false) и 1 (при true), и проверять > 0 или < 0 уже в стратегии.

Re: А в АД4 можно трейсить?

Добавлено: 23 апр 2017, 14:09
nik7799
Спасибо, так и сделал, добавил серию с присвоением по условию (-1) или (1).

Только пришлось изменить размерность (-0.1/+0.1), иначе графики бумаг с низкой стоимостью вытягивались в "дудочку".

Еще вопрос. Как организовать цикл проверки (подтверждения правильности) некоего действия?
К примеру, по неким критериям сработал EnterShort (Присваиваю FlagShort = X) и мне необходимо в течении следующих X периодов проверять по параметрам правильность этого действия и закрывать шорт (CloseShort) если нет подтверждения.
Если ввожу AddGlobalVariable как количество проверочных периодов Х, он сбрасывается при следующем периоде.

Какую переменную можно использовать чтобы она не сбрасывалась и работала в OnUpdate?

Re: А в АД4 можно трейсить?

Добавлено: 23 апр 2017, 16:43
evge
nik7799 писал(а):Только пришлось изменить размерность (-0.1/+0.1), иначе графики бумаг с низкой стоимостью вытягивались в "дудочку".

Серию можно выводить в отдельную область, она не будет влиять на график. В новых версиях АД4 будет возможность рисовать Shadow серию (фоновую). Ещё лучший вариант это скрыть визуализацию серии, см. документацию по скриптам (Терминал 4.0. Скрипты пользовательских индикаторов и стратегий.doc)

AddSeries(Name)
AddSeries(Name, Type, Color)
AddSeries(Name, Type, Color, Visible)
AddSeries(Name, Type, Color, Visible, Axes)
AddSeries(Name, Type, Color, AxisType)
AddSeries(Name, Type, Color, AxisType, Visible, Axes)
– создание выходного ряда, можно добавлять несколько.
Параметры:
• Name – имя выходного ряда.
• Type – константа, определяющая вид отображения выходного ряда:
o DrawAs.Line – линия;
o DrawAs.Histogram – гистограмма.
o DrawAs.Custom – произвольный метод рисования (определяется в области вычисления индикатора).
• Color – цвет линии, гистограммы (значения стандартные для MicroSoft).
• Visible – видимый ряд или нет:
o true (массив используется как выходной ряд);
o false (массив используется как скрытый ряд)
• Axes – область отображения ряда // Не сохраняется в конфигурацию
o Axes.Parent – ряд отображается в области входного ряда
o Axes.New – ряд отображается в отдельной области
• AxisType – опорная ось для рисования гистограммы и областей
o AxisType.Default – ряд отображается по умолчанию
o AxisType.ZeroBased – ряд масштабируется относительно нуля

nik7799 писал(а):Еще вопрос. Как организовать цикл проверки (подтверждения правильности) некоего действия?
К примеру, по неким критериям сработал EnterShort (Присваиваю FlagShort = X) и мне необходимо в течении следующих X периодов проверять по параметрам правильность этого действия и закрывать шорт (CloseShort) если нет подтверждения.
Если ввожу AddGlobalVariable как количество проверочных периодов Х, он сбрасывается при следующем периоде.

Какую переменную можно использовать чтобы она не сбрасывалась и работала в OnUpdate?

AddGlobalVariable - правильный вариант. Чтобы понять почему не работает, нужно видеть код.
Например, при возникновении сигнала сохраняем CurrentIndex в данную глоб. переменую.
В последующем, можно рассчитать количество баров от текущего бара до сигнального, для этого достаточно вычислить разность CurrentIndex - глоб. переменная и сравнить полученное значение с нужным параметром или числом.

Re: А в АД4 можно трейсить?

Добавлено: 23 апр 2017, 22:46
nik7799
У меня пока жесткая криворукость получается, такое показывать пока просто неловко.
Подправлю до условно-рабочего состояния и выложу код.