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

 
Valeriy Yastremskiy:

よくわからないのですが、もしかしたらウィンドウを間違えているのでしょうか。バーのあるチャートウィンドウのことです。これらが動く。EAのインジケータをロードするときのダイアログウィンドウ、アラートウィンドウ、メッセージウィンドウもありますが、すべて移動します。どの窓のことでしょうか?ダイアログボックスは関係ありません。 また、4でライブラリも持っていません。

こちらがフクロウの窓です。


必要な時にチャート上で動かしたい。

 
MakarFX:

フクロウの窓はこちら


それこそ、必要なときにスケジュール通りに動かしたい。

窓ではなく、パネルです。動かせますよ、コードも教えられないし。一般的なコードと再描画が必要です。パネルが描かれている場所を探して座標を指定し、イベントを使って、クリックで移動、削除、新規描画を行う必要があるのです。こんな感じ。でも、私はまったく製図ができないんです。

 
Valeriy Yastremskiy:

EAで削除する場合、コメントのクリーニングは必要ありませんが、インジケータでは必要です。そのような設計になっているのでしょうか?

適切なプログラマーであれば、少なくとも

void OnDeinit(const int reason)
{
     Comment( "" );
}
コメントが使用された場合は、自分で後始末をするそうです。そして、多くの初心者はこのことに注意を払わない。それが秘訣です。
 
こんにちは。
あるレベルの価格(オープンポジションを 考慮した)を計算する方法(式)を教えてください。どの価格でマージンコールとストップアウトが発生するかを計算するため。
 
Konstantin Nikitin:

適切なプログラマーであれば、少なくとも

コメントが使用された場合は、自分で後始末をするそうです。そして、多くの初心者はこのことに注意を払わない。それが秘訣です。

ということで、上に書きました)。問題は、なぜEAと指標で異なる挙動を示すのか、ということでした。隠された意味があるのか、それとも歴史的に異なる執筆陣から発展してきたのか)

 
Konstantin Nikitin:

適切なプログラマーは、少なくとも

コメントが使用された場合は、自分で後始末をするそうです。そして、多くの初心者はこのことに注意を払わない。それが、すべての秘訣です。
実は、これには明確な一般要件はありません。
 
Andrey Sokolov:
実は、これに関する明確な一般要件は ありません。

要件の話はしたっけ?この点を考慮している人とそうでない人がいると言っただけです。

 
Konstantin Nikitin:

要件の話はしたっけ?私は、その点を考慮する人としない人がいると言っただけです。

そういうわけではありません。

 

EASY AND FAST https://www.mql5.com/ru/articles/3527 ライブラリは、"SubWindow.mq5 "ファイルをロードすることによって、インジケータサブウィンドウでプログラムウィンドウを開始する可能性を実装しています。ML5ではすべてが機能し、ML4でもコンテンツはエラーなくコンパイルされますが、サブウィンドウが開きません。


//+------------------------------------------------------------------+
//|                                                    SubWindow.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property indicator_separate_window
#property indicator_plots   0
#property indicator_buffers 0
#property indicator_minimum 0.0
#property indicator_maximum 0.0
//--- Имя программы
#define  PROGRAM_NAME ::MQLInfoString(MQL_PROGRAM_NAME)
//--- Идентификатор события для изменения высоты подокна эксперта
#define  ON_SUBWINDOW_CHANGE_HEIGHT (38)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- Короткое имя индикатора
   ::IndicatorSetString(INDICATOR_SHORTNAME,PROGRAM_NAME);
//--- Инициализация прошла успешно
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Деинициализация                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total,
                const int    prev_calculated,
                const int    begin,
                const double &price[])
  {
//--- Если инициализация прошла успешно
   if(prev_calculated<1)
      //--- Отправим сообщение эксперту, чтобы получить от него размер для подокна
      ::EventChartCustom(0,ON_SUBWINDOW_CHANGE_HEIGHT,0,0.0,PROGRAM_NAME);
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Обработка события изменения высоты подокна эксперта
   if(id==CHARTEVENT_CUSTOM+ON_SUBWINDOW_CHANGE_HEIGHT)
     {
      //--- Принимать сообщения только от имени эксперта
      if(sparam==PROGRAM_NAME)
         return;
      //--- Изменить высоту подокна
      ::IndicatorSetInteger(INDICATOR_HEIGHT,(int)lparam);
      //--- Обновить график
      ::ChartRedraw();
     }
  }
//+------------------------------------------------------------------+
 

みなさん、こんにちは。

アカウントチェックを(任意の)インジケータに付けたいのですが!

bool VerifityToSchet()
  {
   if(AccountNumber() != account)
     {
      Print("На данном счете индикатор работать не будет, вы его приобрели незаконным путем!!!");   
     }else
     {
     Print("На данном счете индикатор авторизован");
     }
   return(false);
  } 

もちろんinit()とstart()で有効にしたのですが、ターミナルを再起動すると、アカウントが無効ですと表示されるのです!?

私は何を間違えているのだろう?

理由: