エラー、バグ、質問 - ページ 2194

 
Dmytro Zelenskyy:

真摯な取り組み))

では、画面化したいものに対して、小さなスクリプトを一度実行し、グローバル変数(できれば一時的なグローバル変数)にidを与えてください。

そして、あなたのスクリプトは、idで画面を表示します。

賢いやり方だ!

ありがとうございました。
 
Dmytro Zelenskyy:

画面の幅をピクセル単位で正確に計算しても、価格欄の一部を画面が覆ってしまうのです。

また、画面解像度が異なると、通貨の桁数に応じて、私(1280x1024)では50から60と異なる。もう一方の画面では、別のものになります。

それは、このピクセルを画面の幅に足すために、列の幅をどう考えるか?(スクリーンショットでカラムが閉じているものを開く)


fxsaberの皆さん、こんにちは。

//+------------------------------------------------------------------+
#define  TOSTRING(A) #A + " = " + (string)(A) + "\n"
// Ширина вертикальной шкалы графика
int GetWidthScale(const long chartID=0)
  {
   const string Name=__FUNCTION__+(string)MathRand();

   ObjectCreate(chartID,Name,OBJ_CHART,0,0,0);
   ObjectSetInteger(chartID,Name,OBJPROP_XDISTANCE,-1 e3);

   const long chart=ObjectGetInteger(chartID,Name,OBJPROP_CHART_ID);

   const int Res=(int)(ChartGetInteger(chart,CHART_WIDTH_IN_PIXELS) -
                  (ChartSetInteger(chart,CHART_SHOW,false) ? ChartGetInteger(chart,CHART_WIDTH_IN_PIXELS) : 0));

   ObjectDelete(chartID,Name);

   return(-Res);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(TOSTRING(GetWidthScale()));
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

fxsaberよりご挨拶申し上げます。

ケースはマスターに勝る!!!

カッコイイ!

 
Artyom Trishkin:

fxsaberからこんにちは。

確かにこのコードは非常に興味深いのですが、問題を解決していないことがわかりました...。

 
問題は、特定のバーまでのピクセル数を決定するために使用できる普遍的な関数(任意のズームと異なるスケール幅で動作)を取得する方法が明確でないことである。
 
Aleksey Vyazmikin:
問題は、特定のバーまでのピクセル数を決定するために使用できるユニバーサル関数(あらゆるズームと異なるスケール幅で動作する)を取得する方法が明確でないことです。

さあすべてのヒントはそこに ある。
バー幅は1,2,4,8,16,32の値のみを受け付けます。

奇妙なことに、CHART_POINTS_PER_BAR 識別子は機能しません。

しかし、バーの幅(ピクセル)は簡単に計算することができます。

int WidthBar=int(1<<ChartGetInteger(0,CHART_SCALE));
左のバーは常に中心から描かれ、右のバーは任意に描かれる。したがって、座標の原点はゼロ(左)である。
 
Nikolai Semko:

さあすべてのピックがここに あります。
バー幅は1,2,4,8,16,32の値のみ使用可能です。

奇妙なことに、CHART_POINTS_PER_BAR 識別子は機能しません。

しかし、バーの幅(ピクセル)は簡単に計算することができます。

左のバーは常に中心から描かれ、右のバーは任意に描かれます。したがって、座標の原点はゼロ(左)である。

これは仮説で、今のところベスト(より正確)なバージョンはこれです。

pp=(double)ChartGetInteger(handle,CHART_WIDTH_IN_PIXELS)/(double)ChartGetInteger(handle,CHART_WIDTH_IN_BARS)*((Shift_Start-Shift_Stop)*(-1)+2)+Schkala+3;

が、いくつかの点で失敗しています。

 
Aleksey Vyazmikin:

これは仮説で、今のところベストな(より正確な)選択肢はこれです。

が、ペアで失敗することもある。

:))
問題を明確に述べる。どんな価値を手に入れたいか?
 
Nikolai Semko:
:))
問題を明確に述べる。どんな価値を手に入れたいか?

日付Aから日付Bまでを含むスクリーンショットが必要です。また、どのようなズームでも正しく機能するはずです。

 

スクリーンショットに基づいて、私は別のスレッドを作成し、問題を説明し、私が持っているコードを投稿しました - 私は、専門家に助けを求めています!私は、この問題を解決することができます。

https://www.mql5.com/ru/forum/237291

Организация пакетной обработки задачи по снятия изображений с экрана графика
Организация пакетной обработки задачи по снятия изображений с экрана графика
  • 2018.04.15
  • www.mql5.com
Встала у меня задача доработать скрипт https://www.mql5.com/ru/code/936 , который делает скрины...