MQL5への願い - ページ 117

 
HideYourRichess писал(а)>>
ipodと交換か!?- 神様ごめんなさい、すぐに注意すればよかったです。どんな些細なことでもいいので、書いてください。すべてがクリアになった今-理解と忍耐で受け止めよう。iPodと交換しよう!- aaaaaghit....

お見舞いありがとうございます、頑張ってください、少なくとも進行しないように

 

MT4で問題が発生しただけで、MT5で発生しないか確認してください(未確認)。


一番最初(init以前)は、アレイが設定されていました。

xsell[3]です。

xbuy[3]です。


その前に外部変数。

extern int Max_Array_Size = 13;


start()ループの中で。

ArrayResize(xsell, Max_Array_Size);

ArrayResize(xbuy, Max_Array_Size);


そして、ループfor()。


for(int kss= Max_Array_Size; kss>0; kss--) {

xbuy[kss] = ... ....;

. . .

}


販売(Custom Indicator)と購入モジュールの両方で同じスキームが使用されました - すなわち、変数は異なっています。

が、原理は同じです。最初は販売用に全部書いて、コンパイルして......すべて順調で、何の問題もありませんでした。そして、コピーした

コンパイルにかなり時間がかかり、切り替えも

時間軸の切り替えもかなり時間がかかった。販売中止-何も変わっていない、ブレーキ。

販売だけを残し、走るのは速い。コンパイラは文句を言わなかったが、実行にかなり時間がかかっただけだった。

怪しいと思ったところを全部見直して、購入時に一部書き直したんだけど、ラグがある!...。

問題は配列の次元にあることがわかりました:13 => 0-12、そしてforループでは13も与えようとしていました


修正後。

ArrayResize(xsell, Max_Array_Size+1);

ArrayResize(xbuy, Max_Array_Size+1)。


売上と仕入の集計が正しく行われ、時間軸の切り替えも早くなりました。

しかし、コンパイル時にエラーが出たはずです。そのような場合の原因究明

その原因を探るのはまったく容易ではない(自分でも気づいていない場合もある)。

そして、なぜセールスモジュールですべてが順調に進んでいたのか、その理由は不明である。

 
chief2000 писал(а)>>

しかし、このエラーはコンパイル時に発見されたはずです。このような場合の原因究明は、まったく簡単ではありません(問題があることに気づかない場合もあります)。

コンパイラは定義上、変数の値を追跡することはできませんし、すべきでもありません。

また、セールスモジュールですべてが順調に進んでいた理由も不明です。

2つ以上のエラーより、1つのエラーの方が処理が早いからです。

 
fwiq >> :

コンパイラは定義上、変数の値を追跡することはできませんし、またそうすべきでもありません。

本当にそうだとしたら、まずい。

結局のところ、あらかじめ定義されていない変数にアクセスするのと実質的には同じことなのです。

fwiq さんが書き込みました>>1

2つ以上のエラーを処理するよりも、1つのエラーを処理する方が早いからです。

いや、違うんです。セールスモジュールだけが残っているときは問題ないと申し上げました。

で、売上を削除して購入だけにしたところ、問題が発生しました。両モジュールとも、その差は非常に顕著でした。

は、一部の操作を逆にした以外は全く同じです(>/<、High[]/Low[]など)。

 
chief2000 писал(а)>>

いいえ、別の問題です。販売モジュールだけを残したときは問題がなかったのに、販売を削除して購入だけを残したら問題が発生したとお話しました。この違いは非常に顕著で、一部の操作を逆に変更した以外は、両モジュールは全く同じです(>/<、High[]/Low[]など)。

たぶん、変数や配列の定義ではないのでしょう。MT4のインジケーターで、プログラム的にラインを追加し始めたり、反映された配列の名前を変更したりする瞬間は、慎重に注意深く見守る必要があります。今回のように、混乱して回線が反映されなかったり、計算が切れたりすることもあります。出て行って入ってくればすべてうまくいく」というジョークがあるように、治療法は一つしかないのです。

 

文字通りなら、オーバーロードも役に立たなかった。

とにかく、売ることと買うことを区別したことで、問題があることを知ることができたのです......。

幸せは、不幸中の幸いでした :)

 
もうひとつ質問があります。インジケータでMQL5デバッガを実行できません。スクリプトやExpert Advisorでは動作するのですが、どのインジケーターでも停止してしまい、ステップを踏むことができません。未記載のクセモノがあるのかどうか、ご存知の方は教えてください。
 
fwiq >> :
もうひとつ質問があります。インジケータ上でMQL5デバッガを実行できません。スクリプトやExpert Advisorでは動作するのですが、どのインジケーターでも停止してしまい、ステップを踏むことができません。今まで、こういうものを使っていたわけではなく、こういうものを使って仕事をするようになったのです。

一週間前にハンドラーは、これはアイデアだと書いて、デバッガーインデックスでデバッグは後で動作するようになります

 

MT4では、カンマの後にAskやBid、その他(Close、Openなど)が集まり、常に エラーが発生していました。

という膨大な数の数字(1.432311111111111111など)が表示されます。その結果、「NormalizeDouble(Bid,Digits);」を追加することになった

そして、これはMTレベルで一旦解決できるのです。

 

ObjectFindと ObjectDeleteの 機能に、.NETのようなマスクを 扱える機能を追加してください *,?

もちろん、原理 的にはObjectFindのみ 使用可能です。後方互換性を保つ必要がある場合は、前者の機能をそのまま 残し、例えばObjectFindM(複数検索)などでセットを補完 する必要があります。

例:"Signal "で始まるテキストラベルを探したい。

実装:最初に見つかったオブジェクトの名前(またはハンドル、ただしこれを扱うことができる他の関数が必要)を返す。

表記法: ObjectFindM("Signal*")

例:"0 "ウィンドウから、"Signal "で始まるテキストラベルのみを削除する場合。

表記法: ObjectDelete(0,"Signal*")