我将免费编写指标 - 页 44

 

对指标的帮助


我想保持原样,但把它重做为两个缓冲区


#属性 indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

#property indicator_maximum 1.4

#property indicator_level1 0

#property indicator_minimum -1.2


//------- 外部指标参数 -------------------------------

外部int CCI_Period_0 = 14; // 当前时间框架的CCI周期。

extern int Level_0 = 100; // 当前TF的CCI水平。

extern int TF_1 = 60; // 第一个时间范围内的分钟数

extern int CCI_Period_1 = 14; // 第一个TF的CCI周期

extern int Level_1 = 100; // 第一个TF的CCI水平。

extern int TF_2 = 240; // 第二个TF的分钟数

extern int CCI_Period_2 = 14; // 第二个TF的CCI周期

extern int Level_2 = 100; // 第二个TF的CCI水平。

extern int NumberOfBars = 10000; //条数(0-全部)。


//------- 指示器缓冲区 ------------------------------------------

double buf0[];

//+------------------------------------------------------------------+

//|自定义指标初始化功能

//+------------------------------------------------------------------+

空白的init()

{

IndicatorDigits(1);


SetIndexBuffer(0,buf0)。

SetIndexLabel(0, "i-3CCI-h")。

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2)。

SetIndexEmptyValue(0,0)。

}

//+------------------------------------------------------------------+

//|自定义指标去初始化功能|

//+------------------------------------------------------------------+

空白的deinit()

{

评论(")。

}

//+------------------------------------------------------------------+

//|自定义指标迭代函数|

//+------------------------------------------------------------------+

空白启动()。

{

双重cci0,cci1,cci2。

int nb1,nb2。

int LoopBegin,sh;


如果(NumberOfBars==0) LoopBegin=Bars-1;

否则LoopBegin=NumberOfBars-1。

LoopBegin=MathMin(Bars-1,LoopBegin)。


for(sh=LoopBegin; sh>=0; sh--)

{

nb1=iBarShift(NULL, TF_1, Time[sh], False)。

nb2=iBarShift(NULL, TF_2, Time[sh], False)。


cci0=iCCI(NULL, 0 , CCI_Period_0, PRICE_CLOSE, sh)。

cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1)。

cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2)。


如果(cci0>Level_0 && cci1>Level_1 && cci2>Level_2) buf0[sh]=1。

if(cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) buf0[sh]=-1。

}

}

//+------------------------------------------------------------------+


我自己也在尝试,但还没有运气。

这样试了一下


#属性 indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 绿色

#property indicator_color2 Red

#property indicator_maximum 1.4

#property indicator_level1 0

#property indicator_minimum -1.2


//------- 外部指标参数 -------------------------------

外部int CCI_Period_0 = 14; // 当前时间框架的CCI周期。

extern int Level_0 = 100; // 当前TF的CCI水平。

extern int TF_1 = 60; // 第一个时间框架的分钟数

extern int CCI_Period_1 = 14; // 第一个TF的CCI周期

extern int Level_1 = 100; // 第一个TF的CCI水平。

extern int TF_2 = 240; // 第二个TF的分钟数

extern int CCI_Period_2 = 14; // 第二个TF的CCI周期

extern int Level_2 = 100; // 第二个TF的CCI水平。

extern int NumberOfBars = 10000; //条数(0-全部)。


//------- 指示器缓冲区 ------------------------------------------

双倍ExtBuffer1[]。

双倍ExtBuffer2[]。

//+------------------------------------------------------------------+

//|自定义指标初始化函数

//+------------------------------------------------------------------+

空白的init()

{

SetIndexBuffer(0,ExtBuffer1)。

SetIndexStyle(0,DRAW_HISTOGRAM,0,2)。

//----

SetIndexBuffer(1, ExtBuffer2)。

SetIndexStyle(1,DRAW_HISTOGRAM,0,2)。

}

//+------------------------------------------------------------------+

//|自定义指标去初始化功能|

//+------------------------------------------------------------------+

空白的deinit()

