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

超シンプルな自動売買プログラム(11) 前週の平均値と逆張り(4) さらに改良型

前回の記事「超シンプルな自動売買プログラム(11) 前週の平均値と逆張り(3) 改良型」ですが、考えてもよくわからないことが。

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

という結果はなかなかですし、最適化パラメーターもほとんどないのでカーブフィッティングの心配もありません。

「直前5日間の平均値より安く始まれば買い、直前5日間の平均値より高く始まれば売り」ですから、トレンドのない相場でうまくいきそうなのですが、EURUSD の 2014/1/1 – 2015/1/1 の相場は下のチャートのように後半が下降トレンド

下降トレンドが続くと逆張り(上がる方に賭ける)なので損失を被るはずですよね。

なのに上の収益曲線は後半に利益を積み重ねています

ナゾですね。

プログラム改良

日足で動作させないとまずいので、日足以外のチャートで動作させるとエラーが出て EA が動かないようにしてみました。

プログラムソース

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

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

#import "dummy.dll" //存在しないDLLから、存在しない関数を宣言
  void    EA_STOP();
#import

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "yasciiWeekly03"; //コメント
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 init()
  {
   if (iClose(NULL, 1440, 1)!= iClose(NULL, 0, 1)){
      MessageBox(" 日足専用です!");
      EA_STOP();
   }
  return(-1);  
  }

int start()
  {

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

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET); 
   OOPL = OrderOpenPrice();
   if( 
       //&&
        ( 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(  
       //&&
        ( 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 && TimeDayOfWeek(Time[0]) <= 4 && 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(  TimeDayOfWeek(Time[0]) >= 1 && TimeDayOfWeek(Time[0]) <= 4 && 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);
  }

###

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

以前の記事「超シンプルな自動売買プログラム(11) 前週の平均値と逆張り」で作ったプログラムを「月曜朝に売買し金曜朝に決済」から、「毎朝売買し翌朝決済(すぐにその日の売買を繰り返す)」に変更しました。

  • 買い 月曜日から木曜日にその日の始値が直前5日間の平均より低い
  • 売り 月曜日から木曜日にその日の始値が直前5日間の平均より高い
  • 決済 翌朝に強制決済

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

ユーロドルでこんなにいい結果はめったに出ないですねえ。

ドルフランもいけてます。

ちなみにユーロドルの 2015/1/1 – 2015/2/27 の結果を調べてみると、総損益 84782ヶ月で 1.8倍ペースの絶好調じゃないですか。

PF 2.37、勝率 65.63%。

正式運用EA に採用決定です。

関連記事

 

プログラムソース

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

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

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "yasciiWeekly03"; //コメント
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( 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( 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 && TimeDayOfWeek(Time[0]) <= 4 && 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(  TimeDayOfWeek(Time[0]) >= 1 && TimeDayOfWeek(Time[0]) <= 4 && 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);
  }

###

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

以前の記事「超シンプルな自動売買プログラム(11) 前週の平均値と逆張り」ですが、月曜日に買って金曜日に売るのは期間が長過ぎるかなと思い、何曜日が一番儲かっているか調べました

テスト用のプログラムソースは後述します。

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

PF 総損益(ドル) 勝率(%)
月曜に売買し、火曜に決済 4.44 9114 75
火曜に売買し、水曜に決済 1.11 883 53.85
水曜に売買し、木曜に決済 1.38 3530 54.9
木曜に売買し、金曜に決済 1.92 6631 56.86
20158

 なんと、月曜日だけ売買したほうがいいという結果が。次が木曜日。

月曜日はさすがに前週の平均値を気にしている人が多いということでしょう。

木曜日が次に多いのは週末に近づいたのでそろそろ今週の落としどころを予想しようと考えるからでしょうか。

しかし、曜日別に走らせて、それぞれを合計したらすごい損益(20158ドル)になりますね。元金が1年で3倍になっちゃいます。

 

関連記事

プログラムソース

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

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

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

//変数の設定//
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]) == weekday + 1  
       && ( 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]) == weekday + 1   
       && ( 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]) == weekday && 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(  TimeDayOfWeek(Time[0]) == weekday && 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);
  }

###

web-keepers Windows VPS についてのトラブル(3)

ご契約者 様
平素より弊社サービスをご利用いただき深謝申し上げます。
本日、ご契約の環境のホストサーバ内にてシステムが正常に
動作していないことを確認した為、誠に恐縮ではございますが、
ホストサーバー及び、ご契約サーバーの再起動を行わせて頂きました。
日時:2015年02月27日(金)8時00分(日本時間)

昨年年末から利用している Windows VPS(仮想専用サーバー)の web-keepers のトラブルですが、ちゃんと動き出したと思ったら、今朝また上記のメールが。

案の定、MetaTrader4 が落ちていました。

これでは自動売買などできません。

昨日からのデモ口座での自動売買の成績は幸いに影響を受けていませんでしたが。

2/25 09:00:00 buy 1 gbpjpy 183.996 2/26 08:00:26 184.89 89400
2/26 10:00:00 sell 1 eurjpy 134.881 2/26 11:29:07 134.829 5200

 

これでうまくいくと思ったのですが、他の VPS サーバーに移行するときが来たようです。

とりあえずは自宅サーバーに移行させますかね。

関連記事

 

###