どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 650

 
AlexeyVik:

私の理解では、彼は他のチャートからオブジェクトパラメータを取得する必要があります。

他のチャートからの場合は、チャート識別子を持つ関数バリアントを使わせてください。

も問題ありません。

 
sergeev:

別のチャートのものであれば、チャート識別子を持つ関数バリアントを使用させます。

も問題ありません。

もちろんその通りですが、私はまだチャート識別子を使う必要がなく、理論的にしか知らないので、現在のチャートにオブジェクトをマッピングするオプションを提案したわけです。
 
rov_kvn:



すごいですねぇ。まさにそこがポイントでした。ありがとうございます、親愛なる同志よ
 
sergeev:

別のチャートのものであれば、チャート識別子を持つ関数バリアントを使用させます。

も問題ありません。


私の理解では、私の場合、価格はObjectGetDouble()、日付はObjectGetInteger()しか選択肢がないようです。

chart_id = 0 で現在のTFの価格を取得しようとする。

double price1 = ObjectGetDouble(0,"Supply",3);

- をあるべき姿にする。ここからhttps://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 0 ではなく、両方の ID と値を試しましたが、0 を返します。「正しい」chart_id はどのようなものでしょうか?

 
.roman.:

私の理解では、私の場合、価格はObjectGetDouble()、日付はObjectGetInteger()しか選択肢がないようです。

chart_id = 0 で現在のTFの価格を取得しようとしています。

- をあるべき姿にする。ここからhttps://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 0 ではなく、両方の ID と値を試しましたが、0 を返します。「正しい」chart_id はどのようなものでしょうか?

chart_id = 0 は TF ではなく、現在のチャートです。目的のオブジェクトを持つチャートのchart_idを見つける必要があります。それが、一時的な必要性のなさから、やらなかったんです。
 
.roman.:

私の理解では、私の場合、価格はObjectGetDouble()、日付はObjectGetInteger()しか選択肢がないようです。

chart_id = 0 で現在の TF の価格を取得しようとする。

double price1 = ObjectGetDouble(0,"Supply",3);


3とは



- 価値観はそのままに。ここからhttps://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 0 ではなく、両方の ID と値を試しましたが、0 を返します。「正しい」chart_id はどのようなものでしょうか?

TF期間とchart_idの関係とは?


を使うのは非現実的な穴がある。


あなたの問題を説明し、あまり曖昧にせず、腹を割って話す。

オブジェクトからデータを取り出すには?

- ObjectGet なぜ気に入らなかったのでしょうか?

 
sergeev:

3とは


矩形の下限の価格値。https://docs.mql4.com/constants/objectconstants/enum_object_property


TF期間とチャートIDはどう関係するのですか?

方法がわからない。だからこそ、失敗したからこそ、自分でやろう、聞こうと思っているんです。

セルゲイ
オブジェクトからデータを取得する? - ObjectGet 何が問題なのか?

本気で聞いているのか?私はすでに3回、他の2つのタイムフレーム(H4とD)からレクタングルデータ(2つの価格座標とレクタングルを構築するための2つの時間座標)を取得する必要があると書きましたが、3番目(H1)にいる間です。

ObjectGetは他のタイムフレームから何も受け取れないため、適さない。

このインジケータはすべてのタイムフレームで矩形を描きますが、私がコードを追加したところ、他のタイムフレームの矩形座標を切り替えずに送信するようになりました。 他の方法で説明する方法がわかりません。

 
.roman.:

矩形の下限の価格の値。https://docs.mql4.com/constants/objectconstants/enum_object_property



方法がわからない。それがうまくいかなかったから、直感でやってみよう、聞いてみようと思っているわけです。

本気で聞いているのか?3つ目のタイムフレーム(H1)にいながら、他の2つのタイムフレーム(H4とD)からレクタングルデータ(2つの価格座標とレクタングルを構築する2つの時間座標)を取得する必要があると、すでに3回書きました。

ObjectGetは、他のタイムフレームから何も取得できないので、適さない。

全てのタイムフレームに矩形を描きますが、他のタイムフレームの矩形に切り替えずに座標を渡すコードを追加しています。 他にどう説明したらいいのかわかりません。

ただ、別のタイムフレームと別のチャート、チャートは異なる概念であり、それに応じて問題解決のアプローチも異なることを理解してください。
 
AlexeyVik:
異なるTFと異なるチャート、図表は異なる概念であり、したがって問題解決へのアプローチも異なることを理解する。

だから、私はどんな解決策でも理解し、アイデアがあれば受け入れるだけでいいと思っています。そのため、どのように導入すればいいのか、アドバイスをいただいています。
 
Top2n:

ありがとうございました。了解しました。ただし、OrderSelectのエラーで、継続する 以外の停止方法は不明です。

遅れてきたメッセージを削除し、説明とほぼ同じことをしました。

戻り値とエラー記号を組み合わせることもあります。ある値をエラーの兆候として捉えることに意味がある場合。例えば、平均価格が0に等しい場合。

そして、OrderSelect() がエラーのサインを返すと同時に、我々の関数もエラーのサインを返します。

#property strict

/******************************************************************************/
double CenaUsrednenija(const int type,const int Magic){
  double nn = 0, bb = 0;

  for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderType() == type && OrderMagicNumber() == Magic)
      {
        double op = OrderOpenPrice();
        double llot = OrderLots();

        bb += op * llot;
        nn += llot;
        Print("  type = ", type, " Цена открытия = ", op, " Лот = ", llot, " itog = op * llot = ", op * llot, " factb = bb / nn = ", bb / nn);
      }
    } else {
      return 0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

  return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart() {
  Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}

自分の力で走らせる、手に入れた。

23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:03 1 EURUSD,H1: initialized
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23:32:03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.36779
23:32:03 1 EURUSD,H1: uninit reason 0
23:32:03 Script 1 EURUSD,H1: removed

そうみたいですねぇ・・・。

そうそう、このPrint()はデバッグ用のものなので、0による除算を仮定した条件式は使っていません...。