В данной статье рассматриваются аспекты проектирования и разработки системы пользовательских событий графика в среде MQL5. Предлагается пример подхода для классификации событий. Приводится программный код событийного класса и класса-обработчика пользовательских событий.
ところで、ボタンをクリックしたときに、LKMが押されていれば絞り込まれ、LKMが離されていれば解放されるようにするにはどうしたらいいか、ご存知の方はいらっしゃいますか?
を押してクリックとリリースをするものと、ボタンをクリックしてリリースをするもの、ナンセンス)
ZS:もちろん、LKMをリリースした直後にプロパティを変更することは可能ですが、そういうものなのでしょうか?)
ところで、ボタンをクリックしたときに、LKMが押されていれば絞り込まれ、LKMが離されていれば解放されるようにするにはどうしたらいいか、ご存知の方はいらっしゃいますか?
を押してクリックとリリースをするものと、ボタンをクリックしてリリースをするもの、ナンセンス)
ZS:もちろん、LKMをリリースした直後にプロパティを変更することは可能 ですが、そういうものなのでしょうか?)
そうですね、自分流にやるなら、オブジェクトの状態を自分でコントロールする必要があります。)
が、LKMを押しているときはボタンが押されず、LKMを離したときだけボタンが押される、ナンセンス )
ZS: ボタンを押しますか?)
しかし、そうでない場合は、OnChartEventは、テスターで動作しない ことを考えると、一般的に、コピーのコピーとテスターで方法が動作しないことが できます。
が、LKMを押しているときはボタンが押されず、LKMを離したときだけボタンが押される、ナンセンス )
ZS: ボタンを押しますか?)
しかし、そうでない場合は、OnChartEventがテスターで動作しないことを考えると、一般的に、テスターではlopsで方法は ありません。
今のところ、テスターはうまくいかないことが多いですね。servicedeskに書き込んでから、更新をフォローするために残ります。)
また、テスターの外では、コントロールが思い通りに動作するためのハンドラを自分で書かなければなりません。
が、LKMを押しているときはボタンが押されず、LKMを離したときだけボタンが押される、ナンセンス )
ZS: ボタンを押しますか?)
しかし、そうでない場合は、OnChartEventがテスターで動作しないことを考えると、動作しないのコピーとテスターで方法はありません。
OnChartEvent()は、典型的なイベントとユーザーイベントを処理する。カスタムイベントに関しては、テスターのこのハンドラが機能します!!!! MQL5の処方箋 - カスタムチャートイベントの処理」を参照してください。そこにはCustomEventProcessorの ロボットがある。 テスターで取引される。
テスターの悩み-それはグラフィック...以前、サービスデスクにグラフィックの ことを書きましたが、今のところ 約束だけ です...。
OnChartEvent() は、典型的なチャート・イベントとカスタム・イベントを処理します。カスタムイベントに関しては、テスターのこのハンドラが機能します!!!! MQL5の処方箋 - カスタムチャートイベントの処理」を参照してください。そこにはCustomEventProcessorの ロボットがある。 テスターで取引される。
テスターで困るのは、グラフィック...。以前、サービスデスクにグラフィックのことを書きましたが、今のところ 約束だけ です...。
状況は以下の通りです:チャート上にOBJ_TEXTオブジェクトを 作成します。そして、このOBJ_TEXTをチャートから手動で削除しています。そして、チャート上で削除されたオブジェクトを見つけようとすると、エラーが発生します(これは論理的なものです:オブジェクトは削除されたので、見つけることができません)。次に、削除されたOBJ_TEXTオブジェクトのアンカーポイントをObjectMoveで移動しようとしますが、エラーは出ません。
質問:削除されたOBJ_TEXTのアンカーポイントを移動しようとすると、ObjectMoveはエラーを出すべきですか?
ビジュアライザー(テスター)でインジケーターを表示させようとすると、4014のエラーが表示されるのですが、ターミナルウィンドウで同じコードを実行してもそのようなエラーは発生しません。
コードは以下の通りです。
Indic_Handle[Indic_Total-1]=iMA(NULL,0,MA_Period,MA_Shift,MODE_LWMA,PRICE_CLOSE);
if(Indic_Handle[Indic_Total-1]==INVALID_HANDLE)
{Error_Message;return(false);}
if(F_If_Indic_Exist(Indic_Handle[Indic_Total-1])==false) // Проверяем есть ли уже индикатор с таким хендлом. Если нет - добавлем новый индикатор
if(ChartIndicatorAdd(0,0,Indic_Handle[Indic_Total-1])==false)
{Error_Message;return(false);}
Error_Message "コマンドはマクロで定義されています。
#define Error_Message_Exp Alert(__FILE__+": "+__FUNCTION__+": Error at line "+(string)__LINE__+". Last Error code: "+(string)GetLastError())
ターミナルで実行した場合:コードはエラーなく正常に動作しています。チャート上にインジケータがプロットされ、"Indic_Handle[Indic_Total-1]"変数にハンドル値が代入されます。
しかし、テスターやビジュアライザーで実行した場合。ログにエラーが出力されます。
2014.12.15 21:16:10 Core 1 2014.01.01 00:00:00 Alert: GA_Incl.mqh: F_Offspr_Init: Error at line 149. Last Error code: 4014
(行番号 "149"- は、「148」行目以下の「{Error_Message;return(false);}」 行の「if(ChartIndicatorAdd(0,0,Indic_Handle[Indic_Total-1])==false)」になります。
明らかにテスター環境と端末環境で実行が異なる "ChartIndicatorAdd "関数を実行した際にエラーが発生します。
エラーコードをデコードしても、はっきりしない。
err_function_not_allowed
4014
システム関数の呼び出しを許可しない
フォーラムで、他のユーザーが同じ状況でこのエラーが発生したという記述を見つけたのですが、彼の質問には答えられないままです。(https://www.mql5.com/ru/forum/1111/page763#comment_208678)
エラーが出てもテスターでプログラムを実行し続ければ、必要なインジケータがチャートに適用されることがわかりました。しかし、インジケータハンドルはIndic_Handle[Indic_Total-1] 変数の値に対応していない。(ただし、インジケータ自体は、ChartIndicatorAddコマンドを呼び出した後、いくつかのティックの後に作成されます。
よろしくお願いします
ありがとうございます。
なるほど、印刷されないんですね。でも、うまくいくんです。グラフィックでイベントを追ってみる。