初学者的问题 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:

所以那里的任务略有不同--所有符号的总利润,以点为单位。

好的,但为什么是常数呢?如果循环会改变常数,编译器会有什么表现?

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:

一个步骤是一个周期的迭代?

是的。

我们还不清楚这样的结构会有什么表现,我们需要一个脚本来检查

下面是一个方便使用变量寿命的例子

关于交易、自动交易系统和策略测试的论坛

关于 "交易者的生活秘诀:将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 1 e6

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()。

当计算一个封闭的符号时,你仍然应该使用点的价值。利润的点值不一定要等于开盘价收盘价 之间的点差。

收盘时的点值不等于计算时的点值。此外,在计算时,该符号可能根本不在市场观察中。

这就是为什么要计算点的价值和它们在关闭时的价值。