Стратегии и роботы > Помогите допилить стратегию Alfa_AO

Обсуждение, описание стратегий и роботов, идеи для стратегий
Аватара пользователя
Simonov
Сообщения: 89
Зарегистрирован: 20 сен 2017, 11:36
Благодарил (а): 83 раза
Поблагодарили: 20 раз

Помогите допилить стратегию Alfa_AO

Непрочитанное сообщение Simonov » 20 сен 2017, 13:56

Добрый день! Евгений, спасибо Вам за очень полезный форум. Недавно обратил на него внимание и считаю, что это самая адекватная площадка для общения на предмет нового терминала Альфа-Директ. К сожалению, непосредственно у разработчиков нет приличного места для обсуждений, решения проблем и консультаций. У Альфа-Директ всегда были проблемы с клиентоориентированностью и поддержкой, чего не могу сказать про банк. Альфа-Банк наоборот, радовал своим отношением и заботой, поэтому теплится надежда, что и у брокера всё наладится. Кстати, не ради красного словца, а справедливости для, надо заметить, что что-то меняется уже сейчас. Теперь можно даже дозвониться до брокера с первого раза и что самое невероятное, в ответ услышать не сонный и безразличный голос побитого жизнью менеджера, а радостное и приветливое щебетание сотрудника с хорошим настроением! :D И вопросы стали решать очень оперативно, аж не верится! Ну да ладно. Хватит лирики, осмелюсь Вас попросить о помощи или совете.

Имеется встроенная стратегия Alfa_AO. После оптимизаций и тестов появилось желания опробовать данную стратегию в боевых условиях. Но для получения максимального результата, хотелось бы внести одно изменение. Поковырялся в конструкторе, но так и не понял, как это сделать.

Я взял стоковый вариант стратегии и добавил в каждое правило (их там два всего) стопы. Далее смотрим скриншот. Необходимо сделать следующее. После входа в позицию по сигналу индикатора (1) и после срабатывания стопа (2), робот моментально перезаходит в том же направлении, что и было, повинуясь индикатору (3), а хотелось бы, чтобы он после срабатывания стопа ничего не делал, а просто выжидал нового разворотного сигнала и только тогда открывал следующую позицию (4). Вот, в принципе, и всё. Заранее благодарен за советы и рекомендации.

Alfa_AO.PNG
Alfa_AO.PNG (8.06 КБ) 5461 просмотр


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

/**
В стратегии используется индикатор 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);
   }

}

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Помогите допилить стратегию Alfa_AO

Непрочитанное сообщение evge » 20 сен 2017, 15:22

Приветствую!

Если взглянуть на код, то видно что вход в позицию происходит при условии

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

   if ( (AO(Input1, Pfast, Pslow) > AO(Input1, Pfast, Pslow)[1]) ) {...}
...
   if ( (AO(Input1, Pfast, Pslow) < AO(Input1, Pfast, Pslow)[1]) ) {...}


Для открытия LONG
Значение индикатора AO в текущем баре БОЛЬШЕ значения индикатора AO в предыдущем баре.

и наоборот

Для открытия SHORT
Значение индикатора AO в текущем баре МЕНЬШЕ значения индикатора AO в предыдущем баре.

После того как стоп сработал, одно из условий выполняется и робот снова входит в позицию.

Нужно немного поменять эти условия входа:

1. Вынесем результат АО в переменную для удобства использования и читабельности кода

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

var A = AO(Input1, Pfast, Pslow)


2. Заменим условия

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

if (A[0] >= A[1] && A[2] > A[1]) {...} // Long
if (A[0] <= A[1] && A[2] < A[1]) {...} // Short


итоговый вариант

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

/**
Developed by evge;
Algorithm = ОСЦИЛЛЯТОР;
**/
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()
{

var A = AO(Input1, Pfast, Pslow);

   /// ПРАВИЛО 1
if (A[0] >= A[1] && A[2] > A[1])
   {
      EnterLong();
      StopLoss(Pstop, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

   /// ПРАВИЛО 2
if (A[0] <= A[1] && A[2] < A[1])
   {
      EnterShort();
      StopLoss(Pstop, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

}
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Помогите допилить стратегию Alfa_AO

Непрочитанное сообщение evge » 20 сен 2017, 15:47

Это код для разблокированной стратегии, т.е. без конструктора.

Но вообще можно это реализовать и в конструкторе

Добавив ещё по 1 условию для каждого правила.
никогда такого не было и вот опять

Аватара пользователя
Simonov
Сообщения: 89
Зарегистрирован: 20 сен 2017, 11:36
Благодарил (а): 83 раза
Поблагодарили: 20 раз

Re: Помогите допилить стратегию Alfa_AO

Непрочитанное сообщение Simonov » 20 сен 2017, 16:05

evge писал(а):Это код для разблокированной стратегии, т.е. без конструктора.

Но вообще можно это реализовать и в конструкторе

Добавив ещё по 1 условию для каждого правила.


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

Аватара пользователя
Simonov
Сообщения: 89
Зарегистрирован: 20 сен 2017, 11:36
Благодарил (а): 83 раза
Поблагодарили: 20 раз

Re: Помогите допилить стратегию Alfa_AO

Непрочитанное сообщение Simonov » 20 сен 2017, 16:24

Simonov писал(а):
evge писал(а):Это код для разблокированной стратегии, т.е. без конструктора.

Но вообще можно это реализовать и в конструкторе

Добавив ещё по 1 условию для каждого правила.


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


Всё, разобрался сам, как добавить необходимое условие через конструктор! Вопрос выше снимается. ;) Ещё раз, огромное спасибо!


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей