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

 
Константин:
アルチョム・トリシキン

本件について、何かヒントをいただけないでしょうか。

七面鳥について、いろいろな情報をお伝えすることができます。

まずは、キジ科の鳥であること。ダイエット用のお肉です。飼い猫に食べさせています。おいしいって言ってるんですけどね...。

 
Константин:

そのヒントを教えてください。

で、肝心のスクリプトをインジケーターから実行するのはなぜ?

 
Mihail Matkovskij:

話は変わりますが、インジケーターからスクリプトを実行するなんて、誰がそんな馬鹿なことを言ったのでしょうか?:)

そして最も重要なのは、なぜか?

チャート上にボタンを 作り、インジケータから取得したパラメータでボタンを押すとスクリプトが実行されるようにしたい。

 
Константин:

チャート上にボタンを 作り、ボタンを押すことでインジケータから取得したパラメータでスクリプトを実行できるようにしたい

インジケータコードにボタンのコードを書き、インジケータコードに関数としてスクリプトコードを統合します。ボタンを押す - 関数を呼び出し、その中でインジケータ・パラメータを渡す。

 
Константин:

チャート上にボタンを 作り、ボタンを押すとインジケータから取得したパラメータでスクリプトが実行されるようにしたい。

もし、ボタン自体の作成に問題があるのなら、ここにあります。

//+------------------------------------------------------------------+
//|                                                  ClickButton.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"
#property indicator_chart_window

#property indicator_plots 0

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsTxtControls.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectButton button;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
  button.Create(0, "pushBtn", 0, 30, 30, 80, 21);
  button.SetString(OBJPROP_TEXT, "Push my");
  button.SetInteger(OBJPROP_BGCOLOR, clrDodgerBlue);
  button.Color(clrWhite);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
//---
//--- return value of prev_calculated for next call
  return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
) {
  if(id == CHARTEVENT_OBJECT_CLICK) {
    if(sparam == button.Name()) {
      Alert("Button \""+sparam+"\" clicked!"); // Вместо этого функция с кодом...
      button.State(0);
      ChartRedraw(0);
    }
  }
}
//+------------------------------------------------------------------+
 
Mihail Matkovskij:

もし、ボタン自体の作成に問題があるのなら、ここにあります。

ありがとうございます。ボタンはわかったのですが、スクリプトを添付する方法がわかりません。スクリプトは C:\Users...゙Scripts゙Order.ex4 にあります。

 
もうひとつ質問です。Windowsでマウスを使わず小さなタブレットを使っている私にとって、グラフにボタンが あるのは便利なソリューションです。グラフ上のボタンを押したときに、キーボードコマンドのCtrl+F5が実行されるようにできないでしょうか。そうすれば、次のプロファイルを表示するときに便利です。
 
Константин:

ありがとうございます。ボタンはわかったのですが、スクリプトを添付する方法がわかりません。スクリプトの場所は C:\Users...↵MQL4 Scripts↵Order.ex4 です。

スクリプトにショートカットを割り当て、WinAPIでシミュレートします。でも、MQLの プログラムではそういうことはやっていないんです。そこで、「SendInput User32.dll WinAPI」でググってみてください。

 

こんにちは。

一問だけ悩んでいるのですが、解き方を教えてください。

考え方は以下の通りです。私は ローソクの前回の最大値に線を引きます。直前の最大値によってラインをずらしたい。

void OnTick()
  {
//---
   double   o1 = iOpen(Symbol(),Period(),1);
   double   h1 = iHigh(Symbol(),Period(),1);
   double   l1 = iLow(Symbol(),Period(),1);
   double   c1 = iClose(Symbol(),Period(),1);
   double   c0 = iClose(Symbol(),Period(),0);
   double   rt = 0;
   double   rs1 = 0;


rt=MathAbs(c1-o1)/_Point; //размер тела свечи
rs1=MathAbs(h1-c1)/_Point;// размер верхней тени свечи


if (rs1>=rt) // условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же всечи, то...   
{
double PRH=iHigh(Symbol(),_Period,1); // то это будет максимум
ObjectCreate(0,"HL",OBJ_HLINE,0,_Period,PRH); // и строим по этому максимуму, горизонтальную линию
Comment("ЦЕНА МАКС =======",PRH,"\n"); // комментарий пред. максимума
}
}
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
Alexey Belyakov:

こんにちは。

一問だけ悩んでいるのですが、解き方を教えていただけませんか?

考え方は以下の通りです。私は ローソクの前回の最大値に線を引きます。直前の最大値によってラインをずらしたい。

2つのオプションがあります。
1.描画する前にオブジェクトを削除する必要があります。
2.オブジェクトを作成した後に価格を設定する