2013/08/18

Notepad++ de MQL4 (Function List 編)

 Notepad++v6.4からFunction List がデフォルトで追加され、MQL4でも使用できることが判りましたのでご報告します。※現在の最新版は、Notepad++v6.4.5です。詳細はこちらで、 Function List
main


【設定手順】

1.Notepad++の更新をする。(?--Notepad++のアップグレード)
2.Notepad++がインストールされているディレクトリを開きfunctionList.xmlを開く。
3.functionList.xmlの21行目あたりに以下のコードを追加する。
function

/////////////////////////////////////////////////////////////////////////////////////////
<association ext="mq4" id="c_cpp_function"/>
<association ext="mqh" id="c_cpp_function"/>
/////////////////////////////////////////////////////////////////////////////////////////
※MQL4は、C語に似ているのでC語のparserをそのまま使用します。(手抜き^^;

4.functionList.xmlを上書き保存し、notepad++を起動させ、MQL4のファイルを開き、Function List のアイコンをクリックし完了です。

・・・・・とできればいいのですが。。。私はうまく作動しませんでした。これ以降は、そんな方用の説明です。
5.以下のディレクトリに行き、functionList.xmlを開き上記と同じことを行う。
WIN_XP:C:\Documents and Settings\...user...\Application Data\Notepad++
WIN_7:C:\Users\...user...\AppData\Roaming\Notepad++
WIN_8:┐(´∀`)┌
※以前のplug-in用Function Listの【FunctionList.ini or FunctionListRules.xml】などがあったら削除する。

6.完了(これで私は作動しました。)


【おまけ】
現在使用しているハイライト用の設定ファイル(MQL4highlight.xml)と自動補完用の設定ファイル(mql4.xml)を添付しておきます。ココからDLしてください。
自分が使いやすいように、ハイライトの色などは、変更してください。参考
前回からの変更点は、省略します。<忘れてしまいました^^;


【気になる妄想】
全く話は、変わりますがMQL4の大規模な変更が予定されているそうです。詳細は,Softgateさんの記事を参照ください。
この記事を読んでいろいろな妄想(願望)が湧いてきました。以下は私の妄想です。
1.MQL4とMQL5のコンパイラが共通化される。となるとMQL4でデバッグが可能になるんじゃないの!
2.MQL4がANISIからUnicodeに変更されるんじゃないの!<DLLはどうなるんだろう?
3.MQL4がマルチスレッド化されるんじゃないの! <最適化の高速が期待できるよね!
4.今年のATCが開催されないのは、これが原因じゃないの!<来年は。。。
5.MQ社さんMQL5リリースの時みたいにバグが頻発するんじゃないの!<(*´・b・`*)シー
などなど、MQL4の今後に期待しています。

2013/08/05

ロンドンコーリング手法の検証

かなりご無沙汰しておりますが、久しぶりにブログを更新します^^;
『誰もが結果が出せるロンドンコーリング手法をマネーパートナーズでやってみた【実践編】』という記事を見て面白そうだったのでEAを作成し検証してみました。

コード化

本来は、OCO注文ですが、そこは、EAということで通常の発注形態です。
//+------------------------------------------------------------------+
//|                                                  London_Call.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern string Pd_time          = "08:00";//日本時間15時 
extern string Start_time       = "14:00";//日本時間21時(夏時間20時)
extern int    Week_index       =       0; //0:all 1:月曜日 2:火曜日。。
extern int    Type_Order       =       1;//1:順張り 2:逆張り
extern int    Tp               =     100;//利食い値
extern int    Sl               =     100;//損切値
extern double lots             =     0.1;//ロット
int magic                      = 20120803 ;//マジックNo
int shour;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
   shour =  TimeHour(StrToTime(Start_time));
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   static bool set = false;
   int index,n;
   double tpf,spl,hi,lw;
   if(Hour()==0) set = false; 
   if(Hour() < shour) return(0);
   if( DayOfWeek() != Week_index && Week_index !=0)return(0);  
   if(!set){
         index = iBarShift(NULL,0,StrToTime(Pd_time));
         n = iBarShift(NULL,0,StrToTime(Start_time ));
         hi = High[iHighest(NULL,0,MODE_HIGH,index,n+1)];
         lw = Low[iLowest(NULL,0,MODE_LOW,index,n+1)];
         
         if(High[0] > hi){
            switch(Type_Order){
               case 1 ://順張り
                     OrderPosition(magic,OP_BUY,lots,Tp,Sl);
                     set = true;
                     break;
               case 2://逆張り
                     OrderPosition(magic,OP_SELL,lots,Tp,Sl);
                     set = true;
                     break;
               default :
                     Print("typ_orderの設定が間違っています。");
                     return(0);
            }
         }
            
         if(lw > Low[0]){
            switch(Type_Order){
               case 1 ://順張り
                     OrderPosition(magic,OP_SELL,lots,Tp,Sl);
                     set = true;
                     break;
               case 2://逆張り
                     OrderPosition(magic,OP_BUY,lots,Tp,Sl);
                     set = true;
                     break;
               default :
                     Print("typ_orderの設定が間違っています。");
                     return(0);
            }
         }
   }
   return(0);
  }

//+------------------------------------------------------------------+
void OrderPosition(int MagicNumber,int Type,double Lots,double TakeProfit,double StopLoss){ 
   int     Ticket;
   double price;
   int Slippage = 30;
   double tkp,spl;
   
   switch(Type){
      case OP_BUY:           
            price = Ask;
            if(TakeProfit>0) tkp = NormalizeDouble(TakeProfit*Point+price,Digits);else tkp =0;
            if(StopLoss>0)   spl = NormalizeDouble(price-StopLoss*Point,Digits); else spl =0;
            Ticket = OrderSend(Symbol(), OP_BUY, Lots, price, Slippage,spl,tkp,"", MagicNumber, 0, DodgerBlue);
            break;
               
      case OP_SELL:
            price = Bid;
            if(TakeProfit>0) tkp = NormalizeDouble(price-TakeProfit*Point,Digits);else tkp=0;
            if(StopLoss>0)   spl = NormalizeDouble(price+StopLoss*Point,Digits); else spl =0;
            Ticket = OrderSend(Symbol(), OP_SELL, Lots, price, Slippage,spl,tkp,"", MagicNumber, 0, DeepPink);
             break;
      default:
            Print("????????");
レイアウトが崩れていますがご愛嬌で。。^^;

検証結果

テスト通貨ペア:EURUSD 期間 :5M スプレッド:1.0pips 期間2013/01/01~08/03
サーバー:アルパリJPデモ
順張り 利食値10pips 損切10pips(全曜日共通)
逆張り 利食値8pips 損切値10pips(全曜日共通)

月曜日順張り
11
月曜日逆張り
12

火曜日順張り
21
火曜日逆張り
22

水曜日順張り
31
水曜日逆張り
32

木曜日順張り
41
木曜日逆張り
42

金曜日順張り
51
金曜日逆張り
52
※今回の検証は、簡素化を図るため指標発表等を考慮していませんのでご注意ください。

まとめ

今回の検証では、思うような結果出ませんでした。どこか設計ミスがあるのかな?