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

 
kopeyka2:

まさにその通りだと思いました。誤解を招く問題は、「パラメータ」という言葉です。そこで、handle --> CopyBufferに関係するすべての変数を調べ始めました。

1)当初からの疑問は、タイムフレームSCREENを切り替えてハンドルデータを保存することでした。MT4でそのまま。

そして実際、そうなっているのです。

常に、そしてすべてのタイムフレームで、同じ値である10を表示します。

ここで何も得られなかったので、私は次に進みました。

2)そして、引用します。"指定されたインジケータの指定されたバッファのデータを指定された量だけバッファ配列に取得 します"。

つまり、手でカウントを 設定することで 、値との間にINTERVALを 持たせる必要があります。 そして、そこにいるのは!しかし!!!!!!!ハンドル期間と一致する場合のみ

PERIOD_H1のタイムフレームをモニター画面 上に表示します。 すべての価値をクリアに伝える。しかし、別のタイムフレームに移動すると、画面上にデータがありません。

一切送信されません!!!! そして、私の質問はまさにそれでした。そして、バーの数は、そこになければ、ここではそれほど重要ではありません!!!!


提案されているインジケータMTF_LRMA.mq5を見て みましたが、同じものが あります。 画面上の別のタイムフレームに切り替わり、データは画面のタイムフレームで進みます。携帯機でお願いします。

例えば、iClose(NULL, PERIOD_H1, 5); 全てのタイムフレームで同じ値 - H1 の 10 bar を出力することになります。

これまで全ての例は、 CopyBufferの カウント補正に関するものでした。 しかし、配列は空である。


あなたは間違っています。任意の時間軸のデータを扱うことができる。10時間後くらいに例を挙げる。携帯電話ではできない。
 
Artyom Trishkin:
あなたは間違っています。任意の時間軸のデータを扱うことができる。10時間くらいで一例をあげます。携帯電話からはできなくなる。

OKです。返信ありがとうございました。


自分で訂正。

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

こんな感じなのかなと思いました。

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

でも、もし気が変わったら、最初の方法でテクニカル指標(iMA)の値を取得するのを待つことにします。でも、やっぱりわからない。

 
kopeyka2:

OKです。返信ありがとうございました。


自分で訂正。

こんな感じなのかなと思いました。

でも、もし気が変わったら、最初の方法でテクニカル指標(iMA)の値を取得するのを待つことにします。でも、今ひとつ理解できない...。

上記で、インジケータを計算すべきTFによって、TFのバー数が異なるため、コピーするバー数も異なることを示しましたが、今回は、TFのバー数が異なるため、コピーするバー数も異なります。BarsCalculated()で計算されたバーの数を確認し、それを基準にする必要があります。

//+------------------------------------------------------------------+
//| 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(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

上記で、TFによってバーの本数が異なることを示しましたが、したがって、TFによってコピーするバーの本数が異なることを要求し、それをインジケータが計算する必要があります。BarsCalculated()を使ってインジケータが計算したバーの数を確認し、それをベースとして使用する必要があります。

ありがとうございます。試してみます。しかし、先に示したように、この配列は完全に空である。アレイに手書きでsdigしています。全部空っぽなんです。
 
kopeyka2:
ありがとうございます。試してみます。しかし、先に指摘したように、配列は完全に空である。アレイに手書きでsdigしています。全部空っぽなんです。
他のタイムフレームからのデータ読み込みを待たなければならないことを無視しているのでしょうか?例を挙げたのは私です。表示されている 指標のデータは、上位のタイムフレームからのみ取得されています。現在のタイムフレームより低いか等しいと設定した場合、データは現在のものから取得されます。これらはすべてコードの中にあるのですが、あなたはそれを調べようとはしませんでした。でも、発言しているのはあなたです。
 
Artyom Trishkin:
異なる時間軸のデータの読み込みを待たなければならないことを無視しているのでしょうか?例を挙げました。表示されている指標のデータは、上位のタイムフレームからのみ取得されています。現在のタイムフレームより低いか等しいと設定した場合、データは現在のものから取得されます。これらはすべてコードの中にあるのですが、あなたはそれを調べようとはしませんでした。でも、発言しているのはあなたです。
ただ見るだけでなく、あなたのインジケーターをバラバラに分解してみました。データディレイという発想は最初からありました。そしてすぐに、最初の視聴から、あなたのTimerを見ました。その方向で見てみます。
 
kopeyka2:
見るだけでなく、あなたのインジケーターをひとつひとつ分解してみました。ここには、最初からデータの遅延についての考え方がありました。そしてすぐに、最初の視聴から、あなたのTimerを見ました。その方向で見てみます。
現在のタイムフレームへのデータ変換と 最後のサイクルがコメントされ、任意のグラフィカルなバッファでは、計算されたバッファのMAshekからデータを渡すと、あなたが見たいものをチャート上で表示されます。
 

取り敢えず

他枠


 
kopeyka2:

取り敢えず

他枠


データを受信できなかったときのために、わざと戻り値の文字列をコメントアウトしていませんか?なぜ?車輪のネジを外して、モーターはうなる、ハンドルは回る、でも車は進まない、だから故障している、というのでは、ちょっと厳しいですよね。
 
kopeyka2:
やってみます。試してみます。しかし、先ほど指摘したように、配列はまったく空っぽです。手を使って、配列の読み取りを行いました。全部空っぽなんです。

先ほど、printを使ったインジケーターのコードをお渡ししましたが、それをコピーしてみましたか?ログには何も表示されず、エラーや数値も表示されない?

理由: