
Имеется встроенная стратегия Alfa_AO. После оптимизаций и тестов появилось желания опробовать данную стратегию в боевых условиях. Но для получения максимального результата, хотелось бы внести одно изменение. Поковырялся в конструкторе, но так и не понял, как это сделать.
Я взял стоковый вариант стратегии и добавил в каждое правило (их там два всего) стопы. Далее смотрим скриншот. Необходимо сделать следующее. После входа в позицию по сигналу индикатора (1) и после срабатывания стопа (2), робот моментально перезаходит в том же направлении, что и было, повинуясь индикатору (3), а хотелось бы, чтобы он после срабатывания стопа ничего не делал, а просто выжидал нового разворотного сигнала и только тогда открывал следующую позицию (4). Вот, в принципе, и всё. Заранее благодарен за советы и рекомендации.
Код: Выделить всё
/**
В стратегии используется индикатор AO,- Awesome Oscillator («чудесный осциллятор»), разработанный Биллом Вильямсом.
Идея:
- осуществляется контроль за направлением линии AO.
Сигналы:
- сигнал на открытие позиции ЛОНГ выдается, если индикатор AO начинает расти;
- сигнал на открытие позиции ШОРТ выдается, если индикатора AO начинает снижаться;
Параметры:
Pfast – период быстрой простой скользящей средней в АО (1ый параметр АО),
Pslow - период медленной простой скользящей средней в АО (2ой параметр АО).
Особенности:
- выполнена предварительная настройка параметров робота по результатам оценки качества торговой системы, проведённой в Мастере оптимизации стратегии;
- при тестировании цена сделки фиксируется как цена закрытия бара, на котором появился сигнал;
- в роботе заявка выставляется после закрытия бара, на котором появился сигнал.
Developed by Alfadirect;
Algorithm = ОСЦИЛЛЯТОР;
Hash code 6A7C3BA99A41DF684F24CA39110EC79B
**/
function Initialize()
{
StrategyName = "My_Alfa_AO";
AddParameter("Pfast", 8, "", 1);
AddParameter("Pslow", 35, "", 1);
AddParameter("Pstop", 0.5, "", 1);
AddInput("Input1", Inputs.Candle, 30, true, "SBER=МБ ЦК");
LongLimit = 1;
ShortLimit = -1;
AddChartIndicator("AwesomeOscillator", new Dictionary <string, string>{{"Fast", "Pfast"},{"Slow", "Pslow"}});
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (AO(Input1, Pfast, Pslow) > AO(Input1, Pfast, Pslow)[1]) )
{
EnterLong();
StopLoss(Pstop, SignalPriceType.DeltaInPercentFromAveragePrice);
}
/// ПРАВИЛО 2
if ( (AO(Input1, Pfast, Pslow) < AO(Input1, Pfast, Pslow)[1]) )
{
EnterShort();
StopLoss(Pstop, SignalPriceType.DeltaInPercentFromAveragePrice);
}
}