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

 
Сергей Таболин:

最初の経路が役に立った ))))ありがとうございます。

もう一つ質問です。異なるTFからデータを取得するために、インジケーターで3つのインジケーターインスタンスをちぎりました。しかし、チャートに添付すると、このようなスプレッドシートが表示されます。

それはどういうことでしょうか。

確かなことは言えませんが、もしかしたら2番目のバッファの初期化が遅かったのかもしれません。

何が原因かを正確に知るには、以下の行を次のように調整します。

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

その後、何が問題なのかをより確信を持って言えるようになります。

 
Oleg Peiko:

確かなことは言えませんが、もしかしたら2番目のバッファの初期化が遅かったのかもしれません。

何が原因かを正確に知るためには、以下の行を次のように調整する必要があります。

そうすれば、何が問題なのか、より確信を持って言えるようになります。

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

これで何かできるのでしょうか?

ちなみに、このコピーはM15で開きます。

ただ、他のTFでも同じようなことが...。

 
Сергей Таболин:

何か対策はないのでしょうか?

ちなみに、このコピーはM15で開きます。

他のタイムフレームでも同じなのですが...。

タイマーでは、2分に1回、必要な時間枠のデータを要求する。そうすれば、常に時間枠の最新のデータを入手することができます。

おまけ:一番最初のOnCalculate()では、例えばこんな風にリクエストします。

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

したがって、15分足のデータが利用可能になるまで、インジケータは次のティックを待ちます。
CopyXXX 機能を使用することで、計算に必要なデータを適切に要求することができます。

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

この場合、必要なデータ数_of_datasが揃うまで、インジケータは次のティックを待ちます。

機能を使うことにした場合

Bars(NULL,PERIOD_M15);

...の場合、計算のためのデータ量が rates_total を超えないようにする必要があり、そうでないと配列の限界を超えて しまうことを考慮する必要があります。言い換えれば、現在のタイムフレーム上のバーの数がM15よりも少ない場合、現在のタイムフレーム上のバーの数と同じ数=rates_totalを取る必要があります。

 
Artyom Trishkin:

タイマーでは、2分に1回、必要な時間枠のデータを要求する。こうすることで、常に時間軸の最新データを入手することができます。

また、OnCalculate()の一番最初の部分で、例えば、次のようにリクエストしています。

そのため、15分足のデータが利用可能になるまで、インジケータは次のティックを待ちます。
CopyXXX機能で、計算に必要なデータを適切に要求することができます。

この場合、number_of_datasに必要なデータ量が揃うまで、インジケータは次のティックを待ちます。

機能を使うことにした場合

...の場合、計算のためのデータ量がrates_totalを超えないようにしないと、配列の限界を超えて しまうことを考慮する必要があります。言い換えれば、現在のタイムフレーム上のバーの数がM15よりも少ない場合、現在のタイムフレーム上のバーの数と同じ数=rates_totalを取る必要があります。

ありがとうございます。

こんな感じでやってました。

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(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

の結果です。

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

インジケータに苦労しています )))

 

みなさん、こんにちは。
機能CopyHighについて教えてください。
この関数の定義に、「指定したシンボルと期間の最大バー価格の配列に履歴データを 取得する」とありますが、これはどういう意味ですか?

BidまたはAskの価格配列について教えてください。それとも、必要な価格の種類を設定する方法があるのでしょうか?

 
renatmt5:

こんにちは。
機能CopyHighについてアドバイスください。
この関数の定義に、履歴データを指定したシンボルと期間の最大バー価格の配列に取得する」とありますが、これはどういうことですか?

BidまたはAskの価格配列について教えてください。それとも、何らかの方法で必要な価格の種類を設定することができるのでしょうか。

参考プロットの特徴

チャート作成の特徴

チャートを構築するベースとなる履歴データは、ハードディスクに保存されます。チャートを開くと、ディスクからデータがダウンロードされ、トレーディングサーバーから最後に欠落したデータがダウンロードされます。金融商品のヒストリカルデータがハードディスクにない場合は、過去512バーのヒストリカルデータをダウンロードします。

以前のデータをダウンロードするには、チャートを必要な場所に移動してください。チャートを開くと、プラットフォームは現在の相場に関する情報の受信を開始します。このように、さらなる値動きがリアルタイムで形成されるのです。この情報は自動的に履歴ファイルに保存され、将来このグラフを再び開くときに使用されます。

  • プラットフォーム設定で「チャート上の最大バー数」パラメータを設定します。チャート上に表示されるヒストリカルデータの量をコントロールすることができるパラメータです。
  • チャートはBid価格に対してプロットされて いますDepth of Marketが利用可能なシンボルの場合、チャートはLast price(最後に約定した取引価格)でプロットされます。
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

参考:グラフの特徴

チャート作成の特徴

チャートの元となるヒストリカルデータは、ハードディスクに保存されます。チャートを開くと、ディスクからデータがダウンロードされ、トレーディングサーバーから最後に欠落したデータがダウンロードされます。金融商品のヒストリカルデータがハードディスクにない場合は、ヒストリカルの最後の512本がダウンロードされます。

以前のデータをダウンロードするには、チャートを必要な場所に移動してください。チャートを開くと、プラットフォームは現在の相場に関する情報の受信を開始します。このように、さらなる値動きがリアルタイムで形成されるのです。この情報は自動的に履歴ファイルに保存され、将来このグラフを再び開くときに使用されます。

  • プラットフォーム設定で「チャート上の最大バー数」パラメータを設定します。チャート上に表示されるヒストリカルデータの量をコントロールすることができるパラメータです。
  • チャートはBid価格に対してプロットされて いますDepth of Market がシンボルに対して利用可能な場合、チャートは Last price (最後の取引価格) でプロットされます。

ウラジミールさん、いつもお世話になってます :)ありがとうございました。

 
皆さん、ごきげんよう。取引に割り当てられた資金をもとに、ポジションの数量を 計算する方法を教えてください。
 

mql5でNの最小 ろうそくを求めるには?

mql4では

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

mql5でNの最小 ろうそくを求めるには?

mql4では

Expert Advisorの中か、インジケーターの中か?現在の時間枠のためか、それとも別の時間枠のためか?