初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1042

 
Vladimir Karputov:

MQL5には、マウス座標を出すような機能はありません。添付ファイルに基づいて、OnChartEventに最後のマウス座標の保存を追加し、クリックされたときに、その座標を出力することができます。

了解、ありがとうございます。

 

また、ebjectsについては、何か分かりにくい問題があるようです。

入力パラメータを元にマーカーと矩形を作成するクラスがあります。

矩形の色でオン/オフの状態があります。

//+------------------------------------------------------------------+
//|                                                CreateLabels.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
class CreateKeyStateLabel{
private:
   string label_text;
   int x;
   int y;
   bool _state;
public:
   CreateKeyStateLabel(string label_text, int x, int y){
      this.label_text = label_text;
      this.x = x;
      this.y = y;
      _state = false;
      ObjectCreate(0,label_text+"_icon", OBJ_RECTANGLE_LABEL, 0, 1, 1);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XDISTANCE, x);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      
      ObjectCreate(0,label_text+"_label",OBJ_LABEL,0,1,1);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_XDISTANCE, x+17);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_COLOR, clrBlack);
      ObjectSetString(0,label_text+"_label", OBJPROP_TEXT, label_text);
   }
   
   ~CreateKeyStateLabel(){
      ObjectDelete(0,label_text+"_icon");
      ObjectDelete(0,label_text+"_label");
   }
   
   void invert(){
      if(_state){
         _state = false;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      }else{
         _state = true;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGreen);
      }
   }
   
   bool state(){
      return _state;
   }
   
};

そして、これらのオブジェクトを作成し、キーを押したときにイベントを発生させ、状態をトグルさせます。
最初の2、3回はうまくいくのですが、その後はキー入力を無視するようになりました。


//+------------------------------------------------------------------+
//|                                                       Events.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <CreateLabels.mqh>
#define  X_DIST 10
#define  Y_DIST 20

CreateKeyStateLabel *tilda = new CreateKeyStateLabel("Tilda",X_DIST,Y_DIST);


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   delete tilda;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long   &lparam, const double &dparam, const string &sparam){
   switch(id){
      case CHARTEVENT_KEYDOWN:{
         if(lparam == "38") tilda.invert();
         break;
      }
   }
}

ここでは、たまに動作することが確認できましたが、トグルをクリックするたびに明確に動作させるにはどうしたらよいでしょうか。

 
Vladimir Karputov:

MQL5には、マウス座標を出すような機能はありません。しかし、次の解決策を使用することができます:添付ファイルを基に、マウスの最後の座標を保存するOnChartEventに追加し、その後、ボタンをクリックすると、これらの座標を出力することができます。

というわけで

//---------------------------------------  

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      ChartXYToTimePrice(0,int(lparam),int(dparam),window,time,price);
      Comment("price = ",DoubleToString(price,5),"   time = ",TimeToString(time,TIME_DATE|TIME_MINUTES));
     }

//---------------------------------------
 
DanoはMT-5でテスター用のティック履歴を既に公開していますが、ハイローソク足は買値でカウントしています。アスクプライスでハイカウントして、ローソク足が描けるのはMT-4の良いところだと思います。5分足でもスプレッドは1APR、いや1.5APR程度!?そして、Expert Advisorのコードですべてのハイクにスプレッドを追加するのは、なんと面倒なことでしょう。改善案なのですが、ここで質問です:MqlRatesの構造 体の中に変数highがあります。どのような価格で満たされているのか。説明書に書いてあるような最大値にはなっていないようです。多分誰か知っていると思うのですが、私は研究のためにEAを書くのが億劫です。
 

拝啓、これは何でしょうか、どこを見ればエラーが出るのでしょうか。

2019.05.12 11:01:09.743 Core 6  genetic pass (52, 487) tested with error "some error after pass finished" in 0:00:00.005
TesterStop() と関係があるのでしょうか?いや、パスの後でエラーになるけれども...。
 

こんにちは。
サードパーティーのサービスを一切使わず、MQL5+Telegram APIだけでTelegramへの通知機能を持つMQL5インジケーター(bot)を書くことは可能かどうか、ご教示いただけないでしょうか。

それともExpert Advisorを書かないといけないのでしょうか?MT4でこのようなEAを書こうとしたら、Expert Advisorでないとどうにもならないことがあったので質問させていただきました。


そして、2つ目の質問です。
私が必要とする特定のパターンを知らせるインジケーター/アドバイザーを書く のは、どの程度難しいのでしょうか?
例えば、弱気のローソク足が2本続いた後に強気のローソク足が3本続くとか?

私はこのように理解しています(大雑把ですが)。
終値<始値=弱気のローソク足
終値>始値=強気のローソク足

自分でできないなら、お金で注文しちゃうかも))

ご清聴ありがとうございました。

 

サードパーティ製のプログラムからexに コードをコンパイルすることは可能ですか?

Javaでロボットのコンストラクタのようなものを作っているのですが、ユーザーはソースコードにアクセスするのではなく、コンパイルされたコードを取得するようにしたいのですが、どうすればいいですか?

 
Roman Sharanov:

サードパーティ製のプログラムからexに コードをコンパイルすることは可能ですか?

Javaでロボットのコンストラクタのようなものを作っているのですが、ユーザーはソースコードにアクセスするのではなく、コンパイルされたコードを取得するようにしたいのですが、どうすればいいですか?

はい、MetaEditorのヘルプをご覧ください:Welcome to algotrading / Integration with other IDEs / Compiling MQL programs in other IDEs
 

どなたかご存知ですか?ExcelのスプレッドシートからMQL5スクリプトにデータを転送する作業をしています。すべてうまくいっているように見えますが、EXcelでは10進数のデータがドットではなくカンマで表示されています。

質問:MQLで、Excelからデータを取得して小数点以下に変更するスクリプトの仕組みはありますか?または、Excel自体で小数点以下に変更するのが良いでしょうか?

列に並べたり、マクロを書いたりする必要があるので、必要なセルからExcelからデータを取得するにはどうしたらよいでしょうか。データの中には、日付と整数・小数の両方が含まれています。このExcelが不便というか、まだ慣れてないというか...。

何かアドバイスがあれば嬉しいのですが・・・。

 
Vladimir M.:

どなたかご存知ですか?ExcelのスプレッドシートからMQL5スクリプトにデータを転送する作業をしています。すべてうまくいっているように見えますが、EXcelでは10進数のデータがドットではなくカンマで表示されています。

質問:MQLで、Excelからデータを取得して小数点以下に変更するスクリプトの仕組みはありますか?または、Excel自体で小数点以下に変更するのが良いでしょうか?

列に並べたり、マクロを書いたりする必要があるので、必要なセルからExcelからデータを取得するにはどうしたらよいでしょうか。データの中には、日付と整数・小数の両方が含まれています。このExcelが不便というか、まだ慣れてないというか...。

何かアドバイスがあれば嬉しいのですが・・・。

MQLには、文字列内の文字置換機能があります。文字列として読み込む

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока НАЙТИ ЗАПЯТУЮ ","
   const string    replacement       // подстрока, которая будет вставлена в найденные места ЗАМЕНИТЬ НА ТОЧКУ "."
   );

ダブル型に 変換する

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
理由: