Общие вопросы по разработке > Один раз

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Один раз

Непрочитанное сообщение Den » 06 июл 2017, 14:58

ну так Evaluate() проверяет ваше условие при каждом изменении цены и тут проблему не решить ограничением количества проверок на свече.
Ведь неизвестно когда внутри свечи наступит нужный сигнал индикатора.
Индикатор проверил два раза, а на третий наступило условие, позволяющее верно войти, а лимит проверок уже исчерпан.

Тут надо менять чувствительность индикатора, ограничение его в числе проверок навредит.

В Квике установлено ограничение на открытие противоположных позиций внутри свечи - это и есть то, что вы спрашиваете
В АДу такого нет,как нет исполнения внутри свечи.

Alexey
Сообщения: 19
Зарегистрирован: 16 апр 2017, 16:02
Благодарил (а): 1 раз
Поблагодарили: 6 раз

Re: Один раз

Непрочитанное сообщение Alexey » 06 июл 2017, 15:04

Владимир Валерьевич писал(а):
Alexey писал(а):

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

function Initialize()
{...
AddGlobalVariable("PrevIndex", Types.Int, -1);
}

function Evaluate()
{
if (PrevIndex != CurrentIndex)
   { ...
   PrevIndex = CurrentIndex;
   }

}


Увы. Цена изменилась, "PrevIndex" сбросился на -1.


У меня в индикаторах работает корректно, правда отладчика нет поэтому не проверял че и как считает :) Надо попробовать в лог записать ради интереса...

Владимир Валерьевич
Сообщения: 36
Зарегистрирован: 27 мар 2016, 22:16
Благодарил (а): 9 раз

Re: Один раз

Непрочитанное сообщение Владимир Валерьевич » 06 июл 2017, 15:33

Alexey писал(а):
Владимир Валерьевич писал(а):
Alexey писал(а):

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

function Initialize()
{AddGlobalVariable("PrevIndex", Types.Int, -1);
}
function Initialize()
{...
AddGlobalVariable("PrevIndex", Types.Int, -1);
}

function Evaluate()
{
if (PrevIndex != CurrentIndex)
   { ...
   PrevIndex = CurrentIndex;
   }

}


Увы. Цена изменилась, "PrevIndex" сбросился на -1.


У меня в индикаторах работает корректно, правда отладчика нет поэтому не проверял че и как считает :) Надо попробовать в лог записать ради интереса...



Э. обманул я Вас, получается.
Вот лог что показал на ТФ 2м:
2017.07.06 15:13:37.190 244
2017.07.06 15:13:37.190 244
2017.07.06 15:13:37.190 245
2017.07.06 15:13:37.191 245
2017.07.06 15:13:37.191 246
2017.07.06 15:13:37.191 246
2017.07.06 15:13:37.191 247
2017.07.06 15:13:37.191 247
2017.07.06 15:13:37.192 248
2017.07.06 15:13:37.192 248
2017.07.06 15:13:37.192 249
2017.07.06 15:13:37.192 249
2017.07.06 15:13:37.193 250
2017.07.06 15:13:37.193 250
2017.07.06 15:13:37.193 251
2017.07.06 15:13:37.193 251
2017.07.06 15:13:37.194 252
2017.07.06 15:13:37.194 252
2017.07.06 15:13:37.195 253
2017.07.06 15:13:37.195 253
2017.07.06 15:13:37.195 254
2017.07.06 15:13:37.195 254
2017.07.06 15:13:37.196 255
2017.07.06 15:13:37.196 255
2017.07.06 15:13:37.196 256
2017.07.06 15:13:37.196 256
2017.07.06 15:13:37.197 257
2017.07.06 15:13:37.197 257
2017.07.06 15:13:37.197 258

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

function Initialize()
{AddGlobalVariable("PrevIndex", Types.Int, -1);
}
function Evaluate()
{if (PrevIndex < CurrentIndex)
{LogData(String.Format("{0}", PrevIndex), IndicatorName);   
...
PrevIndex = CurrentIndex;
}
LogData(String.Format("{0}", PrevIndex), IndicatorName);   
}
   

а по идее должен был всего по две строки показывать в две минуты
-1 и текущий индекс.
Что-то я совсем запутался :?

Alexey
Сообщения: 19
Зарегистрирован: 16 апр 2017, 16:02
Благодарил (а): 1 раз
Поблагодарили: 6 раз

Re: Один раз

Непрочитанное сообщение Alexey » 06 июл 2017, 15:38

Alexey писал(а):
Владимир Валерьевич писал(а):
Alexey писал(а):

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

function Initialize()
{...
AddGlobalVariable("PrevIndex", Types.Int, -1);
}

function Evaluate()
{
if (PrevIndex != CurrentIndex)
   { ...
   PrevIndex = CurrentIndex;
   }

}


Увы. Цена изменилась, "PrevIndex" сбросился на -1.


У меня в индикаторах работает корректно, правда отладчика нет поэтому не проверял че и как считает :) Надо попробовать в лог записать ради интереса...


Проверил - пашет :) Только при запуске индикатора почему-то не совсем корректно работает, но на логику не влияет
Индикатор:

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

function Initialize()
{
   IndicatorName = "TestPrevIndex";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = true;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Price);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
   AddSeries("A", DrawAs.Line, Color.Red);   // Задаем вид линии индикатора A
   AddGlobalVariable("PrevIndex", Types.Int, -1);
}

function Evaluate()
{
if (PrevIndex != CurrentIndex)
   {
         LogData (BarTime().ToString() + " <> " + PrevIndex.ToString(), "PrevIndex");
         PrevIndex = CurrentIndex;
   }
}

В лог файле при запуске на минутке следующее:

