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

 

良いインターネットと健康を皆様に。


質問、私は何を間違えているのでしょうか?配列(STATIC)は埋まっているが、計算すると0(ゼロ)になる。私のコードにないものを教えてください。配列の要素が 比較・加算されないのはなぜか......?感謝


 double Open[60],High[60],Lo[60,Close[60]; int to_copy=60;
if(CopyOpen(NULL,PERIOD_H4,1,to_copy,Open)<to_copy)return(0);
   if(CopyHigh(NULL,PERIOD_H4,1,to_copy,High)<to_copy)return(0);
   if(CopyLow(NULL,PERIOD_H4,1,to_copy,Low)<to_copy)return(0);
   if(CopyClose(NULL,PERIOD_H4,1,to_copy,Close)<to_copy)return(0);
//----   
   //int start=to_copy*PeriodSeconds(PERIOD_H4)/PeriodSeconds(_Period);
   int start=to_copy;
   
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=start; j++)
           {
            if(Open[j]>Close[j])
               candle+=Open[j]-Close[j];
            if(Close[j]>Open[j])
               candle+=Close[j]-Open[j];
            candleHL+=High[j]-Low[j];
            br+=1;
           } //for 
Comment(High[10],". ",candle);
candle дает результат 0 ноль
 
kopeyka2:

良いインターネットと健康を皆様に。


質問、私は何を間違えているのでしょうか?配列(STATIC)は埋まっているが、計算すると0(ゼロ)になる。私のコードにないものを教えてください。配列の要素が 比較・加算されないのはなぜか......?感謝


1) ループが配列を越えてしまう - バッファサイズが60の場合、最初のインデックスが0なので、最後のインデックスは59になる

2) コードが完全ではない - 例えば、Tfはどのように定義され、キャンドルは何で初期化されたのでしょうか?


* 価格のコピーでは、最初のインデックスから60個の要素をコピーするため、インデックスが1つずれます。

 

機能の仕組み

IsStopped();

...また、どのようなタスクのリストを実行するのでしょうか?


ヘルプには、「mql5-programの強制終了をチェックする」と書かれています。つまり、先の何行かのコードを「見て」、何かが正しいかどうかをチェックするようなものでしょうか。その責任範囲はどのように設定されていますか(例:1回線ごと、10回線ごと)?


ループが配列を超えるのを防ぐだけかと思いきや、HighとLowの価格をコピーする前のFAMAのコードに戻されていました。

 
Alexandr Sokolov:

機能の仕組み

...また、どのようなタスクのリストを実行するのでしょうか?


ヘルプには、「mql5-programの強制終了をチェックする」と書かれています。つまり、先の何行かのコードを「見て」、何かが正しいかどうかをチェックするようなものでしょうか。その責任範囲はどのように設定されていますか(例:1回線ごと、10回線ごと)?


ループが配列を超えるのを防ぐだけかと思いきや、FAMAのコードでは価格のHighとLowをコピーする前にまだ残っていました

どこにもないような・・・。そこにはっきりと書かれています。フラグを確認する...読み返してみて ください。

Документация по MQL5: Проверка состояния / IsStopped
Документация по MQL5: Проверка состояния / IsStopped
  • www.mql5.com
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить...
 
Alexandr Sokolov:

機能の仕組み

...また、どのようなタスクのリストを実行するのでしょうか?


ヘルプには、「mql5-programの強制終了をチェックする」と書かれています。つまり、先の何行かのコードを「見て」、何かが正しいかどうかをチェックするようなものでしょうか。その責任範囲はどのように設定されていますか(例:1回線ごと、10回線ごと)?


ループが配列を超えるのを防ぐだけかと思いきや、高値安値をコピーする前のFAMAのコードにありました。

MQLプログラムの停止が発生した場合、_StopFlagが設定され、定義済み変数 またはIsStopped()関数を使用して確認することができます。

StopFlagを設定した後、MQLプログラムが停止するまでに少し時間がかかり、その後、端末が強制的にアンロードします。

