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

 
Nikita Bushuev:

Vladimir、私もMQL5ウィザードでコードを生成しました。私はあなたのEAを試しましたが、GBPUSD通貨で実行すると、それはまた私のために動作しません。

ログには次のように書かれています。

ログに書いてあることを読んでください。あなたのエラーの説明があります。(テスターの場合はログが1つ、端末の場合はログが2つあります)。


また、どのシンボルで、どの時間枠で始めるかを指定してください。今日はテレパスが休みで、あなたの心を読む人がいないのです。

 
Vladimir Karputov:

ログブックに書かれていることを読む。あなたのエラーの説明があります。(テスターの場合はログが1つ、ターミナルの場合はログが2つあります)。

テスターは、インジケータ・ハンドルを作成するとき、すなわち it = INVALID_HANDLE のとき、この場所でクラッシュします。シンボル変数"EURUSD "では、期間も設定されています。どうしてそうなるのか、エラー4804は何を意味しているのか。

err_indicator_cannot_apply(エラー・インディケーター・キャノット・アプライ

4804

他のインジケータに適用できないインジケータ

m_handle=iAC(symbol,period);
bool CiAC::Create(const string symbol,const ENUM_TIMEFRAMES period)
  {
//--- check history
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- create
   m_handle=iAC(symbol,period);
//--- check result
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- idicator successfully created
   if(!Initialize(symbol,period))
     {
      //--- initialization failed
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
Документация по MQL5: Предопределенные переменные / _Symbol
Документация по MQL5: Предопределенные переменные / _Symbol
  • www.mql5.com
Предопределенные переменные / _Symbol - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Nikita Bushuev:

テスターは、インジケータ・ハンドルを作成するとき、つまり it = INVALID_HANDLE のとき、ここでクラッシュします。シンボル変数"EURUSD "では、期間も設定されています。どうしてそうなるのか、エラー4804は何を意味しているのか。

err_indicator_cannot_apply(エラー・インディケーター・キャノット・アプライ

4804

他のインジケータに適用することはできません

ログを読んでください - あなたのエラーの説明があります。早く読めば、早く理解できるはずです。

また、「どのシンボルで、どの時間枠で起動するか」も指定してください。今日はテレパスが休みのため、心を読む人がいない。
 
Vladimir Karputov:

雑誌を読んでください-あなたのエラーについての記述があります。早く読めば、早く理解できるはずです。

また、どのシンボルで、どの時間枠で起動するのかを明確にしてください。今日はテレパスが休みで、あなたの心を 読む人がいない。

プラットフォームの再インストールにより、問題は解決しました。

 
Vladimir Pastushak:

開発者の皆様へ 市販の製品は検証できませんが

コード添付

CopyRatesはハングアップを引き起こし、その結果、マーケットに書き込まれる

EURUSD,H1のテスト(ネッティング)。

テスターに時間がかかりすぎる

ストラテジーテスターレポートが見つかりません

そして、バリデーターは正しくカットオフを通過しています。ターミナル内の全シンボルに対してTICK毎に1440個のエレメントを求めたいのに、あまり考えていないのではないでしょうか?サーバーには5000以上のシンボルがあり、1つのシンボルには1440本ものバーがある...。


全ては初心者のためのトピック。間違いなく。

 
こんにちは、チャートが読み込まれない理由を教えてください。14.08 MT5取引プラットフォームで登録 7つのうち4つのチャートがまだぶら下がったまま更新を待っている状態です。事前に登録したデモ口座では、すべてのチャートが時間通りに更新されますが。
 
Vladimir Karputov:

結果


ウラジミールさん、ありがとうございました。例のロジックはよく理解できます。信じるか?

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

ウラジミールさん、ありがとうございました。例のロジックはよく理解できます。信じるか?

ウラジミールではないのですが、「何がダメなのか?全部とっくになくなってるし、例のものを探す気にもならない。もう一度複製してください。

 
Artyom Trishkin:

ウラジミールではないのですが、「何がうまくいっていないのか?もうとっくに終わってるし、お手本なんて探したくもない。もう一度複製してください。

以下は私の例です。

//+------------------------------------------------------------------+
//|                                                        cTest.mq5 |
//|                                     Copyright 2020, Tabolin S.N. |
//|                           https://www.mql5.com/ru/users/vip.avos |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Tabolin S.N."
#property link      "https://www.mql5.com/ru/users/vip.avos"
#property version   "1.00"
//#property indicator_separate_window
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot bars
#property indicator_label1  "bars"
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrGold
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double   barsBuffer1[];
double   barsBuffer2[];
double   barsBuffer3[];
double   barsBuffer4[];
//+------------------------------------------------------------------+
double   newCandles_Open[5]   = {106.785, 106.724, 106.760, 106.767, 106.769};
double   newCandles_High[5]   = {106.792, 106.765, 106.780, 106.781, 106.769};
double   newCandles_Low[5]    = {106.716, 106.719, 106.746, 106.758, 106.715};
double   newCandles_Close[5]  = {106.724, 106.760, 106.766, 106.769, 106.725};

int      tick_count           = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
   
   ArraySetAsSeries(barsBuffer1  ,true);
   ArraySetAsSeries(barsBuffer2  ,true);
   ArraySetAsSeries(barsBuffer3  ,true);
   ArraySetAsSeries(barsBuffer4  ,true);
   
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);
   
   ArrayInitialize(barsBuffer1   ,0);
   ArrayInitialize(barsBuffer2   ,0);
   ArrayInitialize(barsBuffer3   ,0);
   ArrayInitialize(barsBuffer4   ,0);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int  OnCalculate(
   const int        rates_total,       // размер входных таймсерий
   const int        prev_calculated,   // количество обработанных баров на предыдущем вызове
   const datetime&  time[],            // массив Time
   const double&    open[],            // массив Open
   const double&    high[],            // массив High
   const double&    low[],             // массив Low
   const double&    close[],           // массив Close
   const long&      tick_volume[],     // массив Tick Volume
   const long&      volume[],          // массив Real Volume
   const int&       spread[]           // массив Spread
   )
{
   if(rates_total - prev_calculated > 1)
   {
      if(prev_calculated == 0)
      {
         Print("~~~~ Предварительный расчёт индикатора.");
         for(int i = 0; i < 5; i++)
         {
            barsBuffer1[0] = newCandles_Open[i];
            barsBuffer2[0] = newCandles_High[i];
            barsBuffer3[0] = newCandles_Low[i];
            barsBuffer4[0] = newCandles_Close[i];
         }
         Print("~~~~ Предварительный расчёт индикатора закончен.");
      }
      else return(0);
   }
   else Print("tick_count = ",++tick_count);
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
barsBuffer1[0]を barsBuffer1[i]に変更すると、描画されます。でも、それなら新しいキャンドルを 追加するにはどうしたらいいのでしょうか?
 
Сергей Таболин:

以下は私の例です。

barsBuffer1[0]を barsBuffer1[i]に変更すると、描画されます。しかし、それでは新しいキャンドルを 追加するにはどうしたらよいのでしょうか。

すべてのアレイに同じフォーカスがあるわけではありません。

理由: