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
※今回の検証は、簡素化を図るため指標発表等を考慮していませんのでご注意ください。

まとめ

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

3 件のコメント :

LitopsQ さんのコメント...

こんばんは。
いつもお世話になっております。

曜日はちょっと頼りない気がしますね。
このぐらいの値幅だと推定が正しいかどうかは結局その日の雰囲気次第になりそうに思います。

London CallingにCasbahとは、The Clash好きなお母さんの様で。

bighope さんのコメント...

LitopsQさんへ
こんばんわ
こちらこそ、お世話になっております^^;
ののさんからEURがらみ以外のペア(USDJPYなど)が対象であること、OCO注文ではない事などを指摘して頂いております。(すでにご存じだとは思いますが。。。)が、私も、曜日だけというのは、確かに頼りない気がしますね^^;
コメントありがとうございます。

ForexOz(Kireek) さんのコメント...

いつもありがとうございます!
久しぶりにブログ巡りしてます。
ソフトの傾向を探るとしては、物足りないデータ数ですね...
個人的には曜日的アプローチはありかなと思ってます!