Полезные функции от KimIV - страница 22

Igor Kim
2729
Igor Kim  
rid:

Вот сейчас вывел в комментарий функцию - Comment (isCloseLastPosByStop());

Вы в тестере проверяете? Если в тестере, то, наверняка, может возникнуть ситуация, при которой у двух и более последних закрытых позиций не будет отличаться OrderCloseTime().

Rid
3170
Rid  

Понятно. Если в тестере будут закрыты одновременно несколько позиций(по сигналу), то фунция isCloseLastPosByStop() может "заглючить" и не сработать ? А в онлайне, видимо, работать будет.

Да, - сейчас проверил в тестере при работе с одной позицией. Всё работает корректно! Функция правильно отображает в Comment (isCloseLastPosByStop()) закрытие по стоплоссу и вовремя меняет флаг при закрытии по иной причине.

Igor Kim
2729
Igor Kim  
rid писал (а):
Понятно. Если в тестере будут закрыты одновременно несколько позиций, то фунция isCloseLastPosByStop() может "заглючить" и не сработать ?

Да, потому что функция isCloseLastPosByStop() последнюю закрытую позицию идентифицирует по максимуму времени закрытия, которое измеряется в секундах. Поэтому нужно, чтобы между закрытиями нескольких позиций проходило времени более одной секунды. В тестере может проходить менее одной секунды.

rid писал (а):
А в онлайне, видимо, работать будет.
В онлайне тоже могут быть глюки, но намного реже, чем в тестере. Всё-таки даже автомату ДЦ требуется какое-то время для закрытия позиций. Если у Вас возникнут идеи, как более надёжно идентифицировать последнюю закрытую позицию, то с благодарностью приму её и постараюсь переделать функцию.
Artem Titarenko
4540
Artem Titarenko  

Доброе время суток, KimIV. Мне нужен Ваш совет, а точнее помощь. Мне нужно чтобы функция start() работала не потиково, а запускалась каждую секунду независимо от того пришёл новый тик или нет. Вот как я попытался реализовать эту задачу:

int start()
  {
   if(first==true)return(0); 
   else 
   {   
      for(int j=0;j<10;j++)
         {
         RefreshRates();//обновляем котировки 

         //Код эксперта

         first=true;
         Sleep(1000);//задержка в 1 секунду
         j=0;
         }
   }
   return(0);
  }
Igor Kim
2729
Igor Kim  
StatBars писал (а):
Мне нужно чтобы функция start() работала не потиково, а запускалась каждую секунду независимо от того пришёл новый тик или нет.

Я такое вот так сделал:

void start() {
  while (IsExpertEnabled() && !IsStopped()) {
    // код .............
    Sleep(1000);
  }
}
Artem Titarenko
4540
Artem Titarenko  

Спасибо Тебе БОЛЬШОЕ!!!! Ты можешь мне ещё сказать мой код вообще работает? В тестере нет... А в реале будет?... Или обязательно нужно

Void start()...

Igor Kim
2729
Igor Kim  
StatBars писал (а):
Ты можешь мне ещё сказать мой код вообще работает?

Не знаю... не проверял...

StatBars писал (а):
В тестере нет... А в реале будет?...

В тестере не работают любые зацикленные вещи. Работают только те, которые по тикам...

В онлайне вроде должен работать Ваш код. По крайней мере по логике выглядит рабочим...

StatBars:

Или обязательно нужно

Void start()...

нет, не обязательно. Просто зачем объявлять типизированную функцию, если она никакого значения не возвращает, а если возвращает, то это значение никак не используется?
Artem Titarenko
4540
Artem Titarenko  

Понятно. Ещё раз Спасибо.

Rid
3170
Rid  
KimIV:
. Если у Вас возникнут идеи, как более надёжно идентифицировать последнюю закрытую позицию, то с благодарностью приму её и постараюсь переделать функцию.

Благодарю за любезное предложение. К сож., хорошие идеи нечасто (увы...) забредают в мою голову! Вот не так давно, например, заметил, что в Ваших функциях практически не используется "компонент" - OrderComment

Однако, возможно, применение этой функции натолкнет вас на новые идеи (на радость всем присутствующим).

Например, типа if (OrderComment()==" [sl]" && .... - может расширить ассортимент выполняемых задач!

//---------------------------------------------------------------------------------

"Больше функций, - хороших и разных!" (с)

Igor Kim
2729
Igor Kim  
rid:
KimIV:
. Если у Вас возникнут идеи, как более надёжно идентифицировать последнюю закрытую позицию, то с благодарностью приму её и постараюсь переделать функцию.

Например, типа if (OrderComment()==" [sl]" && .... - может расширить ассортимент выполняемых задач!

rid, Вы предложили способ идентификации срабатывания стопа по записи в комментариях ордера. Благодарю, но в комментариях кроме [sl] могут быть другие записи.

Я эту же задачу решаю сравнением цены закрытия с ценой стопа.