09:19:21 <> -1
09:19:21 <> -1
09:19:21 <> -1
09:19:21 <> -1
12:52:00 <> -1
12:53:00 <> 0
12:54:00 <> 1
12:55:00 <> 2
12:56:00 <> 3
///---///---///
///---///---///
///---///---///
15:15:00 <> 943
15:16:00 <> 944
15:17:00 <> 945
15:18:00 <> 946

Alexey
Сообщения: 19
Зарегистрирован: 16 апр 2017, 16:02
Благодарил (а): 1 раз
Поблагодарили: 6 раз

Re: Один раз

Непрочитанное сообщение Alexey » 06 июл 2017, 15:52

Лог на 2х минутках
15:28:00 <> 939
15:30:00 <> 940
15:32:00 <> 941
15:34:00 <> 942
15:36:00 <> 943
15:38:00 <> 944
15:40:00 <> 945
15:42:00 <> 946

Владимир Валерьевич
Сообщения: 36
Зарегистрирован: 27 мар 2016, 22:16
Благодарил (а): 9 раз

Re: Один раз

Непрочитанное сообщение Владимир Валерьевич » 06 июл 2017, 16:22

Блин, а у меня на такой конструкции:

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

if (PrevIndex != CurrentIndex)
{LogData (BarTime().ToString() + " <> " + PrevIndex.ToString(), "PrevIndex");
PrevIndex = CurrentIndex;
}


лог показывает:
2017.07.06 16:08:59.399 00:00:00 <> 256
2017.07.06 16:08:59.400 00:00:00 <> 257
2017.07.06 16:09:01.436 00:00:00 <> -1
2017.07.06 16:09:01.437 00:00:00 <> 0
2017.07.06 16:09:01.438 00:00:00 <> 1
2017.07.06 16:09:01.438 00:00:00 <> 2
...
2017.07.06 16:09:01.633 00:00:00 <> 256
2017.07.06 16:09:01.633 00:00:00 <> 257
2017.07.06 16:09:24.311 00:00:00 <> -1
2017.07.06 16:09:24.311 00:00:00 <> 0
2017.07.06 16:09:24.312 00:00:00 <> 1
2017.07.06 16:09:24.313 00:00:00 <> 2
...
2017.07.06 16:09:44.566 00:00:00 <> 257
2017.07.06 16:09:56.756 00:00:00 <> -1
2017.07.06 16:09:56.757 00:00:00 <> 0
2017.07.06 16:09:56.758 00:00:00 <> 1
...
2017.07.06 16:09:58.625 00:00:00 <> 256
2017.07.06 16:09:58.626 00:00:00 <> 257
2017.07.06 16:10:03.158 00:00:00 <> -1
2017.07.06 16:10:03.161 00:00:00 <> 0
2017.07.06 16:10:03.162 00:00:00 <> 1
2017.07.06 16:10:03.163 00:00:00 <> 2

Владимир Валерьевич
Сообщения: 36
Зарегистрирован: 27 мар 2016, 22:16
Благодарил (а): 9 раз

Re: Один раз

Непрочитанное сообщение Владимир Валерьевич » 06 июл 2017, 16:24

Это на 2х минутках

Alexey
Сообщения: 19
Зарегистрирован: 16 апр 2017, 16:02
Благодарил (а): 1 раз
Поблагодарили: 6 раз

Re: Один раз

Непрочитанное сообщение Alexey » 06 июл 2017, 16:42

Владимир Валерьевич писал(а):Блин, а у меня на такой конструкции:

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

if (PrevIndex != CurrentIndex)
{LogData (BarTime().ToString() + " <> " + PrevIndex.ToString(), "PrevIndex");
PrevIndex = CurrentIndex;
}


лог показывает:
2017.07.06 16:08:59.399 00:00:00 <> 256
2017.07.06 16:08:59.400 00:00:00 <> 257
2017.07.06 16:09:01.436 00:00:00 <> -1
2017.07.06 16:09:01.437 00:00:00 <> 0
2017.07.06 16:09:01.438 00:00:00 <> 1
2017.07.06 16:09:01.438 00:00:00 <> 2
...
2017.07.06 16:09:01.633 00:00:00 <> 256
2017.07.06 16:09:01.633 00:00:00 <> 257
2017.07.06 16:09:24.311 00:00:00 <> -1
2017.07.06 16:09:24.311 00:00:00 <> 0
2017.07.06 16:09:24.312 00:00:00 <> 1
2017.07.06 16:09:24.313 00:00:00 <> 2
...
2017.07.06 16:09:44.566 00:00:00 <> 257
2017.07.06 16:09:56.756 00:00:00 <> -1
2017.07.06 16:09:56.757 00:00:00 <> 0
2017.07.06 16:09:56.758 00:00:00 <> 1
...
2017.07.06 16:09:58.625 00:00:00 <> 256
2017.07.06 16:09:58.626 00:00:00 <> 257
2017.07.06 16:10:03.158 00:00:00 <> -1
2017.07.06 16:10:03.161 00:00:00 <> 0
2017.07.06 16:10:03.162 00:00:00 <> 1
2017.07.06 16:10:03.163 00:00:00 <> 2


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

Владимир Валерьевич
Сообщения: 36
Зарегистрирован: 27 мар 2016, 22:16
Благодарил (а): 9 раз

Re: Один раз

Непрочитанное сообщение Владимир Валерьевич » 06 июл 2017, 16:54

Alexey писал(а):Честно говоря я сам не понимаю как все это работает, такое впечатление что одни и те же данные рассчитываются многократно...
Но ту конструкцию которую я дал, сам применяю когда в индикаторе что-то нужно рассчитать раз за бар. Пока работает...

Спасибо за участие.
Буду думать дальше.


Вернуться в «Общие вопросы по разработке»

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

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