Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 520

 
Vitaly Muzichenko:

Чем пагубна такая конструкция?

Или лучше привести datetime к типу long?

пока я не вижу проблем.
Но очевидна тяга к повышению точности (datetime мягко говоря больше time_t)
и скорее это long надо приводить для сравнения времён. Если компилятор чё-то оптимизирует, то он это выкинет, а задаток на будущее останется :-)
 
Maxim Kuznetsov:
пока я не вижу проблем.
Но очевидна тяга к повышению точности (datetime мягко говоря больше time_t)
и скорее это long надо приводить для сравнения времён. Если компилятор чё-то оптимизирует, то он это выкинет, а задаток на будущее останется :-)

Значит можно использовать не изменяя без последствий? 

 
Vitaly Muzichenko:

Значит можно использовать не изменяя без последствий? 

ну как это без последствий :-)

за long x = TimeCurrent(); уже "бьют по морде" в приличной компании :-) Мало того что типы по физике разные, так они ещё и разноразмерные и вы приводите большую размерность к меньшей.

а так то да, все секунды из (datetime)TimeCurrent вроде помещаются в long

 
Maxim Kuznetsov:

есть замечательная функция StringFind() - ищите вхождение строки "#" или сразу "from #"

Нашли
StringFind(OrderComment(),"to #",0)


и что с ней делать? 

 В StringSubstr  всё понятно, сразу получили цифры - тикет, а здесь в StringFind что, мы и так знаем что в комменте есть "to #"

 
PolarSeaman:
Нашли


и что с ней делать? 

 В StringSubstr  всё понятно, сразу получили цифры - тикет, а здесь в StringFind что, мы и так знаем что в комменте есть "to #"

но не знаем где :-) StringFind - скажет что искомый "to #" точно вот с такой позиции. или нету его вовсе. Никогда не полагайтесь на то что приходит из сети и вы лично/персонально не контролируете :-) Мы же тут в деньги играем - тут всё серьёзно

 
Maxim Kuznetsov:

но не знаем где :-) StringFind - скажет что искомый "to #" точно вот с такой позиции. или нету его вовсе. Никогда не полагайтесь на то что приходит из сети и вы лично/персонально не контролируете :-) Мы же тут в деньги играем - тут всё серьёзно

нужно выделить тикет из комментария, а "to #" выкинуть.

нужно тикет открытой позиции сравнить с тикетом содержащемся в комментарии закрытой позиции 

зачем мы его "to #" вообще ищем?

 

Функция StringSubstr возвращает нужную часть комментария. Почему эта функция возвращает профит открытой позиции а не закрытой? Перебираю же в MODE_HISTORY

double prof_cl_pos(string sy="0", int op=-1, int mn=-1) {
  datetime ta;
  int      i, k=OrdersHistoryTotal();
  double profit_=0;
  string comment="";
  string substr="";

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              comment=OrderComment();
               substr = StringSubstr(comment, 4, 9);
              if (ticket_op_pos(Symbol(), -1,mn)==substr)
              profit_=OrderProfit();
            }
          }
        }
      }
    }
  }
  return(profit_);
}
 
Vitaly Muzichenko:

Чем пагубна такая конструкция?

Или лучше привести datetime к типу long?

datetime это ulong - вот туда и нужно его складывать.
 
PolarSeaman:

нужно выделить тикет из комментария, а "to #" выкинуть.

нужно тикет открытой позиции сравнить с тикетом содержащемся в комментарии закрытой позиции 

зачем мы его "to #" вообще ищем?

Ищем для того, чтобы понять "а есть ли вообще to# или from#" в комментарии. Если нету, то этот ордер не является частью закрытой позиции, и он нам не нужен.

Если же StringFind(OrderComment(),"#to") больше, либо равен нулю, значит в комментарии есть искомая подстрока, и вот только теперь можно вычислить позицию номера тикета в этой строке.

 
PolarSeaman:

Функция StringSubstr возвращает нужную часть комментария. Почему эта функция возвращает профит открытой позиции а не закрытой? Перебираю же в MODE_HISTORY

А это и есть ответ на этот вопрос

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

PolarSeaman, 2018.04.07 00:25

Нашли
StringFind(OrderComment(),"to #",0)


и что с ней делать? 

 В StringSubstr  всё понятно, сразу получили цифры - тикет, а здесь в StringFind что, мы и так знаем что в комменте есть "to #"


А вот если нету, то получишь совсем не то что ожидалось.