Добрый вечер.
Нет, у меня кода нет. "Живой" бар не использовал. Но в целом всё просто, описано в документации. Добавляйте настройки эти в Initialize() и всё заработает.
UseClosedBar – настройка, позволяющая вызывать код метода
OnUpdate() внутри бара (по приходу новых сделок). Если в коде указано
UseClosedBar = false, то вызов метода будет происходить внутри бара не чаще чем один раз в
LiveBarTimeout секунд.
Тестирование стратегии с
UseClosedBar = false невозможно. Предварительно оценить ее эффективность можно в режиме робота-советника.
Пример.
Код: Выделить всё
UseClosedBar = false;
LiveBarTimeout = 10; // Вызывать не чаще чем раз в 10 секунд
OneSignalOnBar – флаг позволяет отправлять несколько торговых команд на одном баре. Значение флага по умолчанию true. Для включения опции множество сигналов на одном баре используйте
OneSignalOnBar = false; Внимание!
Использование флага
OneSignalOnBar = false (множественного исполнения сделок на одном баре) совместно с флагом
UseClosedBar = false (проверка условий робота внутри бара) может приводить к большому числу сделок на одном баре.
Обратите внимание, что использование данного флага также позволит роботу отправлять несколько торговых команд за один проход вызова функции
OnUpdate.
Для примера накидал простую стратегию:
Если цена (Close) выше чем High предыдущего бара, то продаем.
Если цена (Close) ниже чем Low предыдущего бара, то покупаем.
Если позиция открыта и цена (Close) вернулось в рамки предыдущего бара, т.е. текущего бара Close между Low и High предыдущего, то позиция закрывается.
Код: Выделить всё
function Initialize()
{
StrategyName = "LiveBar";
AddParameter("P1", 0, "", 1);
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 0;
ShortLimit = 0;
//настройка для "живого" бара
UseClosedBar = false;
LiveBarTimeout = 10;
OneSignalOnBar = false;
}
function OnUpdate()
{
if (Input1.Close[0] > Input1.High[1]) EnterShort();
if (Input1.Close[0] < Input1.Low[1]) EnterLong();
if (CurrentPosition() != 0)
if (Input1.Close[0] > Input1.Low[1] && Input1.Close[0] < Input1.High[1]) ClosePosition();
}