どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 566

 

みなさん、こんにちは。

解決策をアドバイスしてください。

2つまたは3つ以上のインジケータが動作している。それぞれにセリフがある。それぞれComment(" Indicator 1 is running")、次のComment(" Indicator 2 is running")、など。

どのように、おそらくキャリッジの "スマート "翻訳で、画面の左上隅のビューを取得する(次の碑文は、少なくとも1刻みの期間で前のものを上書きしていません)。

指標1が機能している。

指標2が機能している。

LED 3が動作しています。

など

 

古いEAで、610ビルドで最適化基準を 宣言するにはどうしたらいいですか?

Expert Advisor は 610 ビルドで動作しています。

例えば、MQL5では以下のようなコードになります。

double OnTester()
{
double prof=0.0;
prof=TesterStatistics(STAT_PROFIT);

  return(prof);
}

起動前のExpert Advisorに配置すると、Customカラムが表示されない。

2つ目の質問:古いEAでは、コンパイル時に「関数は値を返さなければならない」という黄色いメッセージが表示されます。

例のセリフ。

if(Work==false){Alert("Критическая ошибка. Эксперт не работает.");return;}
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//--- параметры для записи данных в файл
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
string             InpFileName="";
int t=0;
int file_handle=-2;
double mass[];
int OnInit()
  {
   Comment("Start");
   InpFileName=StringConcatenate(WindowExpertName(),".csv");      // Имя файла  
 
   ResetLastError();
   file_handle=FileOpen(WindowExpertName()+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);   
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   Comment(t);
   if(file_handle!=INVALID_HANDLE)
     {
      t++;
      ArrayResize(mass,t+1,10000);
      mass[t]=Ask;
      //--- запишем время сигналов и их значения в файл
      for(int i=0; i<ArraySize(mass); i++)
       FileWrite(file_handle,mass[t]);
      //--- закрываем файл
      FileClose(file_handle);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
//+------------------------------------------------------------------+

次の行に書き込む方法がわからない...。

各引用符を改行で 書こうとしてうまくいきません.

 

カスタムインジケータを 使ったEAをテストしています。条件通りに取引が成立することもあれば、どのような原理で成立しているのか不明なこともあります。ビジュアライゼーションを開始すると、インジケータはその通りに描画されるが、ディールは必ずしもインジケータと一致しない。アラートで問題箇所を確認しようとしましたが、Expert Advisorのインジケーターもゼロが表示されます。何が問題なのか理解できないのですが、テスト時にインジケータが正しく描画されるのであれば、インジケータの値はどこでEAに渡されているのでしょうか?

コードはExpert Advisorの中にあります。
double line=iCustom(NULL,0,"Ttest3",Period_MA_1,p2,p3,p4,1,1);

if (line >0){Opn_B=true;}
if (line <=0){Cls_B=true;}
 
VOLDEMAR:

次の行に書き込む方法がわからない...。

各引用符を改行で書こうとしてうまくいきません.


ファイルシーク
 
Forexman77:

カスタムインジケータを使ったEAをテストしています。条件通りに取引が成立することもあれば、どのような原理で成立しているのか不明なこともあります。ビジュアライゼーションを開始すると、インジケータはその通りに描画されるが、ディールは必ずしもインジケータと一致しない。アラートで問題箇所を確認しようとしましたが、Expert Advisorのインジケーターもゼロが表示されます。何が問題なのか理解できません。テスト時にインジケータが正しく描画された場合、Expert Advisorに渡されるインジケータの値はどこにあるのでしょうか?

コードはExpert Advisorの中にあります。

もしかしたら、EAに問題があるのでは?
 
Vladon:

アドバイザーに問題があるのでは?
正直、自分でもよくわからないんです。ゼロ以上のビジュアルテストインジケータを1つ実行すると、7つのうち何パーセントかはトレードが開き、残りの何パーセントかは開きません。
 

理解できないエラーが発生しました。

'li_cnt' - undeclared identifier

を行ないます。

    return (li_cnt);

この行は関数の中にあります。

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        int li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}
変数li_cntは見たまま宣言されています。コンパイラは宣言されていないと宣誓している。これはどういうことでしょうか?
 
hoz:

理解できないエラーが発生しました。

を行ないます。

この行は関数の中にあります。

変数li_cntは見たまま宣言されています。コンパイラは宣言されていないと宣誓している。これはどういうことでしょうか?


変数が if else の内部で宣言されているため
 
hoz:

理解できないエラーが発生しました。

を行ないます。

この行は関数の中にあります。

変数li_cntは見たまま宣言されています。コンパイラは宣言されていないと宣誓している。これはどういうことでしょうか?

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
int li_cnt=0;
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}