Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1055

 
Igor Makanu:

это все ясно, но как правильно вычислить разницу 2-х цен в целых пунктах?

Тут можно округление применять. А в какую сторону, или просто до целого уже вам решать.

int pips_profit = (int)MathFloor(OrderOpenPrice()-OrderClosePrice())/_Point);
 
Igor Makanu:

а точно это корректно? в цикле перебора ордеров будет каждый раз у Вас SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT); пересчитан, ведь OrderSymbol() будет каждый раз разный?

Так там задача немного другая - суммарный профит в пунктах по всем символам.

 
Konstantin Nikitin:

Тут можно округление применять. А в какую сторону, или просто до целого уже вам решать.


ну да, забыл такиеконструкции, в Кимовских функциях расчета лота было правильное округление
fxsaber:

Так там задача немного другая - суммарный профит в пунктах по всем символам.

ОК, но почему const - как компилятор себя ведет если в цикле будет изменяться const ?

PS: код читаемый, но проверять нужно, не использовал никогда такое

 
Igor Makanu:

ОК, но почему const - как компилятор себя ведет если в цикле будет изменяться const ?

PS: код читаемый, но проверять нужно, не использовал никогда такое

На каждом шаге будет создаваться переменная. const - на этом шаге не планируется где-либо меняться.

 
fxsaber:

На каждом шаге будет создавать переменная. const - на этом шаге не планируется где-либо меняться.

шаг это итерация цикла?

все равно не понятно, как будет себя вести такая конструкция, нужен скрипт для проверки

 
fxsaber:

Так там задача немного другая - суммарный профит в пунктах по всем символам.

Ну тогда так

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

У меня высчитывается пробыль в пунках одной позиции, но применить для себя думаю проблем не будет

 
Igor Makanu:

шаг это итерация цикла?

да.

все равно не понятно, как будет себя вести такая конструкция, нужен скрипт для проверки

 Вот пример удобного использования жизни переменной

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

Обсуждение статьи "LifeHack для трейдера: замешиваем ForEach на дефайнах (#define)"

fxsaber, 2018.02.14 10:54

Замер производительности

#define BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

double GetAsk()
{
  static MqlTick tick = {0};
  
  return(SymbolInfoTick(Symbol(),tick) ? tick.ask : 0);
}

#define AMOUNT 1e6

void OnStart()
{
  double Sum = 0;
  
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += GetAsk())
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += SymbolInfoDouble(_Symbol, SYMBOL_ASK))
  
  Print(Sum);
}


Результат

Time[for(inti=0;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time[for(inti=0;i<AMOUNT;i++)Sum+=SymbolInfoDouble(_Symbol,SYMBOL_ASK)] = 162606
 

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

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Ну тогда так

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

У меня высчитывается пробыль в пунках одной позиции, но применить для себя думаю проблем не будет

Это называется перевод профита с издержками в ТЕКУЩИЕ (не на момент закрытия) пункты.

 
fxsaber:

Это называется перевод профита с издержками в ТЕКУЩИЕ (не на момент закрытия) пункты.

Так ему профит в пункты перевести нужно. При расчете закрытых все равно нужно исходить из стоимости пункта. Профит в пунктах, не обязательно должен равняться разницы пунктов между ценами открытия и закрытия.

 
Konstantin Nikitin:

Так ему профит в пункты перевести нужно.

Иногда считают, что профит = OrderProfit().

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

Стоимость пункта на момент закрытия не равна стоимости пункта на момент расчета. Более того, на момент расчета символа может просто не быть в Обзоре рынка.

Поэтому и величины пунктов и стоимости их на момент закрытия вычисляются.

Причина обращения: