初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 730

 
Artyom Trishkin:
バー[]
もし可能なら、そのコードを見せてください。
 
Vitaly Muzichenko:

バーズと 呼ばれる、コンパイラが空に向かって叱咤している。この設計をテストしたのか、それともうまくいくはずだと思い込んでいるのか、それとも私が何か間違ったことをしているのか?

はい、私のミスです。名前を付けてください。一般に、変数に表現力のある名前をつけておけば、その存在が必ずしも正当化されない変数を追加で作る必要がなくなるという考え方があります。
 
Vasiliy Sokolov:
はい、私のミスです。名前を付けてください。一般に、変数に表現力豊かな名前をつけておけば、必ずしもその存在が正当化されるとは限らない変数を追加で作る必要がなくなるという考え方があります。

理由は何かを表現するためではなく、それらを扱う際のコードを短くするためです。

if(open1<close1 && close2>close3 && close1>close2 &&

そして残りも同じように、さもなければ線の長 さが増加します

説明をしてくださった皆様、ありがとうございました。

 
Vitaly Muzichenko:

何かを表現するために名付けたのではなく、作業する際のコードを減らすために名付けたのです。

if(open1<close1 && close2>close3 && close1>close2 &&

そして残りも同じように、さもなければ線の長 さが増加します

皆さん、分かりやすい説明ありがとうございました

コードを最小限にしたい場合は、データ配列を直接参照するようにします

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

こんにちは。

Expert Advisor をアンロード(削除)する際に、発注した注文や建玉を 正しく削除する場所と方法は?難しいことでなければ、例を挙げて教えてください。

ありがとうございます。

 

あるEAが妙にナンセンスなことになっている。EAを通常通りテストします。"Run single test "をクリックすると、1回だけ、初回のみ実行されます。そして、単体テストをクリックしたり、最適化で任意の行をクリックすると、ジャーナルに表示されます。

2017.02.08 13:31:05.165 テスターはパス4234087422336の入力を取得できない。

2017.02.08 13:31:34.829 テスターはパス4076312468706の入力を得ることができない。

2017.02.08 13:31:47.973 テスターはパス1004506640527の入力を得ることができません。

他のEAは正常に動作しています。それは何でしょう?

 

皆さん、10000*10000の巨大マトリックスを記録する

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

このアルゴリズムの速度効率はどうでしょうか?

行列が1000*1000の時は数秒、10000*10000に増やすとシステムが立ち上がるので

 
Top2n:

皆さん、10000*10000の巨大マトリックスを記録する

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

このアルゴリズムの速度効率はどうでしょうか?

行列が1000*1000の時は数秒、10000*10000に増やすとシステムが立ち上がるので

4次元以上の配列は 許されないのに、どうしてそのような行列ができるのでしょうか?
混乱はないのでしょうか?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
4次元以上の配列が 許されないのに、どうしてそのような行列ができるのでしょうか?
混乱はないのでしょうか?

10000×10000は2次元の行列ではないか?

double arr[10000][10000];

などなど...

 
Alexey Viktorov:
4次元以上の配列が 許されないのに、どうしてそのような行列ができるのでしょうか?
混乱はないのでしょうか?
そう、2次元だから、正しい言い方じゃないんだけど、行列じゃなくて配列なんだよね。行列は多次元性を意味するのか?
理由: