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

 

MQL5 iBarShift

mql5のドキュメントによると、iBarShift関数はint型の値を返します。

int#

int型のサイズは4バイト(32ビット)である。最小値は-2 147 483 648、最大値は2 147 483 647です。


iBarShiftが99999より大きい値を 指定しようとしません。

チャートにトレンドラインを引くと、次のスクリプトはラインの開始時刻を取得し、その時刻のバー番号を出力します。

ある時点で行が履歴で後ろにずれると、出力値が99999で止まり、もし

boolexact=false// モード

を true に変更すると、-1 が表示され、GetLastError = 0 となります。

void OnStart()
  {
int total = ObjectsTotal(0, 0, -1);  // Общее кол-во объектов на: /текущий график/главное окно/все типы объектов
datetime time0 = 0; // Время соответствующее началу трендовой линии
string objname = ""; // Имя объекта (трендовой линии)
int shift = 0; // Номер бара, соответствующего времени начала трендовой линии time0

for(int i = total - 1; i >= 0; i--)
     {
     objname = (string)ObjectName(0, i, 0, OBJ_TREND);
     time0 = ObjectGetInteger(0, objname, OBJPROP_TIME, 0);
     shift = iBarShift(NULL, PERIOD_M1, time0, false);
     Comment("shift: ", shift, " Error: ", GetLastError());
     Sleep(2000);
     }
  }

どうしたんですか?

私は別のブローカーの異なるチャートを試してみました、私はPERIOD_M1をM5に変更した場合、ラインからの時間は、例えば、私は99999に到達するために歴史の中でさらに移動する必要があり、正しく読んでいる

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
ファイル:
sc1.mq5  3 kb
 
Sunriser:

MQL5 iBarShift

mql5のドキュメントによると、iBarShift関数はint型の値を返します。

int#

int型のサイズは4バイト(32ビット)である。最小値は-2 147 483 648、最大値は2 147 483 647です。


iBarShiftが99999より大きい値を 指定しようとしません。

チャートにトレンドラインを引くと、次のスクリプトはラインの開始時刻を取得し、その時刻のバー番号を出力します。

ある時点で行が履歴で後ろにずれると、出力値が99999で止まり、もし

boolexact=false// モード

を true に変更すると、-1 が表示され、GetLastError = 0 となります。

どうしたんですか?

異なるブローカーの異なるチャートを試しましたが、ラインからの時間は正しく読み取れ、例えばPERIOD_M1をM5に変更すると、99999に達するには、さらに履歴を移動させる必要があります。

まず、端末の設定でバーの最大数を確認してください。

 
Uladzimir Izerski:

まず端末の設定で、バーの最大数を確認します。

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

10000だったのを無制限に変更したらうまくいった。

当たり前ではないけれど...。

 

ハンドル作成に 役立つ

ここがポイント

int OnInit()
  {
//-создадим хэндл индикатора
      handle=iAO(name,period);
//-если не удалось создать хэндл
   if(handle==INVALID_HANDLE)
     {
      ...
      return(INIT_FAILED);
     }

質問:ハンドルの番号(桁)はどのようなパラメータから割り当てられるのでしょうか?
端末を再起動すると違うことがあるのでしょうか?
チャートの再初期化後に異なることがありますか?
どのような場合に変化するのでしょうか?

 
Vitaly Muzichenko:

ハンドル作成に 役立つ

ここがポイント

質問:ハンドルの番号(桁)はどのようなパラメータから割り当てられるのでしょうか?
端末を再起動すると違うことがあるのでしょうか?
チャートの再初期化後に異なることがありますか?
どのような場合に変化するのでしょうか?

インジケーターが1つしかない場合は、常にハンドルが10になります。連続したものは前のもの+1となり、全てはハンドルが作ら れた順番で決まります。 前のものがエラーになった場合のみ変更可能です。

 
Alexey Viktorov:

インジケーターが1つあれば、必ずハンドルは10になります。次の1つは前の1+1に等しく、すべてはハンドルが作成さ れた順番に依存します。前のものがエラーになった場合のみ変更可能です。

なるほど、多少なりとも理解できたようです。ありがとうございました。

 
Vitaly Muzichenko:

ハンドル作成に 役立つ

こんなのあるんだ

質問:ハンドルの番号(桁)はどのようなパラメータから割り当てられるのでしょうか?
端末を再起動すると違うことがあるのでしょうか?
チャートの再初期化後に異なることがありますか?
どのような場合に変化するのでしょうか?

回答が見つかりました

Сравниваем скорость самокэширующихся индикаторов
Сравниваем скорость самокэширующихся индикаторов
  • www.mql5.com
Предположим, что нам вдруг наскучил классический MQL5-доступ к индикаторам и захотелось сравнить скорость доступа в сравнении с альтернативными вариантами. Например, сравним его с доступом к индикаторам в стиле MQL4 без кэширования и с кэшированием. Идеи с доступом в MQL4-стиле были взяты из статьи LifeHack для трейдера: готовим фастфуд из...
 
標準ライブラリに 含まれるすべてのファイルから、継承によって見えるようにファイルを挿入することは可能ですか?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 

多次元 配列を関数に正しく渡す方法を教えてください。

ヘッダにMyFun( &Mas[][] )を指定しただけでは、関数本体で配列要素Mas[j][k]にアクセスすると、コンパイラがエラーを発生するのですが...。でも、どうやって?

一次元のものでも問題はなさそうです。

 
User_mt5:

多次元 配列を関数に正しく渡す方法を教えてください。

ヘッダにMyFun( &Mas[][] )を指定しただけでは、関数本体で配列要素Mas[j][k]にアクセスすると、コンパイラがエラーを発生するのですが...。でも、どうやって?

一次元配列の場合は問題ないようです。

2番目と次の配列の次元をダイナミックにすることはできません。従って、例えば、int Mas[][7] のように配列として宣言された MyFun(int &Mas[][7]) でなければならないので、受信する必要がある。

理由: