错误、漏洞、问题 - 页 31

 
Urain:
它可以,但有时它也可以,尽管当我设置3时,短名称显示3个值,而我只想要一个主缓冲区。

那么也许像这样。

#property indicator_buffers 3
#property indicator_plots   1
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,S,INDICATOR_CALCULATIONS);

图上只显示一个值。

 
DC2008:

那么也许会是这样的。

图中只显示一个值。

结果就是这样,指标的简称显示了3个数字,而绘制一个的缓冲区,它存储了所有你需要知道的东西。

问题是,在4中,你只需请求鼠标在所需栏上的值,而在这里,我必须下载整个缓冲区并将其存储在某个地方。

这种存储对于指标需求来说是没有必要的。但我不知道如何接收波的价值。

 
DC2008:

那么也许像这样。

图上只显示一个值。

也有故障的....
 
Interesting:

那里不是初始化的问题。这甚至不是马舍克所说的那两条线的问题。

即使我们假设真的需要SYMBOL参数(我个人对此表示怀疑),使用缓冲区的工作也是很蹩脚的,而且我甚至没有说到计算器块......

我看到该指标显示的是它所运行的错误仪器的线性回归 角的值。

和输入中规定的那个,所以希望你能隐藏检查器。

现在,在另一方面,聪明地告诉我,你认为在计算中发生的事情有什么不协调的地方?

我并不声称它是所有的权利(因为只是学习五和自然蒸煮,因为很多)。

我想到的第一件事是,不同对的历史长度是不同的,因此会出现故障。

但开发人员向我保证,终端将自行加载所有必要的数据。

 
Urain:

问题是,在4中,你可以只要求在必要的条上的波形值,而在这里你必须加载整个缓冲区。

问题是,在4中,你可以简单地请求所需条形图上的波形值,但在这里,你必须下载整个缓冲区并将其存储在某处。

我必须加载整个缓冲区,但我不需要它来满足我的指标需求。我不知道如何以其他方式得到它。

我可以把它们弄好,或几乎弄好。对于所有其他的缓冲区,我们可以计算出(系列不使用,什么是奇怪的)。但是,计算器中发生的事情是一个大问题...
 
Urain:

我看到该指标显示的是它所运行的错误仪器的线性回归角的值。

但在直觉中规定的那个,所以希望你能隐藏检查器。

现在,在寒冷的环境中,合理地告诉我,你在计算中发生的事情中看到了什么是荒谬的?

我并不声称它是所有的权利(因为只是学习五和自然蒸煮,因为很多)。

我想到的第一件事是,在不同对的历史长度不同,因此出现了故障。

开发者向我保证,终端将自行加载所有必要的信息。


有什么可争论的呢?我们拿着计算器的帽子,看看我们在那里看到什么,这就是我们看到的。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

在这之后,还有对酒吧的控制...

   int count=rates_total-prev_calculated;
   if(count==0)count=1;
如果你不知道密码,你会得到一个警告。那么告诉我,逻辑在哪里?
 

我已经把计算方法改写成这样了。

  {
//---
   int count=rates_total-prev_calculated;
   if(count>_Bars())count=_Bars()-1;
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<count;i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){return(Bars(symbol,_Period));}
错误信息消失了,但它仍然不能正常工作。
 

这就是 我们为类似的火鸡绞尽脑汁的地方。看看它的结果是什么

 
Urain:

我已经把计算方法改写成这样了。

错误记录消失了,但它仍然不能正常工作。

唯一正确的方法是非常简单的。

你写了一个100%有效的指标,它是在没有 "符号 "参数的情况下经典地完成的,也就是说,它是用当前的符号和周期计算的。

之后,在专家顾问(如果提供机械操作)或计算器(如果有必要在非计算器的图形上显示信息)中调用这样的BASIC计算器。

PS

否则,如果计算器或一个单独的函数必须做一个额外的计算,然后将结果与当前图形数据联系起来......

 
Urain:

我已经把计算方法改写成这样了。

错误信息消失了,但它仍然不能正常工作。

这可能更好。

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

它似乎可以正常工作。