MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 827

 

こんにちは。

例えば、2つのインジケータがあり、1つ目には4つのバッファがあり、2つ目には2つのバッファがあるとします。チャート上に配置し、データウィンドウを 開く(CTRL+D)と、0から5までの6つのバッファがリストアップされます。このリストから、例えばバッファ5の値をMQLで読み取るにはどうしたらよいでしょうか?iCustomを必要なインジケータで使用するのは不便です。このリストを利用するとより便利です。やっているのはわかるが、どうやって?

 

ヘルプの例を勉強すると、オブジェクトの作成は 常にチェック付きで行われます。

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


なぜ、オブジェクトに対して行うのですか?オブジェクトが作成されない確率はどのくらいか?


一般的に、私は私がmqlのプログラミングで良いマナーのルールについて読むことができる場所に興味がある、どの茂みに熊手をうそをつく知っている、アドバイス。

 
psyman:

ヘルプの例を勉強すると、オブジェクトの作成は 常にチェック付きで行われます。


なぜ、オブジェクトに対して行うのですか?オブジェクトが作成されない確率はどのくらいか?


一般的に、私は落とし穴がどこにあるかを知るために、私はmqlのプログラミングの良いマナーについて読むことができる場所に興味を持って、私に助言する。

例えば、この名前のオブジェクトはすでに存在している。
良いフォームのルール - それはどの言語でも同じです。データを受け取る→持っているものを確認する→オブジェクトを作成する→作成したものを確認する→作成できたかどうか...。といった具合に。
 
どのように形式の値で4次元配列を埋めるために int Mas[1][2][2], どのように配列の各セルに値を割り当てるには、我々は心の中でこのような表記法例えば2次元配列 int Arr[1][2]={3,4}; 、4次元埋めるためにどのような方法ですか?
 
Artyom Trishkin:
例えば、この名前のオブジェクトはすでに存在している。
そして、エチケットのルール。これはどの言語でも同じです。データを受信したら、受信したものを確認する、オブジェクトを作成したら、作成したものと作成したかどうかを確認する...。といった具合に。


関数の中にボタンを作ると、悪態をつかれるので

 return(false);


'return' - 'void'関数は 値を返す 112 16


この場合、どうしたらいいのでしょうか?

 
Seric29:
4次元配列にint Mas[1][2][2]の形式で値を埋める方法、配列の各セルに値を割り当てる 方法、この場合、2次元配列 int Arr[1][2]={3,4}; How to fill 4-dimensional?

多次元配列は通常、ループの中で正しい値を入れていきます。その方が間違いが起こりにくいのです。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:

関数の中にボタンを作ると、悪態をつかれるので

return' - 'void'関数は、値を返します 112 16

この場合、どうしたらいいのでしょうか?

https://www.mql5.com/ru/docs/basis/function のヘルプを読み始める。

もしもっと助けが必要なら、どんなC++の本でも読むべきです。 最初の章では、関数を説明する必要があります。

 
psyman:


関数の中にボタンを作ると、悪態をつきながら


'return' - 'void'関数は 値を返します breakeven_fish.mq5 112 16


この場合、どうしたらいいのでしょうか?

関数からbool値を返す場合、関数の型をvoidにする必要はありませんが、当ててみてください。
 

同志たちよ - 正しさの指標を見よ。1つの公式があります。 Value = (Open[0]-SMA(P,n))/SMA(P,n))*100%.

チャートの上に置くと......全部計算してプロットしてくれるんです。電卓でバーを確認すると、描かれている値と一致しない......。

以下はその例です。Openは1,0178、MA(13)は1,0182で計算式((1,0178-1,0182)/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を使用せずに、指定されたシンボルのみのポジションをループすることは可能でしょうか?


今のところ、チケットを配列に書き込んで別々に作業することしか思いつきませんが、もっと簡単な方法があるかもしれませんね。

結局何が必要なのか、はっきりしない。バラバラな思いもある。