キャンバスがカッコいい! - ページ 82

 
Vitaliy Kuznetsov #:

通常のインジケーターコードの改善方法では、オブジェクトを使用するクローズドコードのEAとの衝突をグローバルに解決できないことが判明した。

Expert Advisorを改善することで、すべてのダッシュボード・インジケータとのコンフリクトがグローバルに解決されることを願っています(これが私の課題です)。

私はMT4ビルド1353スレッドに書きました、多分ターミナルプログラマーは注意を払うでしょう。

P.S.私はフクロウで変更を加え、何かスキーは行きませんでした...

ObjectGetXXX、ObjectFind、ObjectsTotal、ObjectNameなどが呼び出される場所と理由を見つけるために、コード全体(インジケータとExpert Advisor)に目を通してください。可能であれば、これらを取り除くようにしてください。

ChartRedraw()を呼び出すのを忘れないでください!! 上記...

 

モデレーターの皆さん、私はいろいろとくだらないことを言われているのですが、答えることは許されないのですか?驚きだ!

 
Maxim Kuznetsov #:

コード全体(インジケータと EA)に目を通し、ObjectGetXXX、ObjectFind、ObjectsTotal、ObjectName などがどこで、なぜ呼び出されているのかを調べてください。可能であれば、これらを取り除くようにしてください。

ChartRedraw()を呼び出すのを忘れないでください!!! 上記...

OnChartEvent()を賢く作って、すべてのイベントに連続して反応しないようにする必要がある。あるいは、何があるのか分からない。そして、なぜここに座って、問題のあるコードを示そうともしない男のために考えるのか?

今、私はObjectFind()とObjectGet()を1000000回繰り返すループを挿入した。

 
Dmitry Fedoseev #:

モデレーターの皆さん、私はいろいろとくだらないことを言われているのですが、答えることは許されないのですか?驚きだ!

このような選別にさらされているのはあなただけではない。

 
Dmitry Fedoseev #:

OnChartEvent()を賢くやって、すべてのイベントに連続して反応しないようにすればいい。あるいは、それが何なのか分からない。そして、なぜここに座って、問題のあるコードを見せようともしない男のために考えるのか?

今、私はObjectFind()とObjectGet()を1000000回繰り返すループを挿入した。

さて、4回目も書いてみよう。

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


リンクを開くと、投稿の一番下にコードの添付ファイルがあります。そして、そこで誰がどのように議論を展開したのか、書き込みを読むことができる。

問題は、提案されたコードにあるわけではなく(オブジェクトを持つExpert Advisorは自分で書くことができます)、インジケータを介してチャート切り替え機能を使用する際に、オブジェクトを持つすべてのExpert Advisorに影響するグローバルエラーにあります(1つの例外を除く)。

Nikolayは解決策を提示してくれたが、私はそのようなコードの作業にエラーがあるため、さらにこの問題に対処している。

Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
  • 2021.11.10
  • www.mql5.com
точнее в очередностях OnInit удалении своих объектов чарта. Тут ремонт терминала не имеет смысла не создавайте объектов по крайней мере до первого OnChartEvent. И удалять объекты пачкой лучше по ChartObjectsDelete
 
Dmitry Fedoseev #:

OnChartEvent()を賢くやって、すべてのイベントに連続して反応しないようにすればいい。あるいは、それが何なのか分からない。そして、なぜここに座って、問題のあるコードを見せようともしない男のために考えるのか?

今、私は ObjectFind()とObjectGet()を1000000回繰り返すループを挿入 した。

漠然とした疑問なのですが、ループよりも複雑なコードを書いたことがありますか?

 
Vitaliy Kuznetsov #:

まあ、4回目も書くから問題ないよ。

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


リンクを開くと、投稿の一番下にコードの添付ファイルがあります。そして、そこで誰がどのように議論を展開したのか、書き込みを読むことができる。

問題は、提案されたコードにあるわけではなく(オブジェクトを持つExpert Advisorは自分で書くことができます)、インジケータを介してチャート切り替え機能を操作する際に、オブジェクトを持つすべてのExpert Advisorに影響するグローバルエラーにあります(1つの例外を除く)。

Nikolayは解決策を提示してくれたが、私はそのようなコードの作業にエラーがあるため、さらにこの問題に対処している。

以下はその変更点です:

   if(sparam=="Win_Ea_"){ // вот тут надо поцивильней сделать, из класса брать имя... но уж сами как-нибудь 
      if(id == CHARTEVENT_OBJECT_CLICK){
         if(win.BtnClickUP()){
         
            win.Process();
            
            ChartPeriodSet(true);
            
         }
         if(win.BtnClickDN()){
         
            win.Process();
            
            ChartPeriodSet(false);
            
         }
      }
   }
   if(id == CHARTEVENT_MOUSE_MOVE){
      MouseX=(int)lparam;
      MouseY=(int)dparam;
      
   }

ひどいハングアップを何とか取り除きました。そして、ゆっくりしたペースでボタンを押せば、すべてうまくいく。

しかし、キツツキのように叩き始めると、またハングする。ただ、ハングは違って短い。

ハングを取り除くことはできないと思う。おそらく、それは時間枠の構造と関係があるのだろう。

ボタンに押された位置と押されていない位置があるようにして、ボタンがすぐに押されないように慣性を導入する必要があります。

0.1秒の遅延があれば、ユーザーは気づかないだろう。

--

実際、専門家でなくても猛烈な勢いでボタンを打ち込むことはできるのだが......。

 

そしてこうして、ハングを完全に取り除いた。

曲がっているかもしれないが、要はそういうことだ:

void windows_class::~windows_class(){
   //Canvas.Destroy();
}
int OnDeinit(const int r){
   if(r==REASON_REMOVE){
      Canvas.Destroy();
   }
}

ポイントは、チャートを切り替えるときにオブジェクトを削除しないことだ。

Destroy()したときに何が起こるか見てみよう。もしこのままにしておくことが可能なら...

 

皆さん、こんにちは)

申し訳ありませんが、もし私たちがmq4について話しているのであれば、このように解決できるかもしれません :?)

void OnChartEvent(const int     id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_CLICK
   || id == CHARTEVENT_CHART_CHANGE)
   {ChartSetSymbolPeriod(0,NULL,0);}
}
 

それこそがブレーキを生み出す要因だ:

void OnTick(void){
  win.Process();
}

なぜ?

理由: