グラフィカルなオブジェクトを作成するにはどうしたらよいですか?MQL4です。 - ページ 3

 
Integer:

インジケータがグラフィカルオブジェクトを作成 し、そのパラメータを取得する場合、いいえ。

しかし、やはりインジケーターを使うことで全てを解決するのは簡単です。演算はインジケーター内で行われ、その結果はインジケーターバッファーを介して表示されます。

もうひとつの選択肢がある。行の代わりに行のパラメータでグローバル変数を作成しますが、この場合、関数GetValueByShift()は動作しません、あなたはそのアナログを記述する必要があります。

なるほど。しかし、グラフィック描画をせずにインジケーターでトレンドラインを引くにはどうしたらいいのでしょうか?

2つのバーインデックスがわかっている場合、それらを線で結び、右側に描画する必要があります。

 
forexman77:

なるほど。しかし、グラフィカルな絵がないインジケーターでトレンドラインを引くにはどうしたらいいのでしょうか?

2つのバーインデックスがわかっている場合、それらを線で結び、右側に描画する必要があります。

私のコードベースには、そのようなインジケータがありました。今は持っていません。

計算を使うべき。2点の座標がわかれば、3点目の座標を簡単に計算することができます。

 
Integer:

以前、私のコードベースにはそのようなインジケータがありました。今はもうない、ない。

何事も計算でやるしかないのです。2点の座標がわかっていれば、3点目の座標を簡単に計算することができます。

この計算式はどこにあるのでしょうか?

総じて、ちょっとヌーボーな印象です。端末にはチャンネルやファイボなど、いろいろな幾何学的 指標がありますが、テスターでは役に立ちません。

 
forexman77:

この計算式はどこにあるのでしょうか?

一般的には、ヌーボーリッチといったところでしょうか。ターミナルにはチャンネルやFiboなどの幾何学的な指標がたくさんありますが、テスターでは役に立ちません。

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - バー番号。 y1, y2 - 価格の値。x3 - 計算が行われるバーの数。

 
Integer:

x1, x2 - バー番号。 y1, y2 - 価格の値。x3 - 計算が実行されるバーの数。

オッケーです。ありがとうございます。これからも掘っていきます。
 
Integer:

x1, x2 - バー番号。 y1, y2 - 価格の値。x3 - 計算が実行されるバーの数。

計算に基づいて作られたインジケーターで、読みはグラフィックオブジェクト上のインジケーターと同じです。

最適化が進んでいる唯一の問題は、取引が正しく開始されないことです。

このインジケータをチャートに 適用すると、最初は線が平坦ですが、その後、新しいティックに配置すると、そのようになり、その状態を維持します。

 
forexman77:

計算に基づいてインジケータを作ると、読みはグラフィカルなオブジェクトのインジケータと同じになります。

最適化が進んでいる唯一の問題は、取引が正しく開始されないことです。

インジケータをチャートに 適用すると、最初は線が平らになり、新しいティックで本来の線になり、その状態を維持することができます。

ビジュアルモードでテストしてみてください。プリントを使って、違いを探す。
 
Integer:
ビジュアルモードでテストしてみてください。プリントを使い、コメント、違いを探す。

ビジュアルモードでは役に立ちません。インジケーターに現在のパターンのみを表示させることができました。

インジケータ自体は、最初のインデックス(MQL4)の値を印刷し、最初の印刷は誤った値で出て、他のものは新しいティックで正しく表示されます。

もし、コードを見ても構わないのであれば、個人的なメッセージで送りました。

 

とにかく、トレンドラインの計算をすべてEAに移しました。正しいようです。

ラインの全範囲に表示されるようなインジケータを作ることができない。経験値が足りない。

実際に、取引が正しく開始されたことを視覚的に確認するためのインジケータが必要です。

視覚化にはグラフィカルなオブジェクトを使うことにしました。

問題は、エラー4200(オブジェクトはすでに存在しています)です。

その都度、オブジェクトに 新しい名前をつけるようにしました。同じエラーです。

複数のオブジェクトを呼び出すことは可能ですか?その場合、レイの不要な部分を切り取るにはどうしたらよいでしょうか。

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

とにかく、トレンドラインの計算をすべてEAに移しました。正しいようです。

ラインの全範囲に表示されるようなインジケータを作ることができない。経験値が足りない。

実際に、取引が正しく開始されたことを視覚的に確認するためのインジケータが必要です。

視覚化にはグラフィカルなオブジェクトを使うことにしました。

問題は、エラー4200(オブジェクトはすでに存在しています)です。

その都度、オブジェクトに 新しい名前をつけるようにしました。同じエラーです。

複数のオブジェクトを呼び出すことは可能ですか?その場合、レイの不要な部分を切り取るにはどうすればよいのでしょうか。

作成前に、オブジェクトが存在するかどうかを確認することができます。関数ObjectFind()。何もしなくても、存在しているのだから大丈夫、悪いエラーではないのです。

オブジェクトのセット。オブジェクトの名前にバータイムを追加すると、ユニークな名前になります。

ビームをトリミングする。プロパティObjectSet(Name,OBJPROP_RAY,false)。