新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1683

 
是的,当然了。首先:0,最后:OrdersTotal()-1
 
Aleksei Stepanenko #:
是的,当然了。首先:0,最后:OrdersTotal()-1

啊,有一个阵列,真的是从头开始......

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
                                                              
extern int RSIPERIOD=3;
extern double KOEFF1=2.5;
extern double KOEFF2=1.86; 
                                                                                                                                                                  
double mass0[],Buf1[],Buf2[];
double D10,D11,D12;
                                                                                                                                                                                                                                                                                                                                             
int init()
  {
   IndicatorDigits(0);
   string short_name="RSITEST";           
   IndicatorShortName("RSITEST");
   
   D10=RSIPERIOD;D11=D10*KOEFF1;D12=D11*KOEFF2;;
 
   SetIndexBuffer(0,mass0);
   SetIndexLabel (0,"Stoch "+Ds_0(D10)+")\n");
   SetIndexBuffer(1,Buf1);
   SetIndexLabel (1,"Stoch ("+Ds_0(D11)+")\n");
   SetIndexBuffer(2,Buf2);
   SetIndexLabel (2,"Stoch ("+Ds_0(D12)+")\n");
   return(0);
  }
                                                                                                               
int start()
  {
   if(Bars<=RSIPERIOD) return(0);
   int ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   for(int i=0;i<Bars-RSIPERIOD;i++)
      {
       mass0[i] = iRSI(NULL,0,D10,0,i);
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))
       Buf1[i] = Buf2[i];
       Buf1[i] = DRAW_LINE;
       Buf2[i] = EMPTY_VALUE;
      }
   return(0);
  }

string Ds_0(double DOUBLE) {return(DoubleToStr(DOUBLE,0));}
MakarFX #:
在你的案例中,它只算出了3条线中的2条,我根据手头的任务对它进行了调整,结果发现第一条线保持(因为它应该),另外两条线(红色和蓝色)的水平符合给定的条件(而不是红色和蓝色线是一条线 - 它是红色的如果RSI2>RSI3,如果RSI2<RSI3则为蓝色)变得笔直,只有红色,好像它不知道自己是RSI
,我附上一张屏幕截图。
附加的文件:
 
Andrey Kipyatkov #:
在你的案例中,事实证明,3条线中只有2条,我根据问题进行了调整,事实证明,第一条线保持(因为它应该),其他两条线(红色和蓝色)与给定的条件持平(而不是红色和蓝色线是一条线 - 它是红色,如果RSI2>RSI3,如果RSI2<RSI3则为蓝色)变得笔直,只有红色,好像它不知道自己是RSI ,我附上一张屏幕截图。

你如何平衡Buf1和Buf2?

在你的情况下,他们是0!

 
Andrey Kipyatkov #:
在你的案例中,它只算出了3条线中的2条,我根据手头的任务对它进行了调整,结果发现第一条线保持(因为它应该),另外两条线(红色和蓝色)的水平符合给定的条件(而不是红色和蓝色线是一条线 - 它是红色的如果RSI2>RSI3,如果RSI2<RSI3则为蓝色)变得笔直,只有红色,好像它不知道自己是RSI ,我附上一张屏幕截图。


附加的文件:
RSITEST-1.mq4  4 kb
 
大家好,请告诉我,交易机器人和专家顾问之间的区别是什么?
 
Daniil Osipov #:
大家好,请告诉我交易机器人和交易顾问的区别?
这是同一件事...文字游戏
 
MakarFX #:

谢谢你帮忙写代码,但如果不难的话,我想了解一下这个问题。当你把所有的东西都写在一行中时,你:
Buf0[i] = iRSI(NULL,0,D10,0,i); - 你在这个字符串中指定零数组是一个具有上述参数的rsy线
如果(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)),那么你是说,参数为D11 的Rsai >D12
Buf1[i] = Buf0[i]; 然后你用参数D11和D10 匹配(在另一行上叠加)psi
否则
Buf1[i] = EMPTY_VALUE; 然后你告诉它不要 用参数D11渲染 xy。
但当你处理3条线时
Buf0[i] = iRSI(NULL,0,D10,0,i); 你说如何画1
条线
Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; 接下来是加法和除以22和3--这个动作我不是很清楚,因为之前你是把数组等同起来,把一行叠加在另一行上,为什么要用这种语法?
如果(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)),那么你就重复这个例子。你说D11>D12
Buf2[i] = Buf1[i]; 你把第3
和第2
等价
else
Buf2[i] = EMPTY_VALUE; 你告诉它不要画第二行

。我正确理解了你如何 "参数化 "语言,以及你为什么在第二种情况下添加数组并除以2

 
MakarFX #:
这是同一件事......文字游戏
Vitaly Muzichenko#:

一个文字游戏。

从下一个分支。没有勾结...

 
Andrey Kipyatkov #:
我感谢你对代码的帮助,但如果不是太麻烦,我想了解它的要点。当你把所有的东西都写在一行中时,你:

安德鲁,让我们首先定义你在第一篇帖子 中的条件

我想澄清是否有办法在代码中规定,而不是红线和蓝线(图片中的RSI2和RSI3(也附在后面),分别是一条线--如果RSI2>RSI3 是红色,如果RSI2<RSI3蓝色

因此,代替红色和蓝色的线--我们得到这些线的平均值,即

Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2;

而这一行,默认是红色的。

此外,当条件得到满足时

if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))

我们不改变线的颜色,因为在MT4中无法做到这一点。

我们用另一种颜色覆盖另一条线

Buf2[i] = Buf1[i];
原因: