[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 141

 
artmedia70:

IMHO - 最好是找到你的订单,看看它是否在市场上或关闭,以及它是如何关闭的,在采取,停止或手动。从这里你可以开始向不同的方向跳舞。

那么一切都将是准确的。但全局变量可能会丢失...


你说的 "失去变量 "是什么意思? 你是说找到它,让EA也检查这个吗?
 
Begemot7:
请澄清你所说的失去变量是什么意思,并在让EA也检查的意义上找到它?

在所有用于真实和模拟交易的EA中,我不在变量中存储任何关于订单和头寸的重要数据。我最多可以在订单注释中写入数据,这是EA的逻辑所必需的。当我需要了解是否有头寸,有多少头寸,是否有订单,已关闭的头寸,如何关闭,我在市场头寸/订单或历史数据上运行一个循环,找到我需要的订单并检索我需要的信息。因此,我不把所有的重要信息存储在变量中,因为在计算机意外关闭时可能会丢失。它总是可以在以后被检索到。我试着把它储存在终端的全局变量 中--结果发现,当计算机崩溃/挂起时,这些信息并不总是保存在那里。而对我来说,不断监督写出新鲜的信息是太麻烦了......。我发现在我需要的时候更容易找到我需要的东西。
 
PapaYozh:

你可以用函数得到指示器所落下的点的坐标。

WindowXOnDropped()

WindowYOnDropped()

价格和时间。

跌价窗口(WindowPriceOnDropped)。

掉线时间(WindowTimeOnDropped)。


我会试着把它加进去。一个例子是类似...
 

我正面临着一个奇怪的情况。请你告诉我...

有三个自写的EA。策略是一样的,只是执行方式不同,取决于工具。货币对:欧元兑美元、欧元兑英镑和美元兑日元。我与前两个人有良好的工作关系,但最后一个人却没有工作。经纪人是FX-Trend。我的账户是一个最小手数为0.01的迷你账户(到目前为止一直用于测试)。

同时:在模拟账户上一切正常。当我在测试器中运行它时,交易是在测试器中的同一个真实账户 上进行的。但在真正的交易过程中,他们并没有这样做。订单开盘图标记(和所有其他标记)成功放置。日志中绝对没有任何内容。

这一切都在VPS上运行。


我想这就是所有的信息。如果有任何关于挖掘方向的提示,我将不胜感激。

 
Sepulca:

最好是这样(万一EA被重新启动)。



如果只有一个命令,我们可以不这样做。


如果(OrdersTotal()< 1)

{

}

......

 
artmedia70:
在所有真实和模拟的EA中,我不在变量中存储任何关于订单和头寸的重要数据。我最多只能将EA逻辑所需的数据写在订单注释中。当我需要了解是否有头寸,有多少头寸,是否有订单,已关闭的头寸,如何关闭,我在市场头寸/订单或历史数据上运行一个循环,找到我需要的订单并检索我需要的信息。因此,我不把所有的重要信息存储在变量中,因为在计算机意外关闭时可能会丢失。它总是可以在以后被检索到。我试着把它储存在终端的全局变量中--结果发现,当计算机崩溃/挂起时,这些信息并不总是保存在那里。而对我来说,不断监督写出新鲜的信息是太麻烦了......。我发现在我需要的时候更容易找到我需要的东西。

这就对了......要格外放心。当然,更正确的做法是通过所有的订单。但这是一个具体的案例。如果我们失去了GlobalVariables,我们应该离开这家经纪公司。GlobalVariables不是存储在你的电脑上,而是存储在经纪公司里,如果你不去动它们,最长可达三个月。还是我错了?
 
看来我自己已经想明白了:)。他们说的是真的--最主要的是要制定它。一般来说,在市场上执行 时,我们将止损和持仓设置为零。然后我们把它设置好。也许有人会发现它是有用的...
 
Sepulca:
这就对了...额外的保证。当然,正确的做法是通过所有的订单。但这是一个具体的案例。而如果GlobalVariables丢失,我们应该离开这家经纪公司。

你的意思是--这家经纪公司是故意这样做的吗?有人告诉我,MT4是一个很容易被经纪人控制的终端,因此可能会有很多作弊行为,谁听说过这种情况?
 
Begemot7:

我的意思是DC是故意这样做的吗?有人告诉我,MT4是一个很容易被经纪人控制的终端,因此有很多作弊的可能,谁听说过这个?


我不太明白。DC销毁你的全局变量有什么意义呢?当然,除非你已经建立了一堆x......。引自文件。
"客户终端的全局变量不应该与在MQL4程序的全局范围内声明的变量混在一起。 全局变量在客户终端中存在4周,从最后一次访问开始,之后会自动删除。对全局变量的访问不仅是设置一个新的值,而且是读取全局变量的值。客户终端的全局变量可以从客户终端启动的所有MQL4程序中同时访问。"如果你用0.01或0.1手来工作,没有人会压迫你,因为它是一个trifle....。但如果你在真实账户上开了100手,你最好准备好为你的钱而战。

 

需要专业人士的帮助!!我已经为这个代码绞尽脑汁了......。有4个缓冲区,其中2个工作正常(Buffer &buffer2),但另外2个不正常。当某个条件发生时,缓冲区被填满,当这个值向上为一个,向下为第二个时,缓冲区被移除(归零),但剩下的2个缓冲区仍挂在图表中。你能告诉我如何修复它吗?

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}