URL指定でブラウザを開く

ショートカットファイル経由がポイント

チャートにニュース等を表示していると詳細を知りたくなることがあります。

その際、いちいちブラウザを開いて該当のニュースサイトを開くのは面倒です。

チャートから直接開ければ便利です。

というわけで、チャートに貼り付けたオブジェクトをクリックすると、ブラウザを開いてパラメータで指定したURLに飛んでくれるインジケーターを作成してみました。

#property copyright "Copyright (c) 2020, autoFX"
#property link      "https://autofx100.com/"
#property strict
#property indicator_chart_window

//+------------------------------------------------------------------+
//| ライブラリ                                                       |
//+------------------------------------------------------------------+
#include <stderror.mqh>
#include <stdlib.mqh>
#include <WinUser32.mqh>

//+------------------------------------------------------------------+
//| インポート                                                       |
//+------------------------------------------------------------------+
#import "shell32.dll"
  int ShellExecuteW(int hwnd, string lpOperation, string lpFile,
                    string lpParameters, string lpDirectory, int nShowCmd);
#import

//+------------------------------------------------------------------+
//| パラメータ                                                       |
//+------------------------------------------------------------------+
extern string URL = "https://www.yahoo.co.jp/";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  string objNm = "OBJECT_NAME";

  bool created = ObjectCreate(0, objNm, OBJ_LABEL, 0, 0, 0);

  if(created){
    ObjectSetInteger(0, objNm, OBJPROP_XDISTANCE, 200);
    ObjectSetInteger(0, objNm, OBJPROP_YDISTANCE, 100);
    ObjectSetInteger(0, objNm, OBJPROP_CORNER, CORNER_LEFT_UPPER);
    ObjectSetInteger(0, objNm, OBJPROP_FONTSIZE, 20);
    ObjectSetInteger(0, objNm, OBJPROP_COLOR, clrYellow);
    ObjectSetInteger(0, objNm, OBJPROP_SELECTABLE, false);
    ObjectSetInteger(0, objNm, OBJPROP_SELECTED, false);
    ObjectSetString(0,  objNm, OBJPROP_FONT, "Yu Gothic UI Bold");
    ObjectSetString(0,  objNm, OBJPROP_TEXT, "指定URLにジャンプ");
  }

  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| 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[])
{
  return(rates_total);
}

//+------------------------------------------------------------------+
//| Chart Event function                                             |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id == CHARTEVENT_OBJECT_CLICK){
    if(sparam == "OBJECT_NAME"){
      bool result = OpenURL(URL);
    }
  }
}

//+------------------------------------------------------------------+
//|【関数】URLを指定してブラウザを起動                               |
//|                                                                  |
//|【戻値】true:  成功                                               |
//|        false: 失敗                                               |
//|                                                                  |
//|【備考】なし                                                      |
//+------------------------------------------------------------------+
bool OpenURL(string aURL){
  // ブラウザのショートカット作成
  // ショートカットファイル名「SHORTCUT_NAME」はお好きな名前で
  string file = "SHORTCUT_NAME" + ".URL";
  int handle = FileOpen(file, FILE_CSV|FILE_WRITE, '~');

  if(handle < 1){
    return(false);
  }

  FileWrite(handle, "[InternetShortcut]");
  FileWrite(handle, "URL=" + aURL);
  FileClose(handle);

  // ブラウザ起動
  string path = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Files\\" + file;

  int SW_SHOWNORMAL = 1;
  int result = ShellExecuteW(0, "open", path, "", NULL, SW_SHOWNORMAL);

  if(result > 32){
    return(true);
  }else{
    return(false);
  }
}

OpenURL関数でショートカットファイルをMQL4¥Filesフォルダに作成するところがポイントです。

そのショートカットファイルをWindows APIのShellExecuteW関数で実行します。

これだけでURL指定のブラウザ起動が可能になります。

ちなみにURLを指定せずブラウザを起動するだけだったら、ショートカットファイルは不要です。

MT4の無料プログラミング講座

LINE公式アカウントを友だち追加して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG