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

 
Artyom Trishkin:

ここで一番お勧めなのは、ヘルプを もっとよく読むことです。

グラフに対して取得/設定可能なプロパティを 指定する。

特に、マウスの左ボタンでグラフをスクロールさ せることです。

私が読んだドキュメントでは、このような場所です。

CHART_EVENT_MOUSE_MOVE = 1の場合、グラフはマウス移動メッセージを受信しますが、CHART_EVENT_MOUSE_MOVE = 0の場合、受信しません。これは理解できる。
でも、私の質問とは関係ないのですが...。CHART_EVENT_MOUSE_MOVE にどんな値が設定されていても、AUTOSCROLL をオフにしてチャートを「移動」する可能性は常にあります
「マウスの左ボタンを押しながら、ボタンを離さずにマウスを右に動かすだけで、ウィンドウ内のグラフを(時間的に)過去に移動させることができます。
これにより、ウィンドウ内のグラフは常に移動します。
しかし、Ctrl+F(Crosshairを呼び出す)を押して、マウスの左ボタンを押しながらグラフを動かすと、ビームが表示されます。
をクリックすると、ツールチップにマウスの動きとマウスポインターの位置するレベルの価格のデータが表示されます。
そして最も重要なことは、その瞬間のグラフ自体がウィンドウの中で動かないということです。

十字キーを有効にしないでこの効果を得るにはどうしたらいいのか、そういうことです...。

P.S. 画面を動画で撮影してお見せすることもできます。

 
Maksims Ignatovs:

この場所はドキュメントで読んだことがあります。

CHART_EVENT_MOUSE_MOVE = 1の場合、チャートはマウスの移動に関するメッセージを受け取りますが、CHART_EVENT_MOUSE_MOVE = 0の場合は受け取らないように設定されています。これは理解できる。
でも、私の質問とは関係ないのですが...。CHART_EVENT_MOUSE_MOVE にどんな値が設定されていても、AUTOSCROLL をオフにしてチャートを「移動」する可能性は常にあります
「マウスの左ボタンを押しながら、ボタンを離さずにマウスを右に動かすだけで、ウィンドウ内のグラフを(時間的に)過去に移動させることができます。
これにより、ウィンドウ内のグラフは常に移動します。
しかし、Ctrl+F(Crosshairを呼び出す)を押して、マウスの左ボタンを押しながらグラフを動かすと、ビームが表示されます。
をクリックすると、ツールチップにマウスの動きとマウスポインターの位置するレベルの価格が表示されます。
そして最も重要なことは、その瞬間のグラフ自体がウィンドウの中で動かないということです。

十字キーのスイッチを入れずにこの効果を得るにはどうしたらいいのか、そういうことなんです...。

P.S. 画面を動画で撮影してお見せすることができます。

答えになってませんか?
マウスでチャート上の何かを移動させた場合、この瞬間にチャートを移動させる ことを禁止します。マウスボタンを離すと同時に、グラフの移動が 可能になります。

 

構造体のフィールドは、インデックスを使って、つまり1次元配列としてアクセスできるのか?構造体フィールドの配列を作成することは可能ですか?

つまり、発想はこうだ。構造があります

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

そして、任意の構造体を関数に渡す際には、各要素を個別に名前でアドレス指定する必要があります。

qr.qw qr.q51eなど。もちろん、ループに入れてシングルスレッドで処理することはできないでしょう。これらの項目を格納するフィールドの配列を以下のように作成したいと思います。

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

その結果、インデックス付けによってこれらの項目を扱うことができるのはもちろん、2番目の構造体をループに入れ、ループを通してqw qeを処理することができるようになります。

そのようなことは可能なのでしょうか、少し前にインターネットでそのようなエントリーを見たことがあるのですが、もしかしたらサイトがなくなってしまったので何か勘違いしているのでしょうか?typedef enum union macros は、この問題で役に立つかも?

 
Artyom Trishkin:
答えになってませんか?
マウスでグラフ上の何かを動かすと、その瞬間にグラフシフトが 無効になります。マウスボタンを離すと同時に、グラフの移動が可能になります。

チャート上では何も動かさない。CHART_EVENT_MOUSE_MOVE = 0 に設定しても、チャートは移動できます。
チャートの ChartNavigate 処理を無効に
する方法がわかりません。私もドキュメントで見つけていません。
同時に、「十字キー」はこのケースにどうにか対処しています。だから、「どうやって?
CHART_EVENT_MOUSE_MOVE に正しい値を設定するだけです。 試してみました - 役に立ちません。
CHART_EVENT_MOUSE_MOVE
値が何れの場合でも、グラフ上でマウスの左ボタンを押しながらマウスを動かすだけで、時間的に前後にグラフを移動さ せることができます。
同時に、マウスを水平方向に動かす方向によって、ウィンドウ内のチャートが移動します マウスを右に動かせば、チャートは左(過去の履歴)に移動します。
、マウスを左に動かせば、現在のバーが表示されるまでチャートは未来に移動します。 その後、マウスで左に動かそうとしても、うまくいきません。しかし、これは理解できる。

ChartNavigateを使ってウィンドウ内のチャートを過去のある日付に移動させた場合、いかなる場合(チャート上でクリックやマウス操作をしていない)でも、自分が見ているチャートの部分が移動しないようにするには、どうしたらよいでしょうか
どうすればいいんだ?


 
Maksims Ignatovs:

チャート上では何も動かさない。 CHART_EVENT_MOUSE_MOVE = 0 に設定しても、 チャートは移動できます。
チャートの ChartNavigate 処理を無効に
する方法がわかりません。私もドキュメントで見つけていません。


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
こんにちは、インジケータを修正してください、あなたはボタンを介してサーバーの時間を表示する必要があり、その元の位置にボタンを表示する必要があります提供
これが、私が手に入れられなかったものです。
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   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[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

具体的に何がうまくいかなかったのでしょうか。

ボタンが作られ、それを押すと画面から消える(幅がない場合)。

なぜ、その結果に満足できないのでしょうか?

 
Maxim Kuznetsov:

具体的に何がうまくいかなかったのでしょうか。

ボタンが作られていて、押すと画面外に飛び出してしまう(幅がない場合)。

その結果、何が問題なのでしょうか?

その結果、ボタンをクリックしたときに時刻が隠れていたのが、電卓で更新されたために再び表示されるようになりました。

 
Maxim Kuznetsov:

具体的に何を失敗したのか、つまり自分の言葉で何をやりたかったのか...。

ボタンが作られ、それを押すと画面から消える(幅がない場合)。

なぜ、その結果に満足できないのでしょうか?

秒単位でもなんでもいいから、ターミナルのようにボタンを無効化できるようにしてもらえないだろうか
ボタンを無効にすると(画面から消すと)、時刻が再び表示されるからです。

 
vebster005:

秒という結果を得ることができ、ターミナルと同じようにすべてが機能し、ボタンを無効にすることができるのでしょうか
ボタンを無効にすると(画面から消すと)、時刻が再び表示されるからです。

ここには、ほとんどどんな結果でも出せる人が大勢います。

人に頼むのではなく、自分自身がそれを実現しようとすることが大切です。彼らはいつも喜んで助けてくれますが、助けてくれるのであって、してくれるわけではありません。