エラー、バグ、質問 - ページ 436

削除済み  
Interesting:

1.それはなぜでしょうか?有害な症状には断固とした治療が必要です。

2.変数や配列などの名称は統一したり、言語のキーワードを使ったりしてはいけません(でも配列の「Symbol」はとても印象的で、コードの中で配列なのか他のものなのか分からなくなりますね)。

1.まず、その症状がポジティブなものなのかネガティブなものなのか、はっきりさせる必要がありますね。私の経験では、グローバル変数の値を 変更するはずのない関数で変更しようとしたケースがあります(くそコピーペースト)。このエラーを見つけるのに数日かかりました。それ以来、原則的にグローバル変数がないとどうしようもない場合に、グローバル変数を使うようになりました。

2.私もそう思います。でも、1つの機能の中で使われるのであれば、気にならないですね。しかし、このような名前のグローバル変数は、実に将来の混乱の元となる。

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
削除済み  

でも、もう一度質問させてください。

OnTickの内部でOnInitのトリガーを決定することは可能でしょうか?
例えば、OnTickの内部で、EAの初期化回数を格納するスタティック変数を宣言できますか(MQL5でこれと同様のプロパティが存在する場合)。

 
voix_kas:

私は被害妄想に陥っているのでしょう。私はパブリック(グローバル)変数が好きではありません。私はムベトンだと思っています。

グローバル 変数は、少なくとも遠くから見ることができます。しかし、静力学の関数の中に重大な累積変数を隠すことは、自分のために丁寧に熊手を広げることなのです。このような形で関数内に隠された累積的な静的配列を見たのは初めてです。これは燃えるようなレーキだ。

クラスを使う - 彼らはグローバルレベルをきれいに残し、すべてのガッツを隠し、松葉杖を取り除くでしょう。

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
削除済み  
voix_kas:

でも、もう一度質問させてください。

OnTickの内部でOnInitのトリガーを決定することは可能でしょうか?
例えば、OnTickの内部で、EAの初期化回数を格納するスタティック変数を宣言できますか(MQL5でそのような、または同様の変数があれば)。

OnInitトリガーの数を数えるだけでなく、なぜ初期化が発生したのかを調べることも可能です(実装は別の問題です)。

例えば、_UninitReasonはご存知でしょうか?

削除済み  
OnInitで読み込むことができますが、私はこのデータを別のイベントで(グローバル変数を 使用せずに)必要とします。いずれにせよ、実装の問題ですね。OnDenitと同じです。
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
削除済み  
書いたことのない授業。誰か助けてくれたら、感謝します。
WorkSymbols クラスを書く必要がある。
方法です。
文字列 GetSymbol[];
bool UpdateSymbols(inWorkSymbols)を使用します。
bool UpdateSymbolsStatus()。
int GetSymbolCount()。

生意気なリクエストで申し訳ないのですが・・・。私も自分で考えてみようと思います。
 
Renat:

そうですね、シンボル変化と時間枠の条件を組み合わせるのは間違いだと思われます。

また、2つの条件に分けることにも賛成です。チケットはすでにサービスデスクに置かれています。

ありがとうございました。
削除済み  

ちょっと料理してみました。批評は歓迎します。

input string inWorkSymbols  = "USDCHF; GBPUSD; EURUSD; USDJPY; USDCAD; AUDUSD; EURGBP; EURAUD; EURCHF; EURJPY; GBPJPY; GBPCHF"; // Рабочие инструменты

class CSymbolList {
  private:
    string Symbols[];

  public:
    void   CSymbolList() { SetSymbols(""); }
    void  ~CSymbolList() { ArrayFree(Symbols); }
    int    GetSymbolCount() { return ArraySize(Symbols); }
    void   SetSymbols(string);
    string GetSymbolName(int);
};

void CSymbolList::SetSymbols(string Source) {
  ArrayFree(Symbols);
  for (int count = 1, i = 0; i < SymbolsTotal(false); i++)
    if (StringFind(Source, SymbolName(i, false)) != -1) {
      if (ArrayResize(Symbols, count) != count) {
        ArrayFree(Symbols);
        return;
      }
      Symbols[count-1] = SymbolName(i, false);
      count++;
    }
}

string CSymbolList::GetSymbolName(int Item) {
  if (Item < 0 || !ArraySize(Symbols) || Item >= ArraySize(Symbols)) return "";
  return Symbols[Item];
}

void OnStart() {
  CSymbolList slMain;
  slMain.SetSymbols(inWorkSymbols);
  for (int i = 0; i < slMain.GetSymbolCount(); i++)
    Print(slMain.GetSymbolName(i));
}
削除済み  

唯一気に入らないのは、作業データを含む配列のサイズを「ライブで」変更することです。
開発者への質問ですが、以下の条件下で、変更される動的配列に 以前入力されたユーザーデータが保存されることは保証されているのでしょうか?

if (ArrayResize(Symbols, count) == count)
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
voix_kas:

唯一気に入らないのは、作業データを含む配列のサイズを「ライブで」変更することです。
開発者への質問ですが、以下の条件下で、変更される動的配列に 以前入力されたユーザーデータが保存されることは保証されているのでしょうか?

保証されるに違いない。少なくとも私はいつもそれを頼りにしていますし、問題は一度も起きていません。