エラー、バグ、質問 - ページ 1456 1...144914501451145214531454145514561457145814591460146114621463...3185 新しいコメント Slava 2015.12.23 14:23 #14551 Vasyl Nosal:ティックを使わないインジケーターで、この問題を解決する方法はありますか?そして、以前から言っていることですがレンダリングなしで文字そのものは取得できるのに、サイズが取得できないのは不思議です。ダニが関係するのか?チャートはティックなしで描画されます。テキストラベルのサイズは、win apiの関数GetTextExtentを使用して、ディスプレイコンテキストから調べます。ディスプレイのコンテキストは、画面の解像度と選択されたフォントサイズを考慮して、この情報を提供します。オブジェクトを最初に作成したときは、表示コンテキストがありません。原理的には作れますが、「人工的に」計算したサイズと、実際のレンダリング時に計算したサイズが異なるという事態に陥りやすいので、注意が必要です。そのため、レンダリングされるまでは、オブジェクトの大きさは不明です。 削除済み 2015.12.23 14:26 #14552 Vasyl Nosal: 作成後、ChartRedraw()を使用してみて、サイズを確認してください。 削除済み 2015.12.23 14:57 #14553 Alexey Kozitsyn: 作成後、ChartRedraw()を使用してみて、サイズを確認してください。 動作しない。 Vladimir Karputov 2015.12.23 15:06 #14554 Vasyl Nosal: 動作しない。一般的に、OnCalculate()の最初のイベントの前に、インジケータに何も描画してはいけません。このアプローチは、チャートの作成とオブジェクトの 正しい動作を保証します。おおよそこのような感じです。最初のティックで私たちは作成しますが、次のティックはSIZEです。//+------------------------------------------------------------------+ //| TestIndicator1.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window string name="probe"; bool first_tick=false; // false - ещё не было тиков //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- static int count; if(count>3) return(rates_total); // после трёх Алертов выходим. Не за чем слух портить. if(!first_tick) { ObjectCreate(0,name,OBJ_LABEL,0,0,0); ObjectSetString(0,name,OBJPROP_TEXT,name); first_tick=true; } else { string text=ObjectGetString(0,name,OBJPROP_TEXT); int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE)); Alert(text," ",text_sizeX); } count++; //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Deinit | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(name); EventKillTimer(); } //+------------------------------------------------------------------+ 削除済み 2015.12.23 16:09 #14555 Karputov Vladimir:一般的に、OnCalculate()の最初のイベントの前に、インジケータに何も描画してはいけません。このアプローチは、チャートの作成とオブジェクトの 正しい動作を保証します。おおよそですが、最初の刻みで「創造」、次の刻みで「SIZE」を行います。 なるほど。週末に何度かティックのシミュレーションをする予定です。 削除済み 2015.12.23 16:16 #14556 オブジェクトが描画されたかどうかを返すような関数はないのでしょうか? Vladimir Karputov 2015.12.23 16:22 #14557 Vasyl Nosal: そうですか(苦笑)。週末に何度かティックシミュレーションしてみます。 Wi-Fiをオフにすれば、土曜日を過ごすことができます :). Slava 2015.12.23 16:34 #14558 Vasyl Nosal: オブジェクトがレンダリングされたかどうかを返すような関数はないのでしょうか? テキストマーカーの大きさを聞く Alexandr Bryzgalov 2015.12.23 17:05 #14559 は、WindowRedrawは、ティックを待つ必要はないのでしょうか? 削除済み 2015.12.23 17:26 #14560 Alexandr Bryzgalov: とWindowRedrawがあれば、tickを待たなくて済むのでは? いいえ。 1...144914501451145214531454145514561457145814591460146114621463...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ティックを使わないインジケーターで、この問題を解決する方法はありますか?
そして、以前から言っていることですがレンダリングなしで文字そのものは取得できるのに、サイズが取得できないのは不思議です。
ダニが関係するのか?チャートはティックなしで描画されます。
テキストラベルのサイズは、win apiの関数GetTextExtentを使用して、ディスプレイコンテキストから調べます。ディスプレイのコンテキストは、画面の解像度と選択されたフォントサイズを考慮して、この情報を提供します。
オブジェクトを最初に作成したときは、表示コンテキストがありません。原理的には作れますが、「人工的に」計算したサイズと、実際のレンダリング時に計算したサイズが異なるという事態に陥りやすいので、注意が必要です。そのため、レンダリングされるまでは、オブジェクトの大きさは不明です。
作成後、ChartRedraw()を使用してみて、サイズを確認してください。
動作しない。
一般的に、OnCalculate()の最初のイベントの前に、インジケータに何も描画してはいけません。このアプローチは、チャートの作成とオブジェクトの 正しい動作を保証します。
おおよそこのような感じです。最初のティックで私たちは作成しますが、次のティックはSIZEです。
一般的に、OnCalculate()の最初のイベントの前に、インジケータに何も描画してはいけません。このアプローチは、チャートの作成とオブジェクトの 正しい動作を保証します。
おおよそですが、最初の刻みで「創造」、次の刻みで「SIZE」を行います。
そうですか(苦笑)。週末に何度かティックシミュレーションしてみます。
オブジェクトがレンダリングされたかどうかを返すような関数はないのでしょうか?
とWindowRedrawがあれば、tickを待たなくて済むのでは?