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

 
Maxim Khrolenko:
そして、グローバル(外部ではなく)は、ダメ なんです。

なぜ良くないのでしょうか?グローバル変数は、プログラム起動時に一度だけ初期化されると明示されています。

異なる動作をさせたい場合は、OnInitで好きなように初期化します。

 
Yuri Evseenkov:
ドキュメントに反映させるのが良いと思います。
はい、そうします。
 
zaskok3:
MQL4+では、入力パラメータをプログラムで 変更する必要がある場合、externは欠かせませんね。例えば、標準のインジケータをインタラクティブなものに変換する場合、inputをexternに置き換える必要があるんだ。コンパイラは入力変数をconstとして扱い、それを変更しようとすると文句を言います。externではそのような問題はありません。

入力パラメータの "ダブラー "を使用する

MQL5Indicators︓Examples︓ADX.mq5 に例があります。

//--- input parameters
input int InpPeriodADX=14; // Period
//---- buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];
//--- global variables
int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else ExtADXPeriod=InpPeriodADX;
 
同志の皆さん、コンパイル時に定期的に「Internal compiler error」と表示される方はいらっしゃいますか?明らかな理由はなく、再コンパイルの場合はハングアップし、エディタを閉じて(同じタブで、同じコードで)再開した場合は、通常コンパイルが正常に行われます。コードには何の変化もない!しかし、このエラーが数回連続して発生し、エディタを最初に再起動しても解決しないことがあります。今のところ、リロードの結果、すべてコンパイルすることができました。でも、遅かれ早かれ、動かなくなるんじゃないかと心配なんです。同じようなバグに遭遇した人を探して、一緒に発生状況のデータをサービスデスクに提供したいですね。
削除済み  
Slawa:

入力パラメータに "ダブラー "を使用

MQL5Indicatorsのサンプルはこちらです。

さて、インジケータをインタラクティブバリアントに変換するには、ソースコードに1行だけ追加する必要があります。ダブラーを作成する場合、ダブラー作成用の追加文字列の他に、テキスト全体の置換を作成する必要があります。一行変えるだけでいいのに、なぜこんな面倒なことをするのか。

コンパイル時に入力 変数のconstを意識させないようにするためにはどうしたらよいでしょうか。

 
zaskok3:

インジケータをインタラクティブなバリアントに変換するためには、ソースに1行追加するだけです。二重にしてしまうと、二重を作るための余分な行に加えて、テキスト全体を置き換える必要があります。一行で簡単に変更できるのに、なぜこんな面倒なことをするのか。

コンパイル時に入力 変数のconstを意識させないようにするためにはどうしたらよいでしょうか。

テキスト編集"Ctrl" + "H" - 検索と置換。難しいことは何もありません。ただ、怠慢は禁物です。
 
zaskok3:

コンパイル時に入力 変数のconstを意識させないようにするためにはどうしたらよいでしょうか。

MT5の履歴ベースにおけるインジケータのグローバルストレージ。彼らにとっては、入力パラメータが重要なのです。入力パラメータを変更すると、古いパラメータを持つインジケータは破棄され、変更したパラメータを持つ同じインジケータが再度作成されます。

つまり、純粋に建築的な制約である

第4バージョンでは、インスタンスから定数を取り除くことができましたが、その場合、新しいMQL4とMQL5の非互換性が発生します。ですから、私たちはそれをしません。引き続きexternをご利用ください。

削除済み  

Slawa:

つまり、純粋にアーキテクチャ上の制約である。

アーキテクチャが硬直的で、簡単な柔軟性すらあり得ないのが残念です。MQL5でのインタラクティブには、松葉杖が必要であることがわかりました。問題は、言語によって可能性が制限されるなら、その利点はどこにあるのかということです...。
 
pako:
端末を切り離すウィンドウ
如何して
削除済み  
Joo Zepper:
如何して
どこかの掲示板にあった、DLL