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

 
Andrey Barinov:

这就是它的编译方式。


谢谢。我天真地以为,修正一打编译错误就能把一个工作的mql4代码变成一个mql5指标)

它不想显示一天中的最大值、最小值。它离目标有多远?

 
bij:

谢谢。我天真地以为,修正一打编译错误就能让一个工作的mql4代码变成一个mql5指标)

它不想显示至少一天的时间。它离目标有多远?

我不知道 :)

尝试在OnCalculate开始时使用ArraySetAsSeries来扩展缓冲区的数组

 
bij:

谢谢。我天真地以为,修正一打编译错误就能让一个工作的mql4代码变成一个mql5指标)

它不想显示一天中的最大值、最小值。它离目标有多远?

有如此大量的代码行,只是为了显示当天的高点和低点?
 
Alexey Viktorov:
仅仅为了显示一天中的高点和低点,就有如此庞大的代码行?
是的,还有当天的收盘价,但它是在历史上,而不仅仅是前一天的。这就是困难所在。
 
bij:
是的,也是当天的收盘,但这是在历史上,而不仅仅是前一天的。这是最棘手的部分。

这是你的代码吗?还是按顺序写的呢?

你能给我看一下它在MT4中的快照吗?

 
Alexey Viktorov:

这是你的代码吗?还是按顺序写的呢?

你能给我看一下它在MT4中的快照吗?

该指标来自网络。我手头没有MT4,我就用文字告诉你。从每天的开始到结束,按当天的最高价、最低价和收盘价排列。但是,我不想在当天的收盘价 上画线,而是想在21:00的小节收盘价上画线。

也许真的可以让它变得更容易,而不是矫揉造作。

 

我一次关闭4个头寸,如何在计算损失的功能中把它们算作一个连续的头寸?

由于滑移,它们可能会以相同的价格收盘,时间也可能不同。

试试吧。

int CountLOS()
  {
  double priceold=0;
  datetime datold;
   int count=0;
   for(int trade=OrdersHistoryTotal()-1;trade>=0; trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            if(OrderMagicNumber()==_MagicNumber)
              {
               if(OrderProfit()<=0&&datold !=OrderCloseTime()) {count++; datold =OrderCloseTime();}
               //if(OrderProfit()<=0&&priceold !=OrderClosePrice()) {count++; priceold =OrderClosePrice();}
               else  break;
              }
           }
        }
     }
   return(count);
  }
 
lil_lil:

我一次关闭4个头寸,如何在计算损失的功能中把它们算作一个连续的头寸?

由于滑移,它们可能不会以相同的价格收盘,而且时间可能不同。

因为滑点的价格是不同的,时间也是不同的;一个是在一秒钟结束时收盘,而另一个是在下一秒钟开始时收盘。尽量在收盘时记录订单的代号。你可以将它们记录在一个文件中...

 
lil_lil:

我一次关闭4个头寸,如何在计算损失的功能中把它们算作一个连续的头寸?

由于滑移,它们可能会以相同的价格收盘,时间也可能不同。

审判。

我循环查看最后关闭的那些。如果最后一个关闭的是负数,那么我就看120秒(2分钟)内所有关闭的,并计算总利润。

 
lil_lil:

我一次关闭4个头寸,如何在计算损失的功能中把它们算作一个连续的头寸?

由于滑移,它们可能会以相同的价格收盘,时间也可能不同。

我试过了。

类似这样的事情。

 datetime _oct=0,time=0,_pt=0;
 int _cnt=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if(OrderSymbol()==symb && OrderMagicNumber()==mg) {
     int OrdersType=OrderType();
     // BUY && SELL
     if(OrdersType<=1) {
       CopyTime(OrderSymbol(),PERIOD_D1,0,1,itime);
       if((OrderCloseTime()>=itime[0] && OrderCloseTime()<itime[0]+86400)) {
         _Get.Hist.BS._ProfitDaily+=OrderProfit()+OrderCommission()+OrderSwap(); // Profit за сегодня
       }
       // 120 секунд разницы между закрытием первой и последней в сетке
       _oct=OrderCloseTime();
       if(_cnt==0 && _oct!=0) time=_oct;
        if(_oct+120>=time) {
          _Get.Hist.BS._ProfitOldClose+=OrderProfit()+OrderSwap()+OrderCommission(); // Profit последнего трейда
          _cnt++;
        }
     }
  }}} 
原因: