Стратегии и роботы > Проверка условия на заданном временном отрезке.

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

Re: Проверка условия на заданном временном отрезке.

Непрочитанное сообщение evge » 24 дек 2019, 09:40

Оптимизированный пример кода, который будет работать быстрее.
Не используется цикл, применены глоб. переменные для хранения индекса последнего пересечения.
И анализируется разница текущего индекса с индексом в глоб. переменной.
Результат работы второго примера тот же, разве что первая сделка может быть во втором примере открыта раньше, но в моем тесте результат был одинаковый.

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

function Initialize()
{
   StrategyName = "EMAEMA2";
   AddParameter("P1", 21, "slow preiod EMA", 1);
   AddParameter("P2", 8, "fast period EMA", 1);
   AddParameter("PN", 10, "period scan", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;
   AddGlobalVariable("icU", Types.Int, 0);
   AddGlobalVariable("icD", Types.Int, 0);
}

function OnUpdate()
{
   var I = Input1;
   var E1 = EMA(I, P1);
   var E2 = EMA(I, P2);

   // cU - было пересечение вверх за PN баров, cD - было пересечение вниз за PN баров
   bool
   cU = (CurrentIndex - icU) < PN,
   cD = (CurrentIndex - icD) < PN;
   
   // isUp - на текущем баре пересекли вверх, isDn - на текущем баре пересекли вниз
   bool isUp = E2[0] > E1[0] && E2[1] < E1[1];
   bool isDn = E2[0] < E1[0] && E2[1] > E1[1];
   
   // Запоминаем индекс бара в гл. перем. при пересечении вверх / вниз
   if (isUp) icU = CurrentIndex;
   if (isDn) icD = CurrentIndex;
   
   // если на текущем баре пересекли вверх и не было пересечений вниз за PN баров
   if (isUp && !cD) EnterLong();

   // если на текущем баре пересекли вниз и не было пересечений вверх за PN баров
   if (isDn && !cU) EnterShort();
}
никогда такого не было и вот опять


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

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

Сейчас этот форум просматривают: Bing [Bot] и 14 гостей