日別アーカイブ: 2015年3月2日

[FX]通貨ペア毎の順バリ・逆バリの時間割(2014年度)

以前の記事 「超シンプルな自動売買プログラム(12) 前週の平均値と逆張り 時間特性」、「超シンプルな自動売買プログラム(13) 前週の平均値と順張り 時間特性」から、各通貨ペアの順バリ時間、逆バリ時間というのをまとめてみました。

2014/1/1-2014/12/31 の結果であり、今年に入ってからは若干異なっているものがあります。

通貨ペア毎の順バリ&逆バリの時間割

サーバー時間 日本時間(冬) 順バリの通貨 逆バリの通貨
0 7 AUDUSD,CHFJPY
1 8 GBPUSD
2 9 NZDUSD EURJPY,AUDJPY,CADJPY,GBPJPY
3 10
4 11 GBPJPY NZDJPY
5 12 USDJPY,AUDJPY,CADJPY,NZDJPY,
NZDUSD
6 13 GBPUSD
7 14
8 15 EURJPY AUDJPY
9 16 EURJPY,CADJPY,CHFJPY,GBPJPY GBPUSD
10 17 USDJPY,AUDJPY,CADJPY,GBPJPY,
NZDJPY
GBPUSD
11 18 EURUSD,EURGBP,GBPJPY
12 19 CADJPY,NZDJPY AUDUSD,NZDUSD
13 20 EURJPY,CHFJPY
14 21 GBPUSD NZDJPY
15 22 EURUSD,CADJPY,GBPJPY NZDUSD
16 23 EURJPY,CADJPY,CHFJPY,NZDJPY
17 0 EURJPY,CADJPY,CHFJPY,GBPJPY AUDUSD
18 1 USDJPY USDCAD
19 2
20 3 USDJPY
21 4 USDJPY,GBPUSD
22 5 USDJPY
23 6 EURUSD,EURJPY,AUDUSD,AUDJPY,
CADJPY,EURAUD,CHFJPY,GBPJPY,

NZDUSD,GBPUSD

ここでの順張りというのは、「直前5日間(日足)の終値の平均値より高く始まれば買い、低く始まれば売り」ということ。

逆張りというのは、「直前5日間(日足)の終値の平均値より高く始まれば売り、低く始まれば買い」ということ。

サラリーマンの方は朝6時に 10通貨の取引をして 7時に全部決済してから会社に行ってみてはどうでしょうか。^^

 関連記事

###

超シンプルな自動売買プログラム(13) 前週の平均値と順張り 時間特性

前回の記事「超シンプルな自動売買プログラム(12) 前週の平均値と逆張り 時間特性」ですが、どの通貨ペアもサーバー時間が 23 のときには半端ない損失が出るなァと思いましたので、順張りも試してみました。

一日のうち一番いい時間帯を選んで 1時間だけトレードするのは同じで、売るか買うかの条件を 「直前5日間の平均値より安く始まれば売り、直前5日間の平均値より高く始まれば買い」と順バリにしただけです。

サーバー時間はOANDAのもので、日本時間より 7時間遅い(冬時間)です。

このサーバー時間に売買して 1時間後に強制決済した結果です。

1時間足 2014/1/1 – 2015/1/1

通貨ペア サーバー時間 損益(ドル)
EURUSD 15 1139
23 2257
USDJPY 5 1278
10 1308
18 1372
20 2674
22 2027
EURJPY 8 1177
9 1048
13 1438
17 2299
23 1343
AUDUSD 23 1138
AUDJPY 5 1605
10 2115
23 1542
CADJPY 5 1679
9 1299
10 1884
12 1335
15 1426
17 1584
23 1325
EURAUD 23 2583
CHFJPY 9 1159
13 1339
17 2255
23 1190
GBPJPY 4 1121
9 1302
10 3509
15 4860
17 1664
23 2688
NZDJPY 5 2260
10 1500
12 1852
NZDUSD 2 1002
5 1320
23 1776
GBPUSD 6 1397
14 2536
23 2109

結果は年間で 1000ドル以上の利益のものだけに限定しました。

全部稼働させると、元金 10000ドルで、利益が 74714 ドルと 約 8.5倍になります。

逆張りバージョンと同時に動作させると、119688 ドルとなり、約 13倍ですね。

サーバー時間が 23-0 の間だけ合計 10.0 ロットになるので元金が少ない間はドローダウンが怖いです。ロット数を調整してください。

 関連記事

プログラムソース(テスト用)

//
// yasciiDaily02.mq4 1時間足で動作 順張り

