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

 

你好。

假设我有两个指标,第一个有4个缓冲区,第二个有2个。我把它们放在图表上并打开数据窗口(CTRL+D)。 列表中包含6个缓冲区,从0到5。我怎样才能在MQL中从这个列表中读取缓冲区5的值呢?按要求的指标使用iCustom是不方便的。使用这个列表更方便。我知道他们这样做了,但怎么做呢?

 

研究帮助中的例子,对象的创建 总是通过检查来完成。

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


为什么对物体要这样做?一个物体未能被创造的概率是多少?


一般来说,我感兴趣的是在哪里可以读到关于mql编程中的良好礼仪的规则,知道在哪些灌木丛中躺着耙子,建议。

 
psyman:

研究帮助中的例子,对象的创建 总是通过检查来完成。


为什么对物体要这样做?一个物体未能被创造的概率是多少?


一般来说,我感兴趣的是在哪里可以读到关于mql编程中的良好礼仪,要知道陷阱在哪里,请给我建议。

例如,一个具有此名称的对象已经存在。
良好形式的规则--它们对任何语言都是一样的。接收数据--检查你得到了什么,创建一个对象,检查你创建了什么,以及你是否创建了它......以此类推。
 
如何用格式为int Mas[1][2][2][2]的值填充4维数组,如何为数组的每个单元格赋值,我们想到了这样一个符号,例如一个2维数组int Arr[1][2]={3,4};,如何填充4维的?
 
Artyom Trishkin:
例如,一个具有此名称的对象已经存在。
而礼仪的规则--它们对任何语言都是一样的。你收到数据--检查你收到了什么,你创建了一个对象,检查你创建了什么以及你是否创建了它......。以此类推。


当我在一个函数内创建一个按钮时,我得到了骂人的机会

 return(false);


'return' - 'void'函数 返回一个值 112 16


在这种情况下,我应该怎么做?

 
Seric29:
如何用格式为int Mas[1][2][2][2]的值填充4维数组,如何给数组的每个单元格赋值,在这种情况下,有一个2维数组int Arr[1][2]={3,4};如何填充4维?

多维数组通常在循环中填入正确的值--这使它更难出错,对于四维数组,应该是这样的,但我可能是错的。

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman

当我在一个函数内创建一个按钮时,我得到了骂人的机会

'返回'-'无效'函数 返回一个值 112 16

在这种情况下,我应该怎么做?

开始阅读帮助,https://www.mql5.com/ru/docs/basis/function

如果你需要更多的帮助,你应该阅读任何一本C++书籍。 第一章应该解释函数

 
psyman:


当我在一个函数内创建一个按钮时,我得到了一个骂人的声音


'return' - 'void'函数 返回一个值 breakeven_fish.mq5 112 16


在这种情况下该怎么做?

如果你从一个函数中返回一个bool值,你不需要使函数类型为void,但要猜测它是什么。
 

同志们--看看这个指标是否正确。有一个公式值=(Open[0]-SMA(P,n))/SMA(P,n))*100%。

我把它放在图表上--它计算和绘制一切。我开始检查计算器上的一些条形图--它的值与所画的不一致......。

下面是一个例子--我用公式((1,0178-1,0182)/1,0182)计算出开盘价为1,0178,MA(13)为1,0182。* 100% - 计算器上的结果是-0.0393。而MT4图表显示为-0.0929。是代码中的错误还是计算器没有正确计算那里的一些数值?请帮助。我在此附上指标。

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
附加的文件:
KRI.mq4  7 kb
 
Artyom Trishkin:
如果你要从函数中返回bool类型的值,那么函数类型不应该是void,但你猜猜看是哪一种。

如果你想从一个函数中返回数据怎么办?


是否有可能只对某一特定符号的头寸进行循环,而不必每次都使用PositionsTotal


到目前为止,我想出的唯一办法是把票据写进一个数组,然后分别处理它们,但也许有更简单的办法?

 
psyman:

如果你想从一个函数中返回数据怎么办?


是否有可能只对某一特定符号的头寸进行循环,而不必每次都使用PositionsTotal?


到目前为止,我想出的唯一办法是把票据写入一个数组,然后分别处理它们,但也许有更简单的办法?

最后不清楚需要什么--一些不连贯的想法。