問題は、switch operatorで何を間違えたのか、なぜ*Expert is not working*というメッセージが表示されないのか、なぜ本当にEAが動かなくなるのか、です。
//+------------------------------------------------------------------+ switch()//?????????????? почему в switch не передаёте параметр {case3:// Неверные параметры:
Work=false;return(0);}
// пытаемся менять значение TradeIsBusy с 0 на 1// если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"if(GlobalVariableSetOnCondition("TradeIsBusy",1.0,0.0))return(1);else// если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо // возникла ошибка (это мы и проверим){
_GetLastError =GetLastError();// если это всё таки ошибка, выводим информацию и пробуем ещё разif(_GetLastError !=0){Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
_GetLastError );continue;}}
GetLastError();//Сбрасываем состояние // пытаемся менять значение TradeIsBusy с 0 на 1// если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"if(GlobalVariableSetOnCondition("TradeIsBusy",1.0,0.0))return(1);else// если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо // возникла ошибка (это мы и проверим){
_GetLastError =GetLastError();// если это всё таки ошибка, выводим информацию и пробуем ещё разif(_GetLastError !=0){Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
_GetLastError );continue;}}
だから、わざと失敗するんですね。
しかもわざと、面白いように...。そのミスを見たいのですが、見つからないんです。
テストスクリプトとしていくつかの関数を実行し、コンパイルエラーがないか、どの関数が動作するか、ターミナルで確認します。今日、ウィンドウのバーの事前計算機能を取りました。
当然、*Not enough bars*というメッセージが出ますが、新しいティックでは、このメッセージは無期限に再び表示されると理解しています。
あとは、変数を追加してif 文を書き、エラーハンドラBloc_Errorの futureブロックにも、operatorswitchを入れて resultしています。
問題は、switch operatorで何を間違えたのか、なぜ*Expert is not working*というメッセージが表示されないのか、なぜ本当にEAが動かなくなるのか、です。みなさん、こんにちは。
EA実行時のエラーの原因がわからない。1つのEAを1つの端末で11ペア同時にテストしています(デモ口座)。私は毎時の初めにエントリー条件をチェックし、つまり11のEAが同時に作動し始めるのです。IsTradeBusy()関数(ここからはhttps://www.mql5.com/ru/articles/1412)を使って、お互いの邪魔をしないようにしました。最近、Expert Advisor が、ポジションを開く代わりにTradeIsBusy グローバル変数の値を変更しようとすると、エラーが報告されるようになりました。以下はコードの一部です。
エラーコードを表示します。
#4002 - "配列インデックス - 範囲外".
#4105 - "注文が選択されていません".
GlobalVariableSetOnCondition コマンドを使用して、どのような条件でこれらのエラーが発生する可能性があるのか理解できません。
Terminal Broco Trader 4.0 build 225.
端末がこのように不具合を起こすことはあるのでしょうか?
>>ありがとうございます、そうします。
皆さん、こんにちは。
EA実行時のエラーの原因がわからない。1つのEAを1つの端末で11ペア同時にテストしています(デモ口座)。私は毎時の初めにエントリー条件をチェックし、つまり11のEAが同時に作動し始めるのです。IsTradeBusy()関数(ここからはhttps://www.mql5.com/ru/articles/1412)を使って、互いに邪魔し合わないようにしています。最近、Expert Advisor が、ポジションを開く代わりにTradeIsBusy グローバル変数の値を変更しようとすると、エラーが報告されるようになりました。以下はコードの一部です。
エラーコードを表示します。
#4002 - "配列インデックス - 範囲外".
#4105 - "注文が選択されていません".
GlobalVariableSetOnCondition コマンドを使用して、どのような条件でこれらのエラーが発生する可能性があるのか理解できません。
Terminal Broco Trader 4.0 build 225.
端末がこのように不具合を起こすことがある?
このコードの部分については、何も言えません。そして、ヒントとして。関数開始時の最後のエラーの状態をリセットする。他の場所で発生する可能性もあります。
テキストに改行を入れるには?例えば、OBJ_LABELで、グラフ上に何かを表示し、テキストを数行で書きたい場合。
テキストに改行を入れるには?例えば、チャート上にOBJ_LABELで何かを表示し、テキストを数行で書きたい場合。
複数のラベルで表示する。
行数が動的に変化する場合はどうするのですか?しかも、かなりの大きさになることもあります。ラベルの代わりに何か他のものが使えるのでは?
例えば、1秒間の遅延を伴う無限ループを行うスクリプトがあるとします。削除しようとすると - "スクリプトを削除 "を選択しますが、チャートから削除されず、遅延なく突進を開始します。もう一度「delete」を押すと、スクリプトが削除されます。どうしたんですか?もしかしたら、正しく完成させるために、何かコードに追加すべきことがあるのでしょうか?
行数が動的に変化する場合はどうするのですか?しかも、かなりの大きさになることもあります。ラベルの代わりに何か別のものが使えるのでは?
アラート、オルタネートコメント -- いいですね。
例えば、1秒間の遅延を伴う無限ループを行うスクリプトがあるとします。削除しようとすると - "スクリプトを削除 "を選択しますが、チャートから削除されず、遅延なく突進を開始します。もう一度「delete」を押すと、スクリプトが削除される。どうしたんですか?私のコードに余計な単語を追加すべきかもしれません。
while(true)をwhile(!IsStopped())に置き換える。
行数が動的に変化する場合はどうするのですか?しかも、かなりの大きさになることもあります。ラベルの代わりに何か他のものが使えるのでは?
いいえ、コメントが合わない場合は別です。出力が生成されるf関数を書き、それを通して必要なものを書きます。
例えば、1秒間の遅延を伴う無限ループを行うスクリプトがあるとします。削除しようとすると - "スクリプトを削除 "を選択しますが、チャートから削除されず、遅延なく突進を開始します。もう一度「delete」を押すと、スクリプトが削除されます。どうしたんですか?私のコードに余計な単語を追加すべきかもしれません。
そうあるべきなのです。