//マジックナンバーの定義
#define MAGIC  44602        

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "yasciiDaily02"; //コメント

//---- input parameters

extern int Fast_period = 5;

//変数の設定//
int Ticket_L = 0; //買い注文の結果をキャッチする変数
int Ticket_S = 0; //売り注文の結果をキャッチする変数
int Exit_L = 0;   //買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0;   //売りポジションの決済注文の結果をキャッチする変数

int OS1 ;
int OS2 ;
double   OOPL;
double   OOPS;

extern int intime = 3 ;
int outtime ;

//extern double ILC = 12.0 ; 

int start()
  {

   if (Volume[0]>1 || IsTradeAllowed() == false) return(0) ;

   if (intime ==23) outtime = 0;
   else outtime = intime +1 ;

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();
   if(  Hour() == outtime    
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Blue);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   OOPS = OrderOpenPrice();
   if(   Hour() == outtime  
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(  Hour() == intime && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) < Open[0]
       && ( Ticket_L == 0 || Ticket_L == -1 ) 
       && ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Blue); 
    }

   //売りエントリー
    if(  Hour() == intime && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) > Open[0]
       && ( Ticket_S == 0 || Ticket_S == -1 )
       && ( Ticket_L == 0 || Ticket_L == -1 ))
    {   
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Red); 
    } 

   return(0);
  }

###

超シンプルな自動売買プログラム(12) 前週の平均値と逆張り 時間特性

1時間だけのトレード

以前の記事「超シンプルな自動売買プログラム(11) 前週の平均値と逆張り(4) さらに改良型」で使った毎日売買をするプログラムを改造して、一日のうち一番いい時間帯を選んで 1時間だけトレードするようにしました。

通貨ペアにより、利益の出る時間帯が違うからです。

調べてみますと以下の通り。

サーバー時間はOANDAのもので、日本時間より 7時間遅い(冬時間)です。

このサーバー時間に売買して 1時間後に強制決済した結果です。

売るか買うかは 「直前5日間の平均値より安く始まれば買い、直前5日間の平均値より高く始まれば売り」という逆張りです。

順張りもあとで検討します。^^

1時間足 2014/1/1 – 2015/1/1

通貨ペア サーバー時間 損益(ドル)
EURUSD 11 1083
USDJPY 21 1124
EURJPY 2 1113
16 1771
AUDUSD 0 1639
12 1279
17 2116
AUDJPY 2 2475
8 1243
CADJPY 2 1530
16 1318
CHFJPY 0 1026
16 1851
EURGBP 11 1394
GBPJPY 2 1892
11 2910
NZDJPY 4 1389
14 2005
16 1622
NZDUSD 12 2918
15 2434
USDCAD 18 1977
GBPUSD 1 1039
9 1663
10 1101
21 2062

結果は年間で 1000ドル以上の利益のものだけに限定しました。

全部稼働させると、元金 10000ドルで、利益が 43974 ドルと 約 5.4倍になります。

サーバー時間が 2-3 の間だけ合計 4.0 ロットになるので元金が少ない間はドローダウンが怖いです。ロット数を調整してください。

1時間ごとに有利な通貨ペアに乗り換えていく・・・愛称は「時の旅人」で決まりでしょうか。

 関連記事

プログラムソース(テスト用)

//
// yasciiDaily01.mq4 1時間足で動作

//マジックナンバーの定義
#define MAGIC  44595        

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "yasciiDaily01"; //コメント

//---- input parameters

extern int Fast_period = 5;

//変数の設定//
int Ticket_L = 0; //買い注文の結果をキャッチする変数
int Ticket_S = 0; //売り注文の結果をキャッチする変数
int Exit_L = 0;   //買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0;   //売りポジションの決済注文の結果をキャッチする変数

int OS1 ;
int OS2 ;
double   OOPL;
double   OOPS;

extern int intime = 3 ;
int outtime ;

int start()
  {

   if (Volume[0]>1 || IsTradeAllowed() == false) return(0) ;

   if (intime ==23) outtime = 0;
   else outtime = intime +1 ;

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();
   if(  Hour() == outtime    
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Blue);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   OOPS = OrderOpenPrice();
   if(   Hour() == outtime  
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(  Hour() == intime && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) > Open[0]
       && ( Ticket_L == 0 || Ticket_L == -1 ) 
       && ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Blue); 
    }

   //売りエントリー
    if(  Hour() == intime && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) < Open[0]
       && ( Ticket_S == 0 || Ticket_S == -1 )
       && ( Ticket_L == 0 || Ticket_L == -1 ))
    {   
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Red); 
    } 

   return(0);
  }

###