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

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

FXシステムトレード 年率200%儲ける投資術 FXシステムトレード 年率200%儲ける投資術

池田 悟

日本実業出版社 2006-05-24

売り上げランキング : 178070

Amazonで詳しく見る

by G-Tools

 

上の本の p80 に載っているこの本2つ目のシステムはウィクリートレード月曜日に売買し、週末に決済) で、日足で動作するものです。

  • 買い 月曜日の始値が前週の 5日の平均より低い
  • 売り 月曜日の始値が前週の 5日の平均より高い
  • 決済 金曜日に強制決済

土曜日に決済したかったのですが、サーバーの時間がずれている(サマータイムもあるしね)のと、日足が週 5本と6本のサーバーがあるのとで、金曜日に決済することにしました。

プライスは前の週のピボット値(平均値に近い)に向かうという傾向があるので、逆張りになっているのでしょう。

EA にしてみると、なるほど多くの通貨ペアで利益が出ますネ。

ユーロ・ドル が一番優秀でした。

EURUSD 日足 2014/1/1 – 2015/1/1

ほとんど元金を割っていないので、運用中は気分がいいんじゃないでしょうか。

金曜日の朝に決済してしまうのが気になりますが、金曜日夜の狂騒劇に巻き込まれなくて、かえっていいですもんね。

関連記事

プログラムソース

//
// yasciiWeekly01.mq4 日足で動作

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

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "yasciiWeekly01"; //コメント
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;

int start()
  {

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

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();
   if(  TimeDayOfWeek(Time[0]) == 5  
       && ( 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(   TimeDayOfWeek(Time[0]) == 5 
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(  TimeDayOfWeek(Time[0]) == 1 && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 3) > 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(  TimeDayOfWeek(Time[0]) == 1 && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 3) < 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);
  }

 

###

超シンプルな自動売買プログラム(10) 移動平均線(MA)クロス マクロス+バルキリー

FXシステムトレード 年率200%儲ける投資術 FXシステムトレード 年率200%儲ける投資術

池田 悟

日本実業出版社 2006-05-24

売り上げランキング : 178070

Amazonで詳しく見る

by G-Tools

 

上の本の p79 に載っているこの本最初のシステムは 2本の移動平均線(MA)のクロスを使った超シンプルなもの。

  • 買い 5期間平均の移動平均線が 25期間平均の移動平均線を上回る
  • 売り 5期間平均の移動平均線が 25期間平均の移動平均線を下回る
  • 決済 10期間保有した後 あるいは 逆の売買サインが出たとき

MAクロスなのでマクロスと私は呼んでいます。

一定期間の保有で仕切る(見切る)というのは私はやらないのですが、やってみました。

2014/1/1 – 2015/1/1 ドル円 4時間

本にはないのですが、私のいつもの固定ロスカットをつけたのが下。

最大ドローダウンが半減し、曲線も少しなだらかになりました。

固定ロスカットは一定の値(ヴァリュー)で切るのでバルキリーとでも呼びましょうか。なかなか効果があります。

このマクロスはバルキリー付きでもパフォーマンスは他の EA と比べていまいちですが、保有期間を制限するというアイディアはありだと思います。

なお、保有期間の数値を最適化で決めるようにすると最適解はもっと長くなるようです。ただし、総損益と最大勝ち金額が増えますが、勝率と最大ドローダウンは下がります。

関連記事

FXシステムトレード 年率200%儲ける投資術 / 池田 悟

プログラムソース

//
// yasciiMAcross01.mq4

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

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

//---- input parameters

extern int Slow_period = 25;
extern int Fast_period = 5;
extern int pos_timeMAX = 10;
int pos_time = 0 ;

//変数の設定//
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 double ILC = 12.0 ; 

int start()
  {

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

   pos_time += 1 ;

     double ma5 = iMA(NULL, 0, Fast_period, 0, 0, PRICE_CLOSE, 1);
     double ma25 = iMA(NULL, 0, Slow_period, 0, 0, PRICE_CLOSE, 1);
     double ma5s = iMA(NULL, 0, Fast_period, 0, 0, PRICE_CLOSE, 2);
     double ma25s = iMA(NULL, 0, Slow_period, 0, 0, PRICE_CLOSE, 2);

   double lc = ILC;
   if(( Digits ==3 ) ||(Digits ==5)) lc = lc*10.0 ;

   //買いポジションのエグジット

   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();
   if(  ((ma5 < ma25 && ma5s > ma25s)|| pos_time > pos_timeMAX || OOPL - lc*Point >= Close[1] )  
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Blue);
      if( Exit_L ==1 ) {Ticket_L = 0;}
          pos_time = 0;
    }    

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

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   OOPS = OrderOpenPrice();
   if(   ((ma5 > ma25 && ma5s < ma25s) || pos_time > pos_timeMAX || OOPS + lc*Point <= Close[1] )  
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
          pos_time = 0;
    }   

   //買いエントリー
   if(  ma5 > ma25 && ma5s < ma25s
       && ( 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);    pos_time = 0;
    }

   //売りエントリー
    if(  ma5 < ma25 && ma5s > ma25s
       && ( 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);     pos_time = 0;
    } 

   return(0);
  }

###

オシレーターの解釈(数値判定)について

オシレーター系の評価には、「基準となる数値をどうとるか」 や「順張りととらえるかあるいは逆張りと考えるか」など難しい問題が多数あります。

上のチャートではサブウィンドウに RSI を表示してあります。

ここでは点線のラインは 30 と 70 を採用することにしますが、どの時点でどういう判断をくだすかでいろいろ変わってきます。

たとえば、

  • A地点(RSI が買われすぎゾーンに突入)
  • B地点(RSI が買われすぎゾーンを脱出)
  • C地点(RSI が売られすぎゾーンに突入)

のどの地点を判断基準にするかということを考えてみます。

A地点(RSI が買われすぎゾーンに突入)を買われすぎと判定

よくみる考えですが、バンドウォークの始点だったりするとこれからずっと買われすぎの状態が続きます。

ここで売ったりするプログラムでは大負けすることが多いです。損切りはしっかりとしましょう。

B地点(RSI が買われすぎゾーンを脱出)を売られ始めと判定

これもよく見る考えですが、しっかりしたレンジ相場以外ではあまり有効ではありません。

C地点(RSI が売られすぎゾーンに突入)を買われすぎの終焉と判定

これを売られすぎとするという考えは「A地点(RSI が買われすぎゾーンに突入)を買われすぎと判定」することの逆パターンになりますので省略しますが、そうではなく、ここまでが買われすぎの状態とする考え方です。

そう間違いではないのですが、上のチャートのようにトレンドや非トレンド(上昇&下降)がごった混ぜの状態を区別できていませんね。

まとめ

オシレーター系の指標はレンジ相場などでは有効ですが、トレンド相場では有効でなくなるばかりか、むしろ有害になる危険性も高いです。

そのためレンジ相場かトレンド相場かを別の方法で判別してから適用する必要があります。

関連記事

超シンプルな自動売買プログラム(9) RSI クロス

###