新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1598

 
Maxim Kuznetsov:

我想补充的是,不能保证终端拥有并将提供足够的历史记录。

在上述例子中,没有提及历史

所以可以保证OrderSelect()的结果为真。

UPD: 4中的OrderSelect 工作得很好,测试了一次--对于市场订单,进入订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但正如他们所说的 "所有的脚尖都是不同的",我喜欢它--保持它。

 

你好,需要提供每笔交易的缩减数据。

谁能满足一个脚本来收集这样的统计数据并以报告的形式输出?

谢谢你

 
законопослушный гражданин:

你好,需要提供每笔交易的缩减数据。

谁能满足一个脚本来收集这样的统计数据并以报告的形式输出?

谢谢

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

它是 "手写的",未经测试,充满了错误:-)只需根据你的需要调整它并使用它。

 
Maxim Kuznetsov:

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

手写的,没有经过检查,充满了错误:-) 根据你的需要和使用情况进行调整。

谢谢你,我会努力去想办法的!

 
@Igor Makanu,非常感谢你对终端中的排序问题的回答。我可能会把它们保存为一个结构数组,然后自己分类。我的疑虑主要是因为我担心在每一次打勾时进行的这种操作会对性能产生明显的负面影响。
 
Janis Ozols:
@Igor Makanu,非常感谢你对终端中的排序问题的回答。我可能会把它们保存为一个结构数组,然后自己分类。怀疑主要是因为我担心在每一次打勾时进行的这种操作会对性能产生明显的负面影响。

那么,为什么要在每次打勾时进行分类?只有在条目数量改变或列表完全改变时才够用...

 
下午好 请帮助我理解为什么从导航仪下载的指标不能拖到图表上。它在目录中。
附加的文件:
image002.jpg  38 kb
 
下午。如果没有将指标工具从市场上自动加载到交易终端,问题出在哪里?
 
Igor Makanu:

在上述例子中,没有提及历史

所以可以保证OrderSelect()的结果为真。

UPD:OrderSelect in 4工作得非常好,我曾经测试过 - 对于市场订单,访问订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但就像他们说的 "所有的脚趾都是不同的",如果你喜欢,就保留它吧

主持人Artem没有争辩。主持人Artem正在辩论 :)
 
void OnTick()
  {
    if(isCrossing() == 1)          
      
    ... 

    if(isCrossing() == 2)
      
    ... 
  }

int isCrossing(){  
  double ma = iMA(NULL, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0);
  double low = iLow(Symbol(), g_timeFrame, 0);
  double high = iHigh(Symbol(), g_timeFrame, 0);

  if(g_barTime < iTime(NULL,g_timeFrame,0) && high > ma && Bid <= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 1;
  } 
  
  if(g_barTime < iTime(NULL,g_timeFrame,0) && low < ma && Bid >= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 2;
  }
   
  return 0;
}
为什么isCrossing()不返回2 呢?isCrossing() 本身有第二个if 条目,但当isCrossing()==2 时,OnTick( ) 中没有if 条目。这是什么乱七八糟的东西...
原因: