見出し画像

MQL5 の概要を確認

前回、WindowsでIDEが動くところまでは確認できたのでインジケータを作成する前段階としてMQL5という言語の仕様を確認しようと思う。

リファレンスを見ながらわかったことをメモしていく。

MQL5 リファレンス

言語としてはC++と似ているらしい。オブジェクト指向で掛けて、イベントハンドラみたいなものも書けるみたい。取引のための標準関数とかが含まれてる。

チャートの上にお絵かきしたり、注文したりするのをC++っぽい感じで書ける言語っていうのがざっくりとした印象。

MQL5の上では大きく分けて4種類のアプリケーションが作れる。

・エキスパートアドバイザー
・カスタム指標
・スクリプト
・サービス

エキスパートアドバイザーは今回最終目的にしているもので、自動で取引をしてくれるアプリケーション。

カスタム指標はチャート上にお絵描きするやつやと思う。

スクリプトは「100$刻みに買いポジション取る」みたいな何かしらの動作を一括でしてくれたりするようなものやと思う

サービスがなにか良くわかってない。

言語基礎

C++っぽいよってことがつらつらと書かれてた。(C++はそんなに馴染んでない言語やから、ちょっと不安なところはある。)

データ型

文字列データは動的なコンピュータメモリの割り当て / 再配分を必要とするために処理速度が最も遅くなります。

ほとんどしやんけど、文字列で switch 文とか書かない方が良いんやろうな。

カラー及び日付時刻型は、外部のエキスパートアドバイザーまたはカスタム指標のプロパティで定義されたパラメータの可視化と入力を容易にするためにのみ意味をなします(インプットタブ)。

日付時刻型ってあんまり使わへんのか。ローソク足なら何本目みたいにかんがえるんやな。

式には、明示的なキャストが指定されていない限り、暗黙の型キャストのみが利用されます。

キャストをほとんど考えずに生きてきたのでメモ。

整数型

よく使いそうな表を発見

スクリーンショット 2020-12-04 15.40.17

あかん、読み進めてたら寝てた。作りながら書かないとわからないのでチュートリアルを探す。

チュートリアル

良さそうなチュートリアルを列挙して今回は終わろうと思う。

この2つくらいかな。

外部通信

他のサーバとのやり取りが可能なのかを調べる。

WebRequest っていう関数(?) クラス(?)が存在するみたい。扱い方が思ってる感じではないけど、レスポンス入れる配列のポインタを渡しておけばそこに色々返してくれるみたい。

void OnStart()
{
 string cookie=NULL,headers;
 char   post[],result[];
 string url="https://finance.yahoo.com";
//--- サーバへのアクセスを有効にするには、URL "https://finance.yahoo.com"を
//--- メインメニュ->ツール->オプションの 「エキスパートアドバイザー(EA)」タブの許可されたURLのリストに追加する必要がある
//--- 最後のエラーコードのリセット
 ResetLastError();
//--- Yahoo!ファイナンスからhtmlページを読み込む
 int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
 if(res==-1)
   {
   Print("Error in WebRequest. Error code  =",GetLastError());
   //--- おそらくURLがリストされていないので、アドレスを追加する必要についてのメッセージを表示する
   MessageBox("Add the address '"+url+"' to the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION);
   }
 else
   {
   if(res==200)
      {
       //--- ダウンロード成功
       PrintFormat("The file has been successfully downloaded, File size %d byte.",ArraySize(result));
       //PrintFormat("Server headers: %s",headers);
       //--- ファイルでのデータ保存
       int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
       if(filehandle!=INVALID_HANDLE)
         {
         //--- result[] 配列の内容のファイルでの保存
         FileWriteArray(filehandle,result,0,ArraySize(result));
         //--- ファイルを閉じる
         FileClose(filehandle);
         }
       else
         Print("Error in FileOpen. Error code =",GetLastError());
      }
   else
       PrintFormat("Downloading '%s' failed, error code %d",url,res);
   }
}

データベース

SQLiteのそうさならできるみたい。以下の目的を想定しているよう

・任意の形式からの取引履歴と相場の受け取り
・最適化とテスト結果の保存
・他の分析パッケージとのデータの準備および交換
・MQL5アプリケーションの設定とステータスの保存

まとめ

最初の方でしっかり目を通そうと思ったけど心が折れて、気になることだけ調べて終わった。

頭がWebアプリケーション作る感じなのは早くすてないとあかんなと思った。次回はWindows環境でチュートリアルを動かしてみる。

明日、キーボード届くのでそれをつかって開発をしてみる。

おまけ

EAの話ししてたら本を紹介してもらったのでここに載せておく。自分でアルゴリズム考えるときには是非参考にしたい。今はMQL5を理解するのに精一杯...


この記事が気に入ったらサポートをしてみませんか?