handle_iMA_High=iMA(Symbol(),Period(),Inp_MA_ma_period,Inp_MA_ma_shift,
Inp_MA_ma_method,PRICE_HIGH);
//--- if the handle is not createdif(handle_iMA_High==INVALID_HANDLE)
{
//--- tell about the failure and output the error codePrintFormat("Failed to create handle of the iMA indicator (\"Price High\") for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped earlyreturn(INIT_FAILED);
}
そして、必要な要素をクリップボードにコピーし、それを使って作業します
if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
{
//--- if the copying fails, tell the error codePrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
小数点以下の桁数に誤りがある可能性があります。
MT5を始めたばかりで、MT4からインジケータを移行しているのですが、問題が発生しました。iMAを1行で使い、ある特定のインデックスの値を取得する必要があります。フォーラムでのメッセージを見て、iMAGet機能(同様のiATRGet等も)を使用しています。このような場合、iMAの値を1つだけ取得する方法を教えてください。上記のような機能を使ってやって みました。
これは:
MT5で思い切ったジェスチャーをせずに動くものに。
こんにちは、皆さん。
MT5を始めたばかりで、MT4からインジケータを移行する際に問題があります。iMAを1行で使い、ある特定のインデックスの値を取得する必要があります。フォーラムでのメッセージを見て、iMAGet機能(同様のiATRGet等も)を使用しています。このような場合、iMAの値を1つだけ取得する方法を教えてください。上記のような機能を使ってやって みました。
これは:
MT5で思い切ったジェスチャーをせずに動くものに。
kodobaseの例をご覧ください。https://www.mql5.com/ru/code/27161
基本:OnInit()でインジケータハンドルを作成する
そして、必要な要素をクリップボードにコピーし、それを使って作業します
https://www.mql5.com/ru/docs/series/copybuffer
コドベースで例を調べてみてください。例えば、こちらです。https://www.mql5.com/ru/code/27161
基本的にはOnInit()でインジケータハンドルを作成します。
そして、必要な要素をバッファにコピーし、それを使って作業します
https://www.mql5.com/ru/docs/series/copybuffer
すでに書いたように、OnInitでの初期化は私には不向きです。私はすべてのタイムフレームを同時に扱うので、各TFですべてのマスクを初期化し、コードで何らかの値を使用して、次のようにします。
そうして、それぞれのリストバンドを呼び出すたびに。コードが混乱した下痢に変わるだけです。
そして、新しいバーのたびに、何らかの形でアップデートする必要があるのでは?
CopyBufferのような関数で、配列ではなく、必要なインデックスで1つの値をコピーするものはありますか?
すでに書いたように、OnInitでの初期 化は私には不向きです。私はすべてのタイムフレームを同時に扱うので、各TFですべてのマスクを初期化し、コードで何らかの値を使用して、次のようにします。
そうして、それぞれのリストバンドを呼び出すたびに。
そして、新しいバーができるたびに、それを更新する何らかの方法が必要になるのでしょうか。
CopyBufferのような関数で、配列ではなく単一の値を正しいインデックスでコピーするものはありますか?
OnInit()でハンドルの配列を作り、それを使って動作させる。
CopyBuffer(...)を関数化し、インジケータハンドルと配列から必要なインデックスを与えれば、関数が価格を返すようになります。
OnInit()でハンドルの配列を作り、それを使って動作させる。
CopyBuffer(...)を使いやすいように関数に変換し、インジケータハンドルと配列から必要なインデックスを渡せば、関数が価格を返します。
不便極まりない)
(気まずいけど))
どちらかというと違和感がある )))
OnInit()でハンドルの配列を作り、それを使って動作させる。
コピーバッファ(...)を関数にすると、使い勝手がよくなります。そこで、インジケータのハンドルと配列から必要なインデックスを与えると、関数が価格を返します。
CopyBufferのもう一つの問題は、それ自身のためにインジケータ・バッファを 必要とすることです。全部で100個のインジケータがあり、それらを計算で使って1つのインジケータを取得しています。これらの値を格納するために、100個のバッファを作成する必要がありますか?
CopyBufferのもう一つの問題は、それ自身のために必然的にインジケータ・バッファを 必要とすることです。全部で100個弱のインジケーターがあり、それらを計算で使って1つのインジケーターを出しています。これらの値を格納するために、100個のバッファを作成する必要がありますか?