iCustom的详细解释 - 页 2

 
NewCoder47:


谢谢你,RaptorUK,然而,我遇到的困难是实际的编码。我是MQL4的新手,只做了几个月,还在学习中 - 所以我需要一个简单的编码解释,以及如何在指标中设置它。

你没看我写的吗?"不需要对指标做任何改变......EA只是在它需要的移位值上访问它需要的缓冲区。"
 
dabbler:
不,你不能。我刚刚试过。如果你在逗号之间留出一个空位,省去一个参数,它就不会被编译。
我知道我应该纠正最后一句话。把参数 的逗号去掉。
 
ubzen:
我知道我应该纠正最后一句话。去掉参数中的逗号。

我只是在我的指标文件夹中把这个指标编译为TOR.mqh。然后我在专家文件夹中写了以下代码。

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
在没有传递任何参数 的情况下,它对我来说编译得很好。
 
ubzen:

我只是在我的指标文件夹中把这个指标编译为TOR.mqh。然后我在专家文件夹中写了以下代码。

在没有传递任何参数的情况下,它编译 得很好。
但它是否真的有效?
 
dabbler:
但它真的有用吗?
是的。一直如此。我说的是Extern Values。我猜你说的是缓冲器。
 

谢谢你们的帮助,我明天晚上去看看,看能不能弄明白。

谢谢

 

嘿,伙计们。我似乎仍然有一些困难。

以下是指标中的代码(我没有改变指标中的任何内容),我展示的是我认为相关的部分。请注意,这些代码在指标中并不是相互关联的,还有很多被我剥离的部分。

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];


//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 

现在,这是EA中的代码

                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(Null,0,"SFX", , ,0,0);
                double     stddevma = iCustom(Null,0,"SFX", , ,1,0);
                

我不明白的是参数 部分。我应该在这里输入什么值?这是我正在纠结的部分。我想在EA的下一步测试中使用STDBuffer和stddevma的值。例如,我是否包括Pair1(它在指标的其他地方被声明为当前图表)?因为它在iCustom的开头已经被声明为Null。

另外,是否有任何方法可以实际看到哪些值被发送到EA中?

如果有任何帮助,我将不胜感激。

谢谢

 
NewCoder47:

以下是指标中的代码(我没有改变指标中的任何内容),我展示的是我认为相关的部分。请注意,这些代码在指标中并不是相互关联的,还有很多被我删除的部分。

现在,这是EA中的代码

我不明白的是参数部分。我应该在这里输入什么值?这是我正在纠结的部分。我想在EA的下一步测试中使用STDBuffer和stddevma的值。例如,我是否包括Pair1(它在指标的其他地方被声明为当前图表)?因为它在iCustom.Net的开头已经被声明为Null。

没有 显示该指标的相关部分。你需要显示所有的extern 语句和它们出现的顺序。

你需要显示所有的SetIndexBuffer 语句。当你明白为什么需要显示这些时,你可能会明白你要做什么。

哦,你在iCustom 语句中的逗号之间不能有空白,它不会被编译。

试着重新阅读iCustom 的文档,考虑到它最初是俄文的。你必须仔细研究它。

 
dabbler:

没有 显示指标的相关部分。你需要显示所有的extern 语句和它们出现的顺序。

你需要显示所有的SetIndexBuffer 语句。当你明白为什么需要显示这些时,你可能会明白你要做什么。

哦,你不能在iCustom 语句中的逗号之间出现空白,它将无法编译。

试着重新阅读iCustom 文档,考虑到它最初是俄文的。你必须仔细研究它。

谢谢Dabbler。我已经附上了完整的EA和指标。我已经阅读了iCustom的声明,除了参数 部分,其他都明白了,它非常模糊。由于我现在只是在测试,所以这个EA非常简陋。

谢谢。

迈克。

指标。

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_width1  1

//---- indicator parameters
extern string PairName = "";   // Leave blank for the pair of the chart, enter other pair name to compare correlated pairs

extern int StdDev.MA.Period=12;  // D1=20
extern int StdDev.MA.Shift=0;    //
extern int StdDev.MA.Method = 0; // 0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int StdDev.MA.Price = 0;  // 0 Close price, 1 Open price, 2 High price, 3 Low price, 4 Median price, (high+low)/2, 5 Typical price, (high+low+close)/3, 6 Weighted close price, (high+low+close+close)/4

extern int MA.Fast.Period = 3;
extern int MA.Fast.Method = 2;   //  0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int MA.Fast.Shift = 0;

extern bool CheckOncePerBar = true;

int i, limit, counted_bars;
static string Pair1;

datetime CurrentTimeStamp;

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorDigits(Digits+1);
     
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE); // 
   SetIndexStyle(1,DRAW_LINE);

      
//---- indicator buffers mapping
   SetIndexBuffer(0, STDBuffer);
   SetIndexBuffer(1, stddevma);

   
   if (PairName == "") Pair1 = Symbol();
   else Pair1 = PairName;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("SFX TOR: "+Pair1+"("+StdDev.MA.Period+")");
   SetIndexLabel(0,"StdDev");
   SetIndexLabel(1,"StdDev MA");

//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {

   counted_bars=IndicatorCounted();
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 
    
//Execute on bar Open
    if( CheckOncePerBar == true ){
      if( CurrentTimeStamp == Time[0] )
         return( 0 );
   }
   
   CurrentTimeStamp = Time [0];
   
          
//---- done
   return(0);
  }

EA。

//+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                                       Mike Clegg |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright "Mike Clegg"


// External variables
extern double LotSize = 1;

extern int MagicNumber = 123;

extern int FastMAPeriod = 12;
extern int SlowMAPeriod = 26;


// Global variables
int BuyTicket;
int SellTicket;


// Start function
int start()
        {
                // Moving averages
                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(NULL,0,"SFX",0,0);
      double     stddevma = iCustom(NULL,0,"SFX",1,0);
                
                // Buy order 
                if(FastMA > SlowMA && BuyTicket == 0 && stddevma > STDBuffer)
                        {PlaySound("alert.wav");
         Alert(Symbol(),"All Crossing",Period(),"All Crossing");
                        }
                                
                return(0);
        }

请忽略EA是在做指标的工作这一事实,正如我所说,我目前正在测试。

 
NewCoder47:

谢谢Dabbler。我已经附上了完整的EA和指标。我已经阅读了iCustom上的声明,除了参数部分,我理解所有的内容,它是非常模糊的。由于我现在只是在测试,所以该EA非常简陋。

谢谢。

迈克。

指标。

EA。

请忽略EA正在做指标的工作这一事实,正如我所说,我目前正在测试。


你在这里有一些很好的建议,但你仍然在挣扎....。

要知道iCustom是如何与你的指标一起工作的,你可以做一个helpEA或helpIndicator来检查指标的缓冲区内的内容。

这样你就能学到最多关于MT4中的检查命令。 阅读这里https://www.mql5.com/en/forum/138379

做一个这样的东西,你将学会如何在你想做的EA中使用它.....。

原因: