MetaTrader 4 Build 529 ベータ版リリース、新コンパイラー搭載 - ページ 105

 
Night63:

同僚、コンパイル時に警告メッセージがポップアップします。

初期化されていない変数 'PipStep' が使用されている可能性があります。

このような塊に対して

すべての変数がdoubleで初期化されていますが、何がいけないのでしょうか?

double 型の変数を宣言した場合、初期化とは宣言した変数に 値を代入することです。

double PipStep=0 ; make

 
よくわからないのですが、555ビルドのインジケーターデモがテストできないのは私だけでしょうか、それともマーケットデビューには全く関係ない問題なのでしょうか?
 
Candid:
よくわからないのですが、555ビルドのインジケーターデモがテストできないのは私だけでしょうか、それともマーケットデビューには全く関係ない問題なのでしょうか?

は、5でテストされているのでしょうか?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

価格、数量、スプレッド情報を格納する構造体。

https://www.mql5.com/ru/docs/constants/structures/mqlrates

MetaTrader 4のMqlRatesは、配列または構造体を構築するのですか?

ヘルプにあるこの例(MetaTrader 4 build 555)は、関数CopyRates がないため、動作しない。

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
これもうまくいきません。MetaTrader 4 build 555でMqlRatesを使った動作例を見ることができますか?
 
ALXIMIKS:

5でテストしているのでしょうか?

5でもテストしない人がいるのですか?
 
ALXIMIKS:

double 型の変数を宣言した場合、初期化とは宣言した変数に値を代入することです。

double PipStep=0 ; do


うまくいった!!!

ライブ・アンド・ラーニング!

ありがとうございました。

 
serferrer:

MetaTrader 4のMqlRatesは、配列または構造体を構築するのですか?

ヘルプにあるこの例(MetaTrader 4 build 555)は、関数CopyRates がないため、動作しない。

これはどちらか動作しません、我々はMqlRatesとMetaTrader 4ビルド555で動作する例を見ることができますか?


MqlRates- 構造

MqlRates[] - 構造体の配列.

MqlRates構造体の動作例については、period_converter_newスクリプトを参照してください。

ArrayCopyRatesの操作例(ドキュメントは更新される予定です。)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

MQL4での変更点

  • ArrayCopyRates() も挙動が変わりました。 以前は配列 double[][6] に仮想的にコピーしていましたが、今は配列 MqlRates[] に仮想的にコピーしています。これで配列double[][6]へのコピーが実行されましたが、これは仮想ではなく、現実のものです。

DLLを使用するExpert Advisorは相当数あり、ずいぶん前にお客様にお渡ししています。DLLへのパラメータの受け渡しに 配列 double[][6] を使用し 、初期化時に ArrayCopyRates() 仮想的にコピーして いた。そして、DLLから関数を呼び出す際には、これらの配列と現在のサイズがパラメータとして参照渡しされていました。

端末が新しいバージョンに更新されると、これらのEAがすべて動作しなくなることが判明しました。これは残念なことです。

DLLコードを変更せずに動作させるには、DLLから関数を呼び出す前にArrayCopyRates()を呼び出す必要があると理解してよいでしょうか。

 
stringo:
MqlRates 構造体には現在スプレッド値(おそらく 取引量も )がありませんが、これは後で追加されるのでしょうか?
 
Patrol:

DLLを使ったEAが相当数あるのですが、それらはずいぶん前にお客様に引き渡されています。DLLにパラメータを渡すために、 double[][6] という配列を使い 、初期化時に ArrayCopyRates() 関数 で時系列を仮想的にコピーして います。そして、DLLから関数を呼び出す際に、これらの配列と現在のサイズがパラメータとして参照渡されていました。

端末が新しいバージョンに更新されると、これらのEAがすべて動作しなくなることが判明しました。これは残念なことです。

DLLコードを変更せずに動作させるためには、DLLから関数を呼び出す前にArrayCopyRates()を呼び出す必要があるという理解で合っていますか?


もう少し複雑なんです。また、DLLがとる構造も変化しています。

そこで、ArrayCopyRatesをMqlRates 構造体配列に書き換える必要があります。また、あなたのDLLでは、対応する構造体の記述を置き換える必要があります。