MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1194

 
vladmirad:

アドバイスありがとうございます!これらの機能は承知しています。

あなたを含め、なぜ多くの人がmqlを斧のように知っている人たちに答えているのかわかりますか?そして、彼らは知識人の助言を無視するのか?ない場合は、このヒントを使ってください。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラムです。

MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。

アルチョム・トリシキン さん 2020.06.29 00:03

こんにちは。
OnChartEvent()https://www.mql5.com/ru/docs/event_handlers/onchartevent
必要なイベントがいくつかあります:
CHARTEVENT_OBJECT_CREATE グラフィカル オブジェクトの作成
CHARTEVENT_OBJECT_CHANGE プロパティ ダイアログでグラフィカル オブジェクトのプロパティを変更
CHARTEVENT_OBJECT_DELETE グラフィカル オブジェクトを削除
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
OnChartEvent() ハンドラすべてのパラメータを記録して、グラフィカル オブジェクトを追加/修正/削除したときの値を確認することができます。そうすることで、どこに行けばいいのかの方向性が見えてきます。

 
vladmirad:

ありがとうございます、これらの機能は知っています。
しかし、もし先験的にその名前を知らなければ、どうやってチャート上のオブジェクトを自動的に見つけて、そのパラメータを読み取ることができるのだろうか。
チャート上にマウスでオブジェクトを描くと、システムがそのオブジェクトに名前を付けます。

もちろん、オブジェクトの特性表から必要なデータをすべて手入力で整理することは難しくないが、ではなぜ自動化したのか。
しかし、プログラム的にEAにオブジェクトの名前を与えれば、おっしゃるような機能が使えるようになるのか、私にはまだよくわかりません......。

前述の通り、チャートイベントと連携する。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool applyObject(const string _objName) {
  if(MessageBox("Сохранить параметры объекта \"" + _objName + "\" для эксперта?", "ObjChange", MB_YESNO) == IDYES) {
    objName = _objName; // Запись имени изменяемого объекта
    // Запись других параметров изменяемого объекта ...
    return true;
  }
  return false;
}

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
) {
//---
  if(id == CHARTEVENT_OBJECT_CREATE || id == CHARTEVENT_OBJECT_DRAG || id == CHARTEVENT_OBJECT_CHANGE) {
    applyObject(sparam);
  }
}
ファイル:
ObjChange.mq5  5 kb
 
Artyom Trishkin:
こんにちは。OnChartEvent()
https://www.mql5.com/ru/docs/event_handlers/onchartevent
必要なイベントがいくつかあります: CHARTEVENT_OBJECT_CREATE グラフィカル オブジェクトを作成 CHARTEVENT_OBJECT_CHANGE プロパティ ダイアログでグラフィカル オブジェクトの属性を変更 CHARTEVENT_OBJECT_DELETE グラフィカル オブジェクトを削除



https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
OnChartEvent() からのすべてのパラメータを記録して、グラフィカル オブジェクトを追加 / 変更 / 削除するとその値が表示されるようにしました。そうすることで、どこに行けばいいのかの方向性が見えてきます。

ありがとうございました。すでにアドバイスを受けています。

 
Mihail Matkovskij:

以下のように、指定されたタイプのオブジェクトを座標で検索し、ログに記録することができます。

任意のデータをファイルに保存することができます。そしてExpert Advisorでは、適切なオブジェクトを追加し、ファイルからのデータをそれらに読み込むローダーを作ります。しかし、少なくとも特定のタスクのためのソースコードをスケッチし、ここで公開するのです。

マイケルさん、こちらこそありがとうございました!実践的な助言をありがとうございました。
 
Mihail Matkovskij:

前述のとおり、チャートイベントを操作します。

マイケル、あなたと@Artyom Trishkinの 助けはとても役に立ちました!

さて、価格チャートと見つかったオブジェクト(この場合はトレンドライン)の間のクロスポイントを見つける方法を考えなければなりません。

アルゴリズムは以下の通りである:
1.トレンドラインの読み取り座標を使用して、選択したTFの1小節あたりのトレンド上昇係数を計算します。
2.現在のバー上のトレンドラインの価格座標を計算し、選択されたTFの間にこのポイントのチャートによる交差の事実を監視します。
3.もしそうであれば、このイベントの処理、例えば、注文の開始などに進みます。そうでない場合は、次の小節についてこの手順を繰り返す。

でも、もしかしたらMT4(5)は、このシステムの仕様上、もっとシンプルな解決策を持っているのかも?

 
Alexey Viktorov:

あなたを含め、なぜ多くの人がmqlを知っている人に斧のように反応するのかわかりますか?そして、知っている人の忠告を無視するのです。あなたの場合は、こんなアドバイスです。


親愛なるAlexey、私のMQLの知識については全くその通りです。しかし、私が最初にコンタクトを取ったのは、あなたもよくご存知のMQLの優れたプロフェッショナルの一人である@Artyom Trishkin 氏ですから、私がインサイダーのアドバイスに注意を払わないというのは、あなたの誤解なのです。

彼のアドバイスによって、私は問題を解決する方法をすぐに理解することができ、さらなる行動への目を開かせることができました。そして、@Mihail Matkovskijは 私の生活をさらに楽にしてくれました。

 
vladmirad:

マイケル、あなたと@Artyom Trishkinの 助けはとても役に立ちました!

さて、価格チャートと見つかったオブジェクト(この場合はトレンドライン)の間のクロスポイントを見つける方法を考えなければなりません。

