MQL
概要
MetaQuotes Languageの略で、メタトレーダー上で動作するプログラム言語です(C言語に似ています)。MetaEditor上でプログラム開発していきます。
いきなり
いきなり注文を出してみましょう。MetaEditorの『File』-『New』-『Expert Advisor Wizard』にて『Expert Advisor』を選ぶと作られる雛型のstart()内を以下の様にします。
int start() { //買い注文 OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(25*Point), Ask+(25*Point), "Buy", 0, 0, Blue); return(0); }このたった一行で、為替が動くたびに買い注文が増えていきます。
まずは第一歩踏み出せたというとこでしょうか。
ちなみに、このstart()は相場が動く度に呼ばれます(分足・時足等関係無く、変化すれば呼ばれます)。
※各足(分足・時足等)毎に関係するのは、Close[]等の参照値です(Close[0]が現在値、Close[1]が時足なら前の1時間での終値となる)。
次
このままでは、買いっぱなし(利食い・損切りは付けてますが…)なので、自分のポジションを確認して「あれば決済、なければ買う」というプログラムにしてみましょう。int start() { //変数の宣言 int cnt, CurrentPosition; //ポジションチェック CurrentPosition=-1; for(cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderSymbol() == Symbol()) { CurrentPosition=cnt; } } //ポジション無し if(CurrentPosition == -1) { //買い注文 OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(25*Point), Ask+(25*Point), "Buy", 0, 0, Blue); } else { //ポジションの選択 OrderSelect(CurrentPosition,SELECT_BY_POS); //通貨チェック if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); } else if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); } } } return(0); }OrdersTotal()分チェックして、ポジションあればひとつづつ決済していきます。
ポジション無くなれば、買いですね。
為替が動くたびに、買って売ってを繰り返すという動作をします。
ちなみに、これでバックテストを行うと…。
見る見る資産が減っていきます(スプレッド代分減ってるんでしょうね)。
自分でプログラムを組まなくて良い様に、『MQLオーダーメイド』というコーナーを立ち上げてみました(コチラ)。
興味ある戦略を指示して、オリジナルのmq4ファイルを作ってみましょう。