最も広く使われているのはループするスクリプトですが、そのようなことはありません。

while(true)
{
...
}

というように書くとよいでしょう。

while(!IsStopped())
{
...
}

まあ、コスト計算や大きなサイクルで使われることもありますが。

for(int i=0; i<1 e6 && !IsStopped(); i++)
{

}
 

皆さん、こんにちは。

L1, L2, L3 ...という名前の変数をループさせることが可能かどうか教えてください。Lnで2次元配列に書き込む

extern string L1       = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475;";
extern string L2       = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465;"; 
extern string L3       = "0.94947;0.93222;0.91472;0.90077;0.89075;0.88658;0.86814;0.84687;0.82795;0.81132;0.79022;0.75976;"; 

...

extern string Ln      = " ... ";    
 
Alexandr Sokolov:

1) ループで配列がオーバーランしている - バッファサイズが60の場合、最初のインデックスが0なので、最後のインデックスは59になります。

2) コードが完全ではない - 例えば、Tfはどのように定義され、キャンドルは何で初期化されたのでしょうか?


* 価格のコピーでは、最初のインデックスから60の要素をコピーするため、インデックスが1つずつずれます。

ご回答ありがとうございました。フルコードです。配列の静的サイズを増加させた。演算子のゼロ制御の項目を削除しました。共通の「ダミー」。なぜ追加されないのか、まだ考えているところです。今、私のコードにないものは何ですか?ヒントをありがとうございました。mql5ではまだ静的 配列を扱ったことがないのですが......。

コードを更新しました。質問は同じ...

//+------------------------------------------------------------------+
//|                                                          123.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, "
//---- номер версии индикатора
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
//----
input int       nBars = 20;
//----
int    limit=0,br=0,to_copy=nBars;
double corrHL,corrOC;
double averpips,averpipsH;
double candle,candleHL;
double opn,hgh,lw,cls;
double Open[65],High[65],Low[65],Close[65];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   

      //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);
//----
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=to_copy; j++) // поменять на ноль?????
           {
            opn=Open[j];
            hgh=High[j];
            lw=Low[j];
            cls=Close[j];
            if(opn>cls)
               candle+=opn-cls;
            if(cls>opn)
               candle+=cls-opn;
            candleHL+=hgh-lw;
            br+=1;
           } //for j
      if(br>0)
        {
         averpips=candle/br;
         averpips=NormalizeDouble(averpips,_Digits);
         averpipsHL=candleHL/br;
         averpipsHL=NormalizeDouble(averpipsHL,_Digits);
        }
      }
   Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpipsHL ",averpipsHL);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpips ",averpips);
配列の要素の値が0より大きい。計算上、ゼロ
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
stepystr:

皆さん、こんにちは。

L1, L2, L3 ...という名前の変数をループさせることが可能かどうか教えてください。Lnで2次元配列に書き込む

削除された記事 - 配列について知っていますか?

にもかかわらず、できない

マクロ置換を書くオプションとして、具体的な例を書く - 多分誰かがあなたのタスクにマクロを書くでしょう、私はマクロを書くのが苦手です。

 

人間だ!!!(ヒント)))

フルコードです。静的配列のサイズを拡大しました。オペレータの書き込みゼロ制御を削除しました...共通の「ダミー」。まだ、足し算をしない理由を理解したい。今、私のコードにないものは何ですか?ヒントをありがとうございました。mql5ではまだ静的 配列を扱ったことがないのですが......。

コードを更新しました。質問は同じ...

配列の要素の値が0より大きい。計算上、ゼロ
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2:

返信ありがとうございました。フルコードです。静的配列のサイズを拡大しました。演算子のゼロ制御の項目を削除しました...共通の「ダミー」。まだ、足し算をしない理由を理解したい。今、私のコードにないものは何ですか?ヒントをありがとうございました。mql5ではまだ静的 配列を扱ったことがないのですが......。

コードを更新しました。質問は同じ...

指標に詳しくないのですが、余計なお世話です。すでに持っています))))

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   

      //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);