MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 650

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4初心者のための質問、アルゴリズムやコードに関するヘルプとディスカッション

タラス・スロボダニク さん 2018.10.07 09:47

例のごとく書いています)

記号を覚える必要がなければ、覚えていないかもしれません。

名前がチャートIDだけになる場合、不要な変数を削除するにはどうすればよいですか?
(多用途に使用する場合は、多くの変数があります。)

プレフィックスがない場合 - 同じことですが、不要な変数を削除する方法は?


=あくまで 一例として書いています)

素直でない心を伸ばしたいなら、教育の良いお手本になりますよ :-)

=チャート ID だけに名前を付ける場合、不要な変数を削除するにはどうしたらいいですか?

なぜ、まったく削除しないのか?例えば、ピリオドだけを格納したい場合は、name = prefix+symbol で十分です。GPが1つあれば全然大丈夫という思い込みがあるのですが、1つのチャートでフレームチェンジの操作を1回だけ行うと、次のチャートに行く前に終わってしまい、そこでまたピリオドが要求されてGPが上書きされてしまうのですが、どうしたらいいでしょうか?この場合、何か落とし穴があるのでしょうか?

 
Taras Slobodyanik:

私のコードは、私のコードは動作しますが、あなたのコードを見ることはできません。
下さい)

そこで、あなたのスクリプトをチャートに放り込んでみたところ、グローバル変数の リストが0になりました。
 
inter78:
そこで、あなたのスクリプトをチャートに放り込んでみたところ、グローバル変数の リストが0になりました。

確認する?それとも運転する?)
リストを視覚的に見るには、ダビング用のビットのような長いビットを見ることで、アブラカタブラやNaN

 
psyman:

なぜ、まったく削除しないのか?例えばピリオドだけを格納すればよいのであれば、name = prefix + symbol で十分である。GPが1つで済むという前提が全くないので、チャート上で1回だけコマ送り操作をすると、次のチャートに行く前に終わってしまい、そこで期間を再取得してGPを上書きしてしまいます。この場合、落とし穴はないのでしょうか?

物は考え様

もし、そのインディケータ(または何か)が、あるシンボルで、あるインスタンスで動作し、他の誰も同じ変数を作らないなら、もちろん、あなたは気にすることはできません。

 
Taras Slobodyanik:

を確認するか、運転するか)
リストをビジュアルに見るには、ダビング用のビットなど、長いビットを見ることです。

今、あなたが私に書いたことを私が理解したなら、私はあなたに迷惑をかけないでしょう。ただ、私のプログラミングの知識はゼロに近いんです。でも、ChartIDをグローバル変数に 歪みなく突っ込めたら、幸せなんですけどね。ありがとうございます。
 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。

タラス・スロボディアニク さん 2018.10.06 21:47

      string name=prefix_gv+"Price_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].price);
      

どうすれば、name変数にテキスト文字列の値が代入され、そこにもLine_ALL[i].priceがGPとして 書き込まれるような巧妙なことができるのでしょうか。

理論的にはnameは上書きすればいいのです。

アップデイト

GPの名前を格納するプレーン変数が必要なんだ。変数名は同じでもよい。そうだろ?

 
psyman:

トリッキーな部分を説明すると、nameにテキスト文字列の値が割り当てられ、そこにLine_ALL[i].priceが 書き込まれますが、GPとして?

理論的には、名前は上書きされるはずです。

アップデイト

GPの名前を格納するプレーン変数が必要なんだ。変数名は同じでもよい。そうだろ?

変数名では、名前(テキスト)を作成し、この名前でグローバル変数を 作成し、このGPに値を書き込む。
すなわち,GPのリストを生成し,その中に配列の一部を格納する。

1

 
inter78:
今書いたことを理解していれば、あなたに迷惑をかけることはないでしょう。ただ、私のプログラミングの知識はゼロに近いんです。でも、ChartIDをグローバル変数に 歪みなく突っ込めたら、幸せなんですけどね。ありがとうございます。

私のコードでは、long-ChartIDを一時的なGlobal Variableに書き込んでいます。

目視では、F3を押すと、そこにゼロ(または別の別の値)が表示されます。
これは、端末がダブルの値だと思い込んで表示しようとするためですが、私たちはロングという全く別の数値形式を渡しています。

この値を普通のdoubleとして読み返すと、とんでもないことになります。
私のコードに読み込まれると、また長くなります(保存と同じです)。
ターミナルウィンドウでこの変数を手動でクリックすると、ターミナルがスワップを検出するため、リセットされます。

 
Taras Slobodyanik:

変数(textual)に名前を作り、その名前でGlobal Variableを 作成し、そのGPに値を書き込む。
すなわち,GPのリストを生成し,その中に配列の一部を格納する。


しかし、この条件。

GlobalVariableCheck(name) || GlobalVariableTemp(name)

何で

GlobalVariableTempは一時的なグローバル変数を作成しようとする」という定義そのものが、私にはよくわからないのです。

GlobalVariableSetで作成できるのに、なぜ作成しようとするのか?

アップデイト

OnInitに入れる。

   string   GV_prefix="ZZ_";
   string   ctime=GV_prefix+_Symbol+"_"+ChartID();
   GlobalVariablesDeleteAll(NULL, 0);
    if (GlobalVariableCheck(ctime) || GlobalVariableTemp(ctime))
      GlobalVariableSet(ctime, Period());

OnChartEventで呼び出す。

if(GlobalVariableGet(ctime)!=Period()) 

受け取った応答は 'ctime' - 未宣言の識別子です。


 
psyman:

しかし、この条件。

なんで

GlobalVariableCheck() - そのような変数がすでに存在するかどうかをチェックします。
GlobalVariableTemp()- 一時的な変数を作成し、次回起動時にそれ自体で削除されるようにします。

psyman:

アップデイト

OnInitに書きました。

OnChartEventで呼び出しています。

In reply I get 'ctime' - undeclared identifier.

という文字列は、OnInitの上、グローバル コード変数に移動させる必要があります。

またはOnChartEventに 追加する。

string   GV_prefix="ZZ_";
string   ctime=GV_prefix+_Symbol+"_"+ChartID();