"ダミー "からの質問 - ページ 7

 
kPVT:

私は、イベントに対応するために、専門家を持っています。

アクションに対応しないイベントが発生する。

チャート上のクリックとボタンのクリックに正確に対応する

物議を醸すイベント id=9(CHARTEVENT_CUSTOM) は、例えば チャートが移動し、同様のイベントが10個程度発生したときに生成さ れるものです

CHARTEVENT_OBJECT_ENDEDIT イベントがチェックされていない。

残りはすべて不明です。説明文とイベント番号が一致しないか、手動でオブジェクトを作成したときに、オブジェクトの作成イベントが誤って生成される。

すべてにおいて、助けてください。

こうすればいいんじゃない?

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

おそらく私のやり方が悪いのでしょうが、なぜ誤解があるのか、もう少し詳しく書いてみます。

AlexSTAL:

すでに割り当てられている数値定数CHARTEVENT_XXXXXXXXXX...に数値対応を初期設定する。

CHARTEVENT_XXXXXXXXXの定数が持つ数値は、どこで確認できますか?

見つからなかったので、実験してみたところ、CHARTEVENT_KEYDOWN = 0CHARTEVENT_CLICK = 4で、ヘルプのこれらの定数の記述順と一致 することがわかりました。

他のイベントにも適宜番号を振っているので、event[10]という配列があります。

ロッシュ

残念ながら、ご質問の内容は理解できません。具体的に何が問題なのか?

私のイベントの番号付けと、前回の記事のExpert Advisorの使用に基づいています。

例えば、トレンドラインを引く→イベントCHARTEVENT_OBJECT_CHANGEと します

この行をイベントCHARTEVENT_OBJECT_CHANGE に移動します

メニューからプロパティを変更→2つのイベントCHARTEVENT_CHART_CHANGE CHARTEVENT_CUSTOM を実行。

Delを押して削除→イベントのみCHARTEVENT_KEYDOWN, (イベント番号が間違っている場合、削除とボタン押下の2つのイベントが残っているはずです)

すべて、私のナンバリングに基づくものです。

次は...

Expert Advisorを使用しています

トレンドラインの描画 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 トレンドライン 40716

この線を移動させる -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 トレンドライン 40716

メニューからプロパティを変更する→ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 トレンドライン 40716 と ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s= を実行します。

Delを押して削除→ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=.

状況がクリアになっていない。

念のため。

MT5 64x - ビルド458。

システムはW7 64x Home Extendedです。

対応していただきありがとうございました ))




Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
kPVT:

おそらく私のやり方が悪いのでしょうが、なぜ誤解があるのか、もう少し詳しく書いてみます。

CHARTEVENT_XXXXXXXXの定数の数値はどこで確認できますか?

見つからなかったので、実験してみたところ、CHARTEVENT_KEYDOWN = 0CHARTEVENT_CLICK = 4で、ヘルプのこれらの定数の記述順と 一致することが判明しました。

残りのイベントにも適当に番号を振って、配列event[10]のようになりました。

これは絶対にやってはいけないことです

数値は開発者が割り当てるもので、いつでも変更可能です。

文字定数のみ使用可能

--------------

uncleVicが 正しい使い方の例を示しています(あるいは私のヘルプのスニペット)。

--------------

何してるんですか?なぜ数値表現が必要なのでしょうか?

 
AlexSTAL:

どんなことがあっても、これはやってはいけないことです。

数値は開発者が割り当てるもので、いつでも変更可能です。

文字定数のみ使用可能

OKです。そうしてはいけないというのは、私も同感です。

私の手柄は忘れてください)。

移動する...

AlexSTAL

おじさんが 正しい使い方の例を教えてくれた(まあ、あるいは私の助け舟か)

上に書いたように、uncleVicさんの 例を使うと、アクションにマッチしないイベントも取得することができます。

kPVT です。

トレンドラインの描画 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 トレンドライン 40716CHARTEVENT_OBJECT_CREATEの 代わりに、トレンドライン。

.....

Delで削除→ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=CHARTEVENT_OBJECT_DELETEではなく CHARTEVENT_KEYDOWNで 削除。

AlexSTAL

何してるんですか?なぜ数値表現が必要なのでしょうか?

説明すると長くなるので、どうでもいいことですが。マイナンバーのことは忘れよう。

要は、イベントの意味を理解しようとしているのですが、uncleVicの 例を使っても、発生するイベントと実行されるアクションの間に矛盾があることが理解できません。

 
kPVT:

OKです。それは無理だと思う。

私の手のひら返しは忘れてください)。

移動する...

上に書いたように、uncleVicさんの 例を使うと、アクションにマッチしないイベントも取得することができます。

kPVT です。


初期設定に追加する。

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

大丈夫です。

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Alex ありがとうございました。

AlexSTAL:

初期設定に追加します。

....

エキスパートブロックに追加

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

すべてが定位置にある。

ヘルプを見ましたが、この2つのイベントを「初期化」しないと他のイベントが正しく動作しないとはどこにも書かれていません。

コメントアウトしたら、すべてうまくいきました。

Expert Advisor/IndicatorがOnInit ブロックを持っていない場合、イベントが混乱することが判明しました。

考え方かもしれませんが、mql5プログラマーは念のため知っておいた方がいいと思います。

 
私はウィザードでExpert Advisorを生成しますが、テスターは、Core 1テスターはOnInit重大なエラーが発生したため停止を生成し、誰もがこれに遭遇した? どのようにそれが解決されますか? 結局、ウィザード、OK、私はそこに間違いを犯しただろう...
 
Europa:
WizardでExpert Advisorを生成したのですが、テスターでCore 1というエラーが出ます。 OnInit critical errorでテスターが止まってしまいます。 どなたか遭遇したことがありますか? どのように解決していますか? やはり、Wizard、そこで何か失敗しているのでしょうか・・・。
ソースコードを添付してください。そしてテストパラメータ。
 
uncleVic:
出来上がったソースコードを添付してください。そしてテストパラメータ。
ファイル:
TheFirst.mq5  7 kb
 
Europa:

再生されませんでした。

テストパラメータをもっと増やしてほしいとお願いしました。しました。

MT5のバージョン、ビットレートともに。