アルゴリズムは以下の通りである:
1.トレンドラインの読み取り座標を使用して、選択したTFの1小節あたりのトレンド上昇係数を計算します。
2.現在のバー上のトレンドラインの価格座標を計算し、選択されたTFの間にこのポイントのチャートによる交差の事実を監視します。
3.もしそうであれば、このイベントの処理、例えば、注文の開始などに進みます。そうでない場合は、次の小節についてこの手順を繰り返す。

でも、もしかしたらMT4(5)は、このシステムの仕様上、もっとシンプルな解決策を持っているのかも?

上記で述べたように、ソースコードをスケッチして、何かスタート地点に立つことができます。さらに、チャート上のオブジェクトのデータを取得する方法についても、すでにある程度の知識があるはずです。誰も一から全部やってあげようとは思わない。そして、こうすることで、専門家の仕事に対して足りないものを補うことができる...。

 
vladmirad:

マイケル、あなたと@Artyom Trishkinの 助けはとても役に立ちました!

さて、価格チャートと見つかったオブジェクト(この場合はトレンドライン)の間のクロスポイントを見つける方法を考えなければなりません。

アルゴリズムは以下の通りである:
1.トレンドラインの読み取り座標を使用して、選択したTFの1小節あたりのトレンド上昇係数を計算します。
2.現在のバー上のトレンドラインの価格座標を計算し、選択されたTFの間にこのポイントのチャートによる交差の事実を監視します。
3.もしそうであれば、このイベントの処理、例えば、注文の開始などに進みます。そうでない場合は、次の小節についてこの手順を繰り返す。

たぶん、MT4(5)の場合は、このシステムの特殊性から、すべてがずっと簡単なのでしょう。

何を見つけたいのかがよくわからない。あるバーの価格によってトレンドラインをクロスするポイントを見つけたいのですか?そのために、バー上のラインの値を取得する関数があります。でも、私なら直線の方程式を使いますね。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

初心者からのFAQ MQL5 MT5 MetaTrader 5

アルチョム・トリシキン さん 2020.05.02 12:27

直線の方程式を使う。

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+

左のポイントのバー番号と 価格を指定し、右のポイントのバー番号と 価格を指定し(これらのポイントに仮想線が引かれます)、探しているバーを 指定します。
この関数は、探しているバーの価格を返します。


実物の存在を必要としない。
 
Artyom Trishkin:

.....バー上のライン値を取得する関数があります。でも、私なら直線の方程式を使いますね。

.....

アルチョム もっと詳しくお願いします。

以前はあまり注意力がなかったのか、それともドキュメントがいじられたのか...。どうだろう。

しかし、私はいつもObjectGetDoubleが特定のバーのライン価格(私は正確に価格を意味します)を返すと思っていました。そしてここで、ちょっとしたスクリプトを作って確認することにしたのですが、その結果どうなったか?

1.値を読み取るべきパラメータにバーナンバーがない。

2. プロパティ識別子。

OBJPROP_PRICE

プライスコーディネート

modifier=アンカーポイントの番号


それは、アンカーポイントに過ぎないのです

はい、基本的には、コードでこの線を引けば、もうこのポイントになるんですなぜ知る必要があるのか?実際、どうなんでしょう?

このラインの価格価値をどこかで知るにはどうしたらいいのでしょうか?


これが判明したのは、

prop_modifier

[指定されたプロパティの修飾子。最初のオプションでは、モディファイアのデフォルト値は0です。ほとんどのプロパティは、モディファイアを必要としません。フィボナッチツールや アンドリュースのピッチフォークグラフィカルオブジェクトにおけるレベル番号を表します。レベル番号は0から始まります。

全く意味がないのでしょうか?ANYファンラインの取り付け位置を探しているのでしょうか?それはナンセンスだ。失礼しました。

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
 
Сергей Таболин:

アルチョムさん、もう少し詳しくお願いします。

以前はあまり注意深くなかったのか、それともドキュメントに手が加えられたのか...。どうだろう。

しかし、私はずっとObjectGetDoubleは特定のバーでのライン価格(価格のことです)を返すものだと思っていました。そしてここで、ちょっとしたスクリプトを作って確認することにしたのですが、その結果どうなったか?

1.値を読み取るべきパラメータにバーナンバーがない。

2. プロパティ識別子。

OBJPROP_PRICE

プライスコーディネート

modifier=アンカーポイントの番号


それは、アンカーポイントに過ぎないのです

はい、基本的には、コードでこの線を引けば、もうこのポイントになるんですなぜ知る必要があるのか?実際、どうなんでしょう?

このラインの価格価値をどこかで知るにはどうしたらいいのでしょうか?


これが判明したのは、

prop_modifier

[指定されたプロパティの修飾子。最初のオプションでは、モディファイアのデフォルト値は0です。ほとんどのプロパティは、モディファイアを必要としません。フィボナッチツールや アンドリュースのピッチフォークグラフィカルオブジェクトにおけるレベル番号を表します。レベル番号は0から始まります。

全く意味がないのでしょうか?ANYファンラインの取り付け位置を探しているのでしょうか?それはナンセンスだ。失礼しました。

私はあまりそういうものを扱ったことがないんです。この関数は、指定されたバータイムに応じたトレンドについて、何を返すのでしょうか?確認する時間がない。たとえそれが小さなスクリプトで行われたとしても...。

ObjectGetValueByTime()

Документация по MQL5: Графические объекты / ObjectGetValueByTime
Документация по MQL5: Графические объекты / ObjectGetValueByTime
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...