错误、漏洞、问题 - 页 33

 
Urain:

这是一个值得注意的建议

虽然从普通逻辑的角度来看,这就像用右手抓左耳一样(但这不是由你决定的,而是由开发者决定的)。

为什么可以调用非本地仪器的数据?

如果你仍然需要创建自定义指标,并从所需的符号中调用它们,一般来说,结论是认为头我买。

这种调用的可能性是必要的,开发人员在编写指数时肯定不能假设这种方法。

我指的是用户指标参数中的工具指示(而不是在他们看来应该在iCustom()参数中)。


PS

iCustom()在工作中的优先权似乎最初被赋予了机械交易,事实上,它假设一些时刻将被考虑,一些行动将在专家顾问中执行,然后才会为自定义指标调用iCustom()。

否则,所有的工作和责任都落在执行indyke代码的程序员身上(这可能会导致致命的错误和后果,因为太多花哨的indyke可能导致整个系统的制动或崩溃)。

 
Urain:

值得关注的建议

但同样,我可能会用日元的数据来调用欧元的预备指标(例如,没有足够的日元数据)。

我没有这个长度的数据,它能告诉我什么?"?"同一首歌。

在本地工具中处理错误和瓶颈要容易得多,初步检查和最终检查是在专家顾问或数据请求指标的调用前后进行。

我假设有第二种方式,从我的观点来看,这从根本上是错误的。根据它的逻辑,你需要在指标中创建一个或多个函数(从计算器中调用),在其中计算你需要的一切,并将结果返回给计算器。

PS

但问题是--你可以计算出任意符号的条数。但其他事情呢?

 
Prival:

错误。描述。ATS总是在市场上(滚动的双手0.2)。

测试模式下,所有滴答声。一切都很正常。

测试模式,通过打开价格。同一片。

出于某种原因,它分成了两个交易。也许这只是它的显示方式,但这是不正确的。它不应该是这样的。

开头的 命令与结尾的命令重新排列。应该按照这样的顺序

- 关闭位置

- 修改职位

- 开放的职位

那么你的平仓和开仓就会在同一个柱子上。

 
gpwr:

将开头的命令与结尾的命令重新排列。顺序应该是这样的

- 关闭位置

- 修改职位

- 开放的职位

那么你的收盘和开盘将在同一个柱子上。

如果市场是买入0.1,我就开出卖出0.2。这个操作的结果应该是一次交易的0.1.1,而不是两次。

我想开发商明白我在说什么。

 

我写了这样的代码

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "I1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "I2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         I1Buffer[];
double         I2Buffer[];
int OnInit()
  {
   SetIndexBuffer(0,I1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,I2Buffer,INDICATOR_DATA);
   return(0);
  }

int OnCalculate (const int rates_total,      // размер массива price[]
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const int begin,            // откуда начинаются значимые данные
                 const double& price[])      // массив для расчета
  {
   string Symbol_1="EURUSD",Symbol_2="GBPUSD";
   if(rates_total<1) return(0);
   double Arr1[],Arr2[];
   int end,rez0,rez1;
   end=MathMin((int)SeriesInfoInteger(Symbol_1,0,SERIES_BARS_COUNT)-1,(int)SeriesInfoInteger(Symbol_2,0,SERIES_BARS_COUNT)-1);
   end=MathMin(end,rates_total-prev_calculated+1);
   rez0=CopyClose(Symbol_1,PERIOD_CURRENT, 0,end, Arr1);
   if(rez0==-1){Print("Ошибка копирования ",Symbol_1," ",GetLastError()); return(0);}
   rez1=CopyClose(Symbol_2,PERIOD_CURRENT, 0,end, Arr2);
   if(rez1==-1){Print("Ошибка копирования ",Symbol_2," ",GetLastError()); return(0);}
   if(rez1!=rez0){Print("Ошибка Синхронизации"); return(0);}
  
   ArraySetAsSeries(Arr1,true);
   ArraySetAsSeries(Arr2,true);
     
   int li=rates_total-1;  
   for(int i=0;i<end;i++)
     {      
      I1Buffer[li]=Arr1[i]+0.26;
      I2Buffer[li]=Arr2[i];
      li--;
     }
   return(rates_total);
  }

它似乎工作得很好,但它是否考虑到了一切,我不知道。
如果是这样,这里有一个变体给你。
如果不正确,请纠正。

 

现在我有一个问题。

为什么从专家顾问中调用该指标,其数值与指标不一致。

即指标为1.5123,EA为1.5117。

我试图使用它,因为我不知道如何阅读它,我不想错过它。

static int Handle;
int bars;
void OnInit()
  {
   Handle=iCustom(NULL,0,"proverka");
  }

void OnTick()
  {
   if(bars==Bars(_Symbol,_Period))return;
   bars=Bars(_Symbol,_Period);
   double buf1[],buf2[];    
   if(CopyBuffer(Handle,0,0,2,buf1)<0 || CopyBuffer(Handle,1,0,2,buf2)<0)Alert("Ошибка копирования значений индикаторных буферов ",GetLastError(),"!!");
   Print("Время "+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES),"   буф1-",buf1[0],"   буф2-",buf2[0]);
  }

和图像

而第一个缓冲区,也就是它所运行的仪器,也是重合的。

附加的文件:
prover.mq5  1 kb
proverka.mq5  2 kb
 
ddd06:

现在我有一个问题。

为什么从专家顾问中调用该指标,其数值与指标不一致。

即指标为1.5123,EA为1.5117。

下面是EA的代码,除了在附件中重复的代码。

而你看的是指标的前值。我怀疑它正好是1.5117。按索引1取当前(最后)值。或者指定数组 SetAsSeries(bufX,true)
 
stringo:
而你看一下之前的指标值。
1.512380 - 当前 1.512310 - 前期
 
ddd06:

我写了这样的代码

它似乎工作得很好,但是否考虑到了所有我不知道。
如果是这样,这里有一个变体给你。
如果不正确,请纠正。

是的,我重做的版本也有对数组长度的检查,但我像往常一样迷失在系列的方向上。

结果发现,绘图继续进行,但由于阵列的长度小于图表的长度,绘图从末端到中间(或左右)。

这就是为什么我有一个印象,就是没有渲染。

总的来说,我怀疑在这个地方会有很长一段时间的混乱。

因为同样的问题出现在mql4.com的访问者身上,现在他们正在这里下载。

 
Urain:

这就对了。

这很好。我认为这个代码很简单,而且是本地的,所以你可以把它作为一个基础。

关于EA的问题--我应该写信给服务台 吗?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.