{

评论(")。

}

//+------------------------------------------------------------------+

//|自定义指标迭代函数|

//+------------------------------------------------------------------+

空白启动()。

{

双重cci0,cci1,cci2。

int nb1,nb2。

int LoopBegin,sh;


如果(NumberOfBars==0) LoopBegin=Bars-1;

否则LoopBegin=NumberOfBars-1。

LoopBegin=MathMin(Bars-1,LoopBegin)。


for(sh=LoopBegin; sh>=0; sh--)

for(st=LoopBegin; st<0; st--)

{

nb1=iBarShift(NULL, TF_1, Time[sh], False)。

nb2=iBarShift(NULL, TF_2, Time[st], False)。


cci0=iCCI(NULL, 0 , CCI_Period_0, PRICE_CLOSE, sh)。

cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1)。

cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2)。


如果(cci0>Level_0 && cci1>Level_1 && cci2>Level_2) buf1[sh]=1。

if(cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) buf2[st]=-1。



错误是


最后,我们需要两个缓冲区,一个在零以上,一个在零以下。


附加的文件:
12121.jpg  42 kb
ere.mq4  6 kb
 

亲爱的Koziabrrrr !你已经创建了你自己的主题。有更多的主题。 如果有人开始寻找一个主题怎么办?而且有很多主题,很难找到。为了便于按主题进行。最上面的主题是用来帮助新手的。这就是你的问题应该去的地方。创建的主题删除,并有写考虑到我的意见!!!。然后你还在这个主题中写道--嗯,这是自大狂,对他的个人价值有夸大的看法。

为了引起注意--你需要解释任务。1.2.该指标是什么样子的=截图。 2.该指标是做什么的,它的用途是什么(进入点会显示,趋势,平坦,...)。3) 为什么我们需要两个缓冲区? 什么对它更有用(它能更好地显示趋势、平坦、入口点)?那时候大家都会抢着去提炼它!!!! ....。这对他们和你都有好处!我们应该成为朋友,分享

 

这里有一个重做。这似乎显示了一种趋势。但这是在作弊。

半小时后,我们就会知道我们应该卖掉......

而且,现在是购买的时候了 - 它是无声的...

 
这样的事情会更好。

或某种类型的MAinColor

 
STARIJ:

这里有一个重做。这似乎显示了一种趋势。但这是在作弊。

半小时后我们就会知道,我们应该卖掉...

而且,现在是购买的时候了 - 它是无声的...


是的,看起来好多了,谢谢你的重新设计。但我还是不明白是怎么回事)))。

 
koziabrrr: 是的,它看起来更好,谢谢你的重新设计。但我还是不明白是怎么回事))
#property indicator_buffers 2
#property indicator_color2 Tomato
double buf0[], buf1[];  //------- Буферы индикатора ------   добавил второй буфер
void init() 
  {
..................
   SetIndexBuffer(1,buf1);
   SetIndexLabel(1,"Вниз");
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexEmptyValue(1,0);
  }

void start() 
  {
....................
..................

      buf0[sh]=0;buf1[sh]=0;
      if(cci0>Level_0 && cci1>Level_1 && cci2>Level_2) buf0[sh]=1;
      if(cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) buf1[sh]=-1;
    }
}
 
STARIJ:

STARIJ:

我正在努力,但我不能把整个事情搞清楚。当你知道这个问题时,这很好,但当你不知道时,每件小事都是一个天。

 
koziabrrr:


我正在努力,但我不能把整个事情搞清楚。当你知道这个问题时,这很好,但当你不知道时,每件小事都是一个天。

...而每一天都是一种宝贵的经验,只有通过自己的工作才能获得--而不是通过论坛的解决方案。
 
Artyom Trishkin:
...而每一天都是宝贵的经验,只有来自于自己的工作--而不是论坛上的决定。

这是的!


STARIJ:谢谢你的帮助!!!!


解决了这个问题)))

 

嗨,尤里。

指标描述:当从3根蜡烛开始保持在同一水平上或几乎在同一水平上时.它向电子邮件发出警报并传送声音。还在屏幕上显示仪器和时间框架,直到我取消它。请看附件中的文件,其中有一些例子

附加的文件:
11.png  25 kb
12.png  24 kb
13.png  24 kb
14.png  27 kb