「マネー」カテゴリーアーカイブ

ふるさと納税3回め / イチゴ 玄海町

以前の記事「ふるさと納税2回め / 液晶ディスプレィ XU2390HS-B1」でズにのった私は続けて納税(寄付)することにしました。

カミサンからリクエストのいちご。

しかし、申し込み期限が過ぎているところが多い。

「あまおう」はどこもヤバそう。

「さがほのか」にするか、と思い、人気の玄海町に。

ここの 10万円コースは【Premium GENKAI】と呼ばれ、現在受け付け停止中。毎月15日頃に次のものが送られてくるのです。

January…干し物セット
February … とらふぐ
March… 苺~さがほのか~
April … 特産品詰め合わせ
May …海の幸セット
June …お肉詰め合わせ
July … ハウスみかん
August …夏野菜セット
September … 新米(コシヒカリ)
October … お茶菓子セット
November …玄海町産黒毛和牛ハンバーグ
December …仮屋湾の真鯛

 

3月にさがほのかがあるので間に合うかと思い、ここにしました。

とりあえず 5000円。

さて、間に合うのか、来年になっちゃうのか。

> ふるさと納税ポータルサイト

###

[FX]前週の平均値と順張り&逆張り EA化(4) GBPJPY版のみ始動

以前の記事「前週の平均値と順張り&逆張り EA化(3) 半自動のススメ」でデモ口座で稼働させていた EA (yasciiDaily02GJ.ex4)はだいたい正しく稼働しているようです。

前回からの結果

3/4 08:00:00 sell 1 gbpjpy 183.709 3/4 12:23:36 183.481 22800
3/4 09:00:00 sell 1 gbpjpy 183.8 3/4 10:00:00 183.879 -7900
3/4 14:00:00 sell 1 gbpjpy 183.516 3/4 15:02:15 183.387 12900
3/4 16:00:00 sell 1 gbpjpy 183.164 3/4 17:29:07 182.829 33500

 

しめて 61300円のプラス。

手動で決済したほうがいい感じですが・・・

まだ GBPJPY という一つの通貨ペアのしかも順張りバージョンだけです。

これだけリアル口座で動かすことにします。

うまくいきそうならすべての通貨ペア版を投入しますが、スイスフランの絡んだ通貨ペア版はスイスショックの影響の消えるあと2ヶ月ほど待ってから投入する予定です。

全部のペアが揃った「時の旅人」全通貨バージョンはいずれ皆様に配布しますネ。

関連記事

前週の平均値と順張り&逆張り EA化(3) 半自動のススメ

###

ふるさと納税2回め / 液晶ディスプレィ XU2390HS-B1

前回の記事「ふるさと納税のお礼のパソコンがやってきた」でご紹介しましたが、長野県飯山市にふるさと納税するとちゃんとパソコンが送られてきて非常に満足の私は続けて納税(寄付)することにしました。

自治体によっては年に一回しかお礼がもらえませんが、飯山市は何回でもOK。

> 飯山市のお礼一覧

ということで、タブレットPC にも心惹かれましたが、この前買った液晶ディスプレィがイマイチだったので、

iiyama XU2390HS-B1

にすることに。

30000円の寄付でもれなくもらえます。

ネットでクレジットカード払いにして 5分もかからず手続き終了。

iiyama XU2390HS-B1 は価格.com で調べると、最安値ショップでも 19402円ということで、寄付金 30000円に対して還元率は 65%近いですね。

ふるさと納税制度でのすべての寄付金から 2000円を除いた額が来年控除(キャッシュバック)されるわけなので、当然 3万円返ってきて(2000円は一回目に含まれると考える)、そのうえ 19402円の品物がまるまる無料でもらえるということですね。

ヤフオクに出している人もいます(タダのもの売っちゃいかんでしょ^^)。15000円前後で取引されていますね。還元率 50%か。

> ふるさと納税ポータルサイト

関連記事

ふるさと納税2回め / 液晶ディスプレィ XU2390HS-B1(2)

###

完全ガイド 100%得するふるさと納税生活 / 金森 重樹

完全ガイド 100%得するふるさと納税生活 (SPA!BOOKS) 完全ガイド 100%得するふるさと納税生活 (SPA!BOOKS)

金森 重樹

扶桑社 2014-04-18

売り上げランキング : 7404

Amazonで詳しく見る

by G-Tools

★★★★☆(この本読まなきゃ何万円もソンをする)

不動産投資の大御所 金森重樹さんのふるさと納税についてのガイドブック。

ふるさと納税の仕組み、やり方、ウマイ活用法を教えてくれます。

高額所得者は住民税の2割まで行える(そうでない人は1割)とか、2000円のロスを回収する(実質無料になる)方法などいろいろ載っていて、とてもオトク。

限度枠が余ったら、平戸市に寄付して全部ポイントに変えておけば有効に使いきれるわけですね。

もっといい方法も考えた!

読んでいるといろいろ発見があります。

###

ふるさと納税のお礼のパソコンがやってきた

長野県飯山市に 10万円の寄付(いわゆるふるさと納税)をすればもらえるという噂のパソコン様、昨夜ご到着。

筐体(ケース)は、裏面にある マザーボード背面が突出する部分が大きく開いたタイプのもので、マザーボードが簡単に交換できます。

末永く使えそうです。

最近のデル製PC は裏のパネルがはずれず(複数の端子の位置が固定)、マザーボード交換がしにくいので、買わないことにしています。

このモデルは 10万円の寄付が必要ですが、来年 98000円が返ってくるので、結局 2000円なわけで。

バンザイ。

価格.com で最安値 64584円 で売られていると書かれている マウスコンピューター製 LuvMachines Lm-iH301S(ただし Windows7搭載)よりは少しグレードアップされていますね。

LM-iH301S-IIYAMA

  • OS Windows 8.1 Update 64ビット

  • CPU インテルCore i5-4590プロセッサー(4コア/3.30GHz/TB時最大3.70GHz/6MBキャッシュ

  • CPUファン LGA 1150用CPU FAN

  • メモリ 8GBメモリ(4GB×2 DDR3 SDRAM PC3-12800)/デュアルチャネル

  • HDD 500GB 7200rpm(6Gbps対応)

  • 光学ドライブ DVDスーパーマルチドライブ

  • グラフィック機能 インテルHD グラフィックス4600(内蔵)

  • マザーボード インテルH81 Expressチップセット(MicroATX)

  • ケース ミニタワーデスクトップ(ブラック/フロントUSB2.0対応)

  • 電源 350W電源(Blonze)

  • LAN オンボード10/100/1000BASE-T GigaBit-Ethernet LAN

  • サウンド ハイデフィニション・オーディオ

  • キーボード 標準オリジナルキーボード(USB/102日本語キー/ブラック)

  • マウス 標準オリジナルマウス(USB/オプティカル/スクロール機能付き3ボタン/ブラック)

  • サポート 1年間センドバック修理保証※1か月間初期不良対応を含む

 

起動すると、BIOS でない変な画面・・・UEFI ってやつね(Linux が入れづらそう・・・)。

メール認証がめんどくさかったけど、あとは Windows7 よりスンナリ。

Windows8.1 のデスクトップが無事立ち上がりました。

壁紙がマウスコンピューター特製なのと IE にマウスコンピューターの HP がお気に入り登録されている以外は普通の外観。

今日はまだ寒いので、ファンが回っておらず、非常に静か。

ぼちぼちと使っていきます。

関連記事

ふるさと納税初めてやってみた

###

[FX]前週の平均値と順張り&逆張り EA化(3) 半自動のススメ

前回の記事「前週の平均値と順張り&逆張り EA化(2)」でお披露目したプログラムをお昼にサーバーに仕込んでおきました。

自動売買の結果

エントリ時刻 B/S ロット 通貨 エントリ値 決済時刻 決済値 損益(円)
2015-03-03 14:00:00 sell 1 gbpjpy 184.21 15:21:28 183.92 29000

 

じつは 16:00:00 で決済されるか待たずに、老婆心で入れた トレーリングストップがヒットして 15:21:28 で決済されました。

最近は EA にエントリだけさせて裁量で決済するクセがついてしまっています。

決済は OCO注文かトレーリングストップを使います。

OCO のプライスはきちんと押し目や戻り目、一目均衡表の雲などで設定しているので EA に決済させるよりはうまくいくケースが多いと思います。

利益がどこまでいくかわからないときはフィボナッチリトレースメントより MetaTrader4 搭載のトレーリングストップ機能で追いかけるようにしています。

EA でエントリさせて、自分で利益確定(あるいは損切り) というのは案外有効な方法だと思います。

達成感も残るしね。

関連記事

前週の平均値と順張り&逆張り EA化(2)

おまけ

最近の EA の状況です。

3/2 00:00:20 buy 1 eurusd 1.11826 3/2 15:14:57 1.12267 52819
3/2 00:02:12 sell 1 gbpjpy 184.57 3/2 11:00:00 184.681 -11100
3/2 02:15:02 buy 1 usdjpy 119.927 3/2 08:15:02 119.789 -13800
3/2 11:00:00 buy 1 gbpjpy 184.684 3/2 13:37:46 184.477 -20700
3/2 13:00:00 buy 1 usdjpy 119.832 3/2 13:15:01 119.796 -3600
3/2 14:00:00 sell 1 gbpjpy 184.514 3/2 15:14:01 184.279 23500
3/2 14:45:02 sell 1 usdjpy 119.716 3/2 15:00:01 119.781 -6500
3/2 18:15:01 buy 1 usdjpy 120.125 3/3 03:10:14 120.03 -9500
3/3 09:00:00 buy 1 gbpjpy 184.092 3/3 12:42:10 184.19 9800
3/3 14:00:00 sell 1 gbpjpy 184.21 3/3 15:21:28 183.92 29000

総損益は +49919円。

まずまずですか。

###

[FX]前週の平均値と順張り&逆張り EA化(2)

前回の記事は 2014/1/1 – 2014/12/31 での結果から作成しました。

私は実際に稼働する EA の最適化は直前3ヶ月のバックテストで行っていますので、このプログラムも直前3ヶ月の結果を反映します。

GBPJPY 順張り のみの場合ですが、以下のプログラムのように変更しました。

結果は、

GBPJPY 1時間足 2013/12/1 – 2015/2/28

3ヶ月で2倍強なのでうまくいきそうです。

残りも全部つくらないとなあ・・・

問題点

上のようにポンド/円 では影響がないのですが、スイスフランがらみの通貨ペアは 2015/1/15 12時(サーバー時間)にいわゆるスイスショックがありまして、それにバックテストがかなり影響されてしまいます。

影響があれば資産曲線の中央あたりに”ガケ”が出現します。CHFJPY や USDCHF などはモロです。

関連記事

プログラムソース

//
// yasciiDaily02GJ.mq4 1時間足で動作 順張り 最新バージョン

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

//パラメーターの設定//
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;

int start()
  {

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

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

   //買いエントリー
   if(  (Hour() == 4 || Hour() == 9 || Hour() == 14 ||  Hour() == 20 || Hour() == 23) 
       && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) < Close[1]
       && ( 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() == 4 || Hour() == 9 || Hour() == 14 || Hour() == 20 || Hour() == 23) 
       && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) > Close[1]
       && ( 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);
  }

###

[FX]前週の平均値と順張り&逆張り EA化

以前の記事「超シンプルな自動売買プログラム(13) 前週の平均値と順張り 時間特性」での結果を踏まえて、自動売買用の EA を作るわけですが、1つのチャートで全通貨分を動かすのは結構面倒なので、それぞれの通貨ペアごとに順張り、逆張りを分けて作れば超カンタンにできてしまします。

たとえば、GBPJPY 順張り のみの場合は、以下のプログラムのようにします。

結果は、

GBPJPY 1時間足 2014/1/1 – 2014/12/31

このようなものを順張り、逆張り用にそれぞれ作ればいいのですね。

結構面倒のようですが、コピペでできます。

これで毎朝早起きしないでよくなった・・・かな。

関連記事

プログラムソース

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

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

//パラメーターの設定//
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;

int start()
  {

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

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

   //買いエントリー
   if(  (Hour() == 4 || Hour() == 9 || Hour() == 15 || Hour() == 17 || Hour() == 23) 
       && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) < Close[1]
       && ( 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() == 4 || Hour() == 9 || Hour() == 15 || Hour() == 17 || Hour() == 23) 
       && iMA(NULL, 1440, Fast_period, 0, 0, PRICE_CLOSE, 1) > Close[1]
       && ( 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);
  }

###

[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);
  }

###

超シンプルな自動売買プログラム(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 の結果を調べてみると、総損益 8478 と2ヶ月で 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 サーバーに移行するときが来たようです。

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

関連記事

 

###

平均からの乖離

平均(移動平均線)からの乖離をトレードシグナルにしていらっしゃる人が結構います。

ということで、乖離率を表示するインディケーターを自作してみました。

ついでに、乖離率の移動平均であるシグナルも表示します。

乖離率の計算に使用する移動平均線の種類も4種類から選べるようにしました。

サブウィンドウが乖離率です。

え、ボリンジャーバンドを見るから要らない!?

プログラムソース

//+------------------------------------------------------------------+
//|                          yasciiKairi01.mq4 
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Orange
#property indicator_color2 Violet
#property indicator_level1   0

//---- input parameters
extern int  MA_period = 20;
extern int  Sig_period = 9;
extern int MA_method = 0; // SMA(0), EMA(1), SMMA(2), LWMA(3)

//---- buffers

double kairi[];
double kairiX[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
//---- indicators
  IndicatorBuffers(2);
  IndicatorShortName("Kairi(" + MA_period + ")");
  SetIndexStyle(0, DRAW_LINE);
  SetIndexBuffer(0, kairi);
  SetIndexBuffer(1, kairiX);
  SetIndexStyle(1, DRAW_LINE);

 //----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
 {
 //----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
   int i, j, limit ;

// to prevent possible error
   if(counted_bars < 0)
     {
       return(-1);
     }
   if(MA_method >= 4)
     {
       MA_method = 0;
     }

   limit = Bars - counted_bars;

   for(i = limit - MA_period ; i >= 0; i--)
     {
       double sma20 = iMA(NULL, 0, MA_period, 0 , MA_method , PRICE_CLOSE, i) ;
       kairi[i] = 100.0 * (Close[i]- sma20) / sma20 ;
      }

   for(j = limit - MA_period - Sig_period; j >= 0; j--)
      {
        kairiX[j] = iMAOnArray(kairi,0,Sig_period,0,MODE_EMA,j);
      }

   return(0);
  }
//+------------------------------------------------------------------+

###

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

昨年年末から利用している Windows VPS(仮想専用サーバー)の web-keepers のトラブルですが、先週末のメンテナンス以降、MetaTrader4 は一度も落ちていません。

奇跡的、というかこれが当たり前の姿のはずです。

メンテ後のデモ口座での自動売買の成績は、

2/23 10:00:00 buy 1 usdjpy 119.217 2/23 13:32:45 119.071 -14600
2/23 11:00:00 sell 1 eurjpy 135.305 2/23 13:41:16 134.64 66500
2/23 12:00:00 buy 1 gbpjpy 183.275 2/24 06:11:29 183.796 52100
2/23 13:00:00 sell 1 gbpjpy 182.699 2/23 15:44:32 183.151 -45200
2/24 18:00:00 sell 1 gbpjpy 184.241 2/25 01:00:00 183.858 38300
2/25 04:00:00 sell 1 eurjpy 134.635 2/25 09:00:00 134.816 -18100
2/25 10:00:00 buy 1 eurjpy 135.154 2/25 13:00:00 134.827 -32700
2/26 00:00:24 sell 1 eurjpy 135.018 2/26 02:38:05 135.153 -13500

 

ポンド円とユーロ円ばっかりですが、差し引き 32800円と出入りの激しい相場です。

ギリシャ問題のせいでしょうか。

ドル円は一向にチャンスが来ない(トレンドが出ない)みたいですね。

関連記事

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

###

超シンプルな自動売買プログラム(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 クロス

###

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

超シンプルな自動売買プログラム として RSI とそのシグナル(直前3本の平均値)とのクロスを考えてみました。

RSI はオシレーター系では最も有名なものですね。

  • 買い RSI がBuyLevel 以上のときに RSI が上昇(シグナルを上抜け)
  • 売り RSI がSellLevel 以下のときに RSI が下降(シグナルを下抜け)
  • 決済 逆のサインが出たとき または 固定ロスカットにひっかかったとき

 

結果

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

最適化した後のパラメーターは RSI Period = 11、BuyLevel = 48、SellLevel =52 です。

固定ロスカットはつけましたが、ほとんど無意味です。

利益曲線を見るとトレンド時に頑張るタイプです。RSI はオシレーターのくせにヘンですよね。

まあ、RSI のシグナルとのクロスなので RSI の上昇が買いのサイン、下降を売りのサインとみなしているわけですから、順張りとしての使い方です。そう考えるとヘンではないでしょう。

オシレーターっぽいところかな、と思うのは、トレンドのないときのロスが比較的少ないところでしょうか。

プログラムソース

//
// yasciiRSI01.mq4
//

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

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

extern int RSI_Period = 14 ;
extern double BuyLevel = 50.0;
extern double SellLevel = 50.0;

extern double ILC = 40.0 ;

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

int start()
  {

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

      double RSI_MAIN1 = iRSI(NULL, 0, RSI_Period , PRICE_CLOSE, 1 );
      double RSI_MAIN2 = iRSI(NULL, 0, RSI_Period , PRICE_CLOSE, 2 );
      double RSI_MAIN3 = iRSI(NULL, 0, RSI_Period , PRICE_CLOSE, 3 );
      double RSI_MAIN4 = iRSI(NULL, 0, RSI_Period , PRICE_CLOSE, 4 );
      double RSI_Signal1 = (RSI_MAIN1 + RSI_MAIN2 + RSI_MAIN3)/3.0 ;
      double RSI_Signal2 = (RSI_MAIN4 + RSI_MAIN2 + RSI_MAIN3)/3.0 ;

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

   //買いポジションのエグジット
   OS = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   if(    ((RSI_MAIN1 < RSI_Signal1 && RSI_MAIN2 >= RSI_Signal2) ||( OrderOpenPrice() - lc * Point >= Close[1]))
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット
   OS = OrderSelect(Ticket_S, SELECT_BY_TICKET);  
   if(    ((RSI_MAIN1 > RSI_Signal1 && RSI_MAIN2 <= RSI_Signal2)||( OrderOpenPrice() + lc * Point <= Close[1]))
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(    RSI_MAIN1 > RSI_Signal1 && RSI_MAIN2 <= RSI_Signal2 && RSI_MAIN1 > BuyLevel
       && ( 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,Red);
    }

   //売りエントリー
   if(    RSI_MAIN1 < RSI_Signal1 && RSI_MAIN2 >= RSI_Signal2 && RSI_MAIN1 <= SellLevel
       && ( 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,Blue);     
    } 

   return(0);
  }

###

マーフィーのスパンモデルについて

マーフィーの最強スパンモデルFX投資法 マーフィーの最強スパンモデルFX投資法

柾木 利彦

日本実業出版社 2010-12-16

売り上げランキング : 46055

Amazonで詳しく見る

by G-Tools

前回の記事「一目均衡表のずれ(26と25)」で紹介したこの本ですが、マーフィー(柾木)さんのスパンモデルとは、一目均衡表から転換線と基準線を除き、先行スパンAと先行スパンBと遅行線とを使うものです。

ただし、 先行スパンAと先行スパンB を先行させません。

え、先行スパンでないただのスパン? だからスパンモデルなんですかね。

リアルタイム雲とかカレント雲とかちまたで呼ばれているものと同じです。

坂の上の雲ではなく、ここの上の雲。

 

とりあえずプログラムしてみました。

プログラムソース

//+------------------------------------------------------------------+
//|              Span Model          yasciiSpan01.mq4 
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Black          // Tenkan-sen
#property indicator_color2 Black         // Kijun-sen
#property indicator_color3 SandyBrown   // Up Kumo
#property indicator_color4 Thistle      // Down Kumo
#property indicator_color5 Yellow         // Chikou Span
#property indicator_color6 SandyBrown   // Up Kumo bounding line
#property indicator_color7 Thistle      // Down Kumo bounding line
//--- input parameters
input int InpTenkan=9;   // Tenkan-sen
input int InpKijun=26;   // Kijun-sen
input int InpSenkou=52;  // Senkou Span B

int    ExtBegin;

//--- buffers
double tenkan[];
double kijun[];
double senkouA[];
double senkouB[];
double chikou[];
double senkouAL[];
double senkouBL[];
//---

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(void)
  {
   IndicatorDigits(Digits);
//---
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,tenkan);
   SetIndexDrawBegin(0,InpTenkan-1);
   SetIndexLabel(0,"Tenkan Sen");
//---
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,kijun);
   SetIndexDrawBegin(1,InpKijun-1);
   SetIndexLabel(1,"Kijun Sen");
//---
   ExtBegin = InpKijun;
   if(ExtBegin < InpTenkan) ExtBegin = InpTenkan;
//---
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
   SetIndexBuffer(2,senkouA);
   SetIndexDrawBegin(2,InpKijun+ExtBegin-1);
   SetIndexLabel(2,NULL);
   SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(5,senkouAL);
   SetIndexDrawBegin(5,InpKijun+ExtBegin-1);
   SetIndexLabel(5,"Senkou Span A");
//---
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
   SetIndexBuffer(3,senkouB);
   SetIndexDrawBegin(3,InpKijun+InpSenkou-1);
   SetIndexLabel(3,NULL);
   SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(6,senkouBL);
   SetIndexDrawBegin(6,InpKijun+InpSenkou-1);
   SetIndexLabel(6,"Senkou Span B");
//---
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,chikou);
   SetIndexShift(4,1-InpKijun);
   SetIndexLabel(4,"Chikou Span");
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo                                               |
//+------------------------------------------------------------------+
int start()
{
   int limit = Bars - IndicatorCounted();
   if(limit == Bars) limit -= InpKijun+InpSenkou-1;
   for (int i =limit -1; i>=0; i--)
   {
        tenkan[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpTenkan, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpTenkan, i)]) / 2.0 ;
        kijun[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpKijun, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpKijun, i)]) / 2.0 ;
        senkouA[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpKijun, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpKijun, i)] + High[iHighest(NULL, 0, MODE_HIGH, InpTenkan, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpTenkan, i)]) / 4.0 ;
        senkouB[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpSenkou, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpSenkou, i)])/2.0 ;
        senkouAL[i] = senkouA[i] ;
        senkouBL[i] = senkouB[i] ;
        chikou[i] = Close[i];
     }

   return(0);
}
//+------------------------------------------------------------------+

関連記事

一目均衡表(関数版)

一目均衡表のずれ(26と25)

###

一目均衡表のずれ(26と25)

マーフィーの最強スパンモデルFX投資法 マーフィーの最強スパンモデルFX投資法
柾木 利彦
日本実業出版社 2010-12-16
売り上げランキング : 46055
Amazonで詳しく見る
by G-Tools

 

上の本を読んでいたら、「MetaTrader4 での一目均衡表(Ichimoku.ex4 )は本来の一目均衡表とは1本ズレているので、パラメーターの InpKijun を 26 から 25 にしろ」と書いてありました。

一目均衡表では「当日を含めて26日ずらす」と書いてあるので、25ずらすのが正解なのです。

「MetaTrader4 での一目均衡表(Ichimoku.ex4 )は本来の一目均衡表とは1本ズレている」のは正しいです。

でも後半の「パラメーターの InpKijun を 26 から 25 にしろ」は間違いでしょう。

Ichimoku.mq4 のソースを読むと、そうしてしまうと基準線や先行スパンA の計算値自体が狂ってしまうからです。

InpKijun は 26 のままで、

  1. SetIndexShift(2,InpKijun);⇒SetIndexShift(2,InpKijun-1);
  2. SetIndexShift(3,InpKijun);⇒SetIndexShift(3,InpKijun-1);
  3. SetIndexShift(4,-InpKijun);⇒SetIndexShift(4,-InpKijun+1);
  4. SetIndexShift(5InpKijun);⇒SetIndexShift(5,InpKijun-1);
  5. SetIndexShift(6,InpKijun);⇒SetIndexShift(6,InpKijun-1);

 

の5ケ所を変更しないといけないと思います。

もっとも柾木さんの記述はスパンモデルのもので、オリジナルの一目均衡表のものではありません。

それともスパンモデルの先行スパンAは一目均衡表の先行スパンAとは計算方法が違うというのでしょうか?

*

ともあれ、MetaTrader4 での一目均衡表(Ichimoku.ex4 )は修正すべきですね。

以前の記事「一目均衡表(関数版)」のも変更しておきました。

関連記事

一目均衡表(関数版)

###

METROというインディケーター

ネットで配布されている METRO という無料のインディケーターがあります。

ダウンロード> METRO.mq4

サブウィンドゥの3本の線で構成されているのが METRO インディケーターです。

RSI を元にした指標のようですが、水色と紫色のラインのクロスで売買できそうです(茶色は RSI)。

ということで、EA にしてみました。

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

最適化しなくても結構いい感触ですね。

RSI というオシレーターを元にしている割にはトレンド相場に強いという、ちょっと意外な性格のようです。

プログラムソース

//
// yasciiMETRO01.mq4

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

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

//---- input parameters

extern int PeriodRSI=14;
extern int StepSizeFast=5;
extern int StepSizeSlow=15;
extern int Fast_period = 14;

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

int start()
  {

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

     double index1 = iCustom(NULL, 0, "METRO", PeriodRSI, StepSizeFast, StepSizeSlow, 1, 1);
     double index2 = iCustom(NULL, 0, "METRO", PeriodRSI, StepSizeFast, StepSizeSlow, 2, 1);
     double index1p = iCustom(NULL, 0, "METRO", PeriodRSI, StepSizeFast, StepSizeSlow, 1, 2);
     double index2p = iCustom(NULL, 0, "METRO", PeriodRSI, StepSizeFast, StepSizeSlow, 2, 2);

     double FastHH2 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
     double FastLL2 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

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

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

   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();
   if(  (index1 < index2 ||OOPL - lc*Point >= Close[1] || Close[1] < FastLL2 )  
       && ( 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(   (index1 > index2 || OOPS + lc*Point <= Close[1] || Close[1] > FastHH2 ) 
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(  index1 >= index2 && index1p < index2p
       && ( 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(  index1 <= index2 && index1p > index2p 
       && ( 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);
  }

 

###

リアルタイムクラウドフィルタ

昨日の記事「一目均衡表(関数版)」で、リアルタイム雲(時間がずれていない雲)のフィルタを作る方法に触れましたが、

 

   double high_value9 = High[iHighest(NULL, 0, MODE_HIGH, 9, 1)];
   double low_value9 = Low[iLowest(NULL, 0, MODE_LOW, 9, 1)];
   double high_value26 = High[iHighest(NULL, 0, MODE_HIGH, 26, 1)];
   double low_value26 = Low[iLowest(NULL, 0, MODE_LOW, 26, 1)];
   double high_value52 = High[iHighest(NULL, 0, MODE_HIGH, 52, 1)];
   double low_value52 = Low[iLowest(NULL, 0, MODE_LOW, 52, 1)];

   double tenkan = (high_value9 + low_value9) / 2.0 ;
   double kijun = (high_value26 + low_value26) / 2.0 ;
   double senkouA = (tenkan + kijun) / 2.0 ;
   double senkouB = (high_value52 + low_value52) / 2.0 ;

 

と書きますと、senkouA と senkouB がリアルタイム雲(26個分ずらす前の雲)に相当します。

売買条件のときに、 if(Close[1] > senkouA && Close[1] > senkouB && ・・・)

などと書けばいいのですね。

ちなみに普通の(一目均衡表の)雲は下のように書けます。こう書いただけですでに 26個分ずれています。

    double senkouA = iIchimoku( NULL, 0, 9, 26, 52, 3, 1);
    double senkouB = iIchimoku( NULL, 0, 9, 26, 52, 4, 1);

これらからリアルタイム雲を作ってもいいです。ずらす方向を間違えないようにね。

関連記事

###

一目均衡表(関数版)

MetaTrader4 に付属している一目均衡表のソースを見てみるとずいぶん複雑なので、関数を使って簡単に記述し直してみました。

書き換えたのはほとんど start 関数だけです(バッファ名も長いので変えましたけど)。

これをちょっと変えるとリアルタイム雲のフィルタが簡単に作れます。

プログラムソース

//+------------------------------------------------------------------+
//|              一目均衡表(関数版)          yasciiIchimoku01.mq4 |
//+------------------------------------------------------------------+

#property strict

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Red          // Tenkan-sen
#property indicator_color2 Blue         // Kijun-sen
#property indicator_color3 SandyBrown   // Up Kumo
#property indicator_color4 Thistle      // Down Kumo
#property indicator_color5 Yellow         // Chikou Span
#property indicator_color6 SandyBrown   // Up Kumo bounding line
#property indicator_color7 Thistle      // Down Kumo bounding line
//--- input parameters
input int InpTenkan=9;   // Tenkan-sen
input int InpKijun=26;   // Kijun-sen
input int InpSenkou=52;  // Senkou Span B
//--- buffers
double tenkan[];
double kijun[];
double senkouA[];
double senkouB[];
double chikou[];
double senkouAL[];
double senkouBL[];
//---
int    ExtBegin;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(void)
  {
   IndicatorDigits(Digits);
//---
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,tenkan);
   SetIndexDrawBegin(0,InpTenkan-1);
   SetIndexLabel(0,"Tenkan Sen");
//---
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,kijun);
   SetIndexDrawBegin(1,InpKijun-1);
   SetIndexLabel(1,"Kijun Sen");
//---
   ExtBegin = InpKijun;
   if(ExtBegin < InpTenkan) ExtBegin = InpTenkan;
//---
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
   SetIndexBuffer(2,senkouA);
   SetIndexDrawBegin(2,InpKijun+ExtBegin-1);
   SetIndexShift(2,InpKijun-1);
   SetIndexLabel(2,NULL);
   SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(5,senkouAL);
   SetIndexDrawBegin(5,InpKijun+ExtBegin-1);
   SetIndexShift(5,InpKijun-1);
   SetIndexLabel(5,"Senkou Span A");
//---
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
   SetIndexBuffer(3,senkouB);
   SetIndexDrawBegin(3,InpKijun+InpSenkou-1);
   SetIndexShift(3,InpKijun-1);
   SetIndexLabel(3,NULL);
   SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(6,senkouBL);
   SetIndexDrawBegin(6,InpKijun+InpSenkou-1);
   SetIndexShift(6,InpKijun-1);
   SetIndexLabel(6,"Senkou Span B");
//---
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,chikou);
   SetIndexShift(4,1-InpKijun);
   SetIndexLabel(4,"Chikou Span");
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo                                               |
//+------------------------------------------------------------------+
int start()
{
   int limit = Bars - IndicatorCounted();
   if(limit == Bars) limit -= InpKijun+InpSenkou-1;
   for (int i =limit -1; i>=0; i--)
   {
        tenkan[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpTenkan, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpTenkan, i)]) / 2.0 ;
        kijun[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpKijun, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpKijun, i)]) / 2.0 ;
        senkouA[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpKijun, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpKijun, i)] + High[iHighest(NULL, 0, MODE_HIGH, InpTenkan, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpTenkan, i)]) / 4.0 ;
        senkouB[i] = (High[iHighest(NULL, 0, MODE_HIGH, InpSenkou, i)] + Low[iLowest(NULL, 0, MODE_LOW, InpSenkou, i)])/2.0 ;
        senkouAL[i] = senkouA[i] ;
        senkouBL[i] = senkouB[i] ;
        chikou[i] = Close[i];
     }

   return(0);
}
//+------------------------------------------------------------------+

###

ふるさと納税初めてやってみた

住民税だけでも毎月20万円以上払っていますが、大津市はなんの見返りもくれません。

それどころかうちのマンションの排水管を壊したのに弁償もせず、恨み骨髄です。

そこで仕返しのためにふるさと納税をやることにしました。

ふるさと納税=ふるさとでなくても寄付

納税と言ってもじつは寄付金です。

でも寄付をすることで納めた税金が戻ってくるので、納税と同じ(納める方ももらう方も)です。

今より 2000円多く払うことでたくさんの見返りがもらえるのですから、やらなきゃソン。

食品をもらえばその分食費が浮くので節約にもなります。

詳しくはこちらを> ふるさと納税ポータルサイト

初めてのふるさと納税

ということで、まず手始めにパソコン。

長野県飯山市がやっています。

価格.com で最安値 64584円 のマウスコンピューター製 LuvMachines Lm-iH301S(ただし Windows7搭載)がよかろうと。

これとはちょっと異なる飯山市用スペシャルモデルはこちら(若干グレードアップされています)。

LM-iH301S-IIYAMA

  • ・OS Windows 8.1 Update 64ビット
    ・CPU インテルCore i5-4590プロセッサー(4コア/3.30GHz/TB時最大3.70GHz/6MBキャッシュ

    ・CPUファン LGA 1150用CPU FAN

    ・CPUグリス 標準CPUグリス

    ・メモリ 8GBメモリ(4GB×2 DDR3 SDRAM PC3-12800)/デュアルチャネル

    ・HDD 500GB 7200rpm(6Gbps対応)

    ・グラフィック機能 インテルHD グラフィックス4600

    ・光学ドライブ DVDスーパーマルチドライブ

    ・マザーボード インテルH81 Expressチップセット(MicroATX)

    ・ケース ミニタワーデスクトップ(ブラック/フロントUSB2.0対応)

    ・電源 350W電源

    ・LAN オンボード10/100/1000BASE-T GigaBit-Ethernet LAN

    ・サウンド ハイデフィニション・オーディオ

    ・キーボード 標準オリジナルキーボード(USB有線/102日本語キー/ブラック)

    ・マウス 標準オリジナルマウス(USB有線/オプティカル/スクロール機能付き3ボタン/ブラック)

    ・サポート 1年間センドバック修理保証※1か月間初期不良対応を含む

実は使い回しのできる筐体(ケース)が以前から改造用にほしかった(最近のデル製は裏のパネルがはずれずマザーボード交換がしにくい)のですが、これにはもちろん中身もついています。^^

10万円の寄付が必要ですが、来年 98000円が返ってくるので、結局 2000円なわけで。

いつ届くか楽しみです。

*

次は液晶モニタ、米、カニ、肉、果物、ワイン、ラーメンといきますかね。

###

FX最強チャート GMMAの真実 / 陳 満咲杜 (3)

FX最強チャート GMMAの真実 FX最強チャート GMMAの真実

陳 満咲杜

扶桑社 2012-06-29

売り上げランキング : 79239

Amazonで詳しく見る

by G-Tools

★★★★★(中級者の指南書としては最適)

以前紹介した GMMA というチャートについてですが、こういうものです。

 

赤い6本の移動平均線(EMA)と青い6本の移動平均線(EMA)をそれぞれ投機筋と投資筋にみたてて、それらのクロスで売買します。

エッセンスだけを EA にしてみました。

こんなシンプルなものでも、ドル円、ポンド円、豪ドル円、NZドル円の1時間足では利益が出ます。

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

最大ドローダウンが大きいので改良が必要ですね。

移動平均線のクロスという定石通りなので、トレンド相場では強いのは当たり前ですけどね。

関連記事

プログラムソース

//
// yasciiGMMA01
//

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

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

extern int MA_Period1 =3;
extern int MA_Period2 =60;

extern double ILC = 15.0 ;
//extern double TP = 240.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;

int start()
  {

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

   double ema3 = iMA( NULL, 0, MA_Period1, 0, MODE_EMA, PRICE_CLOSE, 1);
   double ema3s = iMA( NULL, 0, MA_Period1, 0, MODE_EMA, PRICE_CLOSE, 2);
   double ema60 = iMA( NULL, 0, MA_Period2, 0, MODE_EMA, PRICE_CLOSE, 1);
   double ema60s = iMA( NULL, 0, MA_Period2, 0, MODE_EMA, 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( (ema3 < ema60 || Close[1]< OOPL - lc*Point)
      && (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( (ema3 > ema60 || Close[1] > OOPS + lc*Point)
       && (Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   
    
   //買いエントリー
   if( ema3 > ema60 && ema3s < ema60s && ema60 > ema60s
       && ( 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( ema3 < ema60 && ema3s > ema60s && ema60 < ema60s
       && ( 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);
  }

###

一目均衡表の教えてくれるもの

FX の話です。

株の世界から導入された一目均衡表ですが、最近勉強し直してみると実に多くのウロコが目から飛び出してきます。

同時に足下がグラグラ崩れてきたりもします。

終値は使わない

一目均衡表では終値でなく、高値と安値とその半値を使用します。

今まで EA(expert advisor)という自動売買プログラムを作ってきました。ほとんどすべて終値をベースにしています。

でも終値というのはサーバーの時間が 1秒ずれただけで変わってしまうわけですよね。

こんなアバウトなもので判断したり、それで作った指標をアテにしていいのかと思ってしまいます。

一目均衡表ではある期間中の高値と安値を使いますから、多少サーバーの時間がずれようとほとんど変化がありません。

機械の都合で変わる終値より、人間心理で変わる高値、安値のほうが信用できるわけですもんね。

うーん、EA 全部作り直しかも?

終値を半値に置き換えるだけなら簡単なんですが、検証のやり直しが・・・

###

アンディさんのリアルタイム雲(2)

前回の記事「アンディさんのリアルタイム雲」で紹介したリアルタイム雲 ですが、本日ちょっと使ってみたところ、なかなかいい感触でトレードできました。

一目均衡表と違い、たえず分厚いサポートの雲がローソク足の近くにあるので、損切りやトレールが早くできるのが魅力です。

その分、一目均衡表よりハラハラするのですが。

さらに研究を進めましょう。

最終的には EA に組み込んでいきたいです。

本日の結果

エントリ B/S lots 通貨 約定値 決済 約定値 損益$
02:44:07 sell 1 usdjpy 118.888 06:48:12 118.59 251.27
04:00:01 sell 1 usdjpy 118.936 08:15:30 118.6 283.29
08:00:04 sell 1 usdcad 1.24908 10:00:00 1.25175 -213.35

最後に慣れない米ドル/加ドルに手を出したら(私ではなくEAが勝手にエントリしたのです)いきなり逆行して痛い目にあいましたが、 魔の金曜日の東京時間にしては差し引き 321.21ドルのプラスとなったのでよしとしましょう。

○○カタさんふうに言うと「かくにん、よかった」でしょうか。

関連記事

###

アンディさんのリアルタイム雲

 

上が一目均衡表で、雲は26本先行しています。

下は有名なトレーダーのアンディさんのリアルタイム雲で、先行していないのが特徴です。

>アンディの FX BLOG

移動平均線っぽい使い方をするならこれもありです。

レジスタンスやサポートとしての力もありそうですから、ストップの目安としても使えそうです。

リアルタイム雲の表示のしかた

Ichimoku.mq4 を kumo.mq4 として別名保存してから、Metaeditor で開き、

void OnInit(void) セクションの中の次の4行を書き換えるだけです。

  • SetIndexShift(2,InpKijun); ⇒ SetIndexShift(2,0);
  • SetIndexShift(5,InpKijun); ⇒ SetIndexShift(5,0);
  • SetIndexShift(3,InpKijun); ⇒ SetIndexShift(3,0);
  • SetIndexShift(6,InpKijun); ⇒ SetIndexShift(6,0);

 

書き換えたら保存してください。

関連記事

【FX】アンディさんのリアルタイム雲 (3)

 

###

アンディさんのリアルタイム雲

  上が一目均衡表で、雲は26本先行しています。 下は有名なトレーダーのアンディさんのリアルタイム雲で、先行していないのが特徴です。 >アンディの FX BLOG 移動平均線っぽい使い方をするならこれもありです。 レジスタンスやサポートとしての力もありそうですから、ストップの目安としても使えそうです。

リアルタイム雲の表示のしかた

Ichimoku.mq4 を kumo.mq4 として別名保存してから、Metaeditor で開き、 void OnInit(void) セクションの中の次の4行を書き換えるだけです。
  • SetIndexShift(2,InpKijun); ⇒ SetIndexShift(2,0);
  • SetIndexShift(5,InpKijun); ⇒ SetIndexShift(5,0);
  • SetIndexShift(3,InpKijun); ⇒ SetIndexShift(3,0);
  • SetIndexShift(6,InpKijun); ⇒ SetIndexShift(6,0);
  書き換えたら保存してください。

関連記事

【FX】アンディさんのリアルタイム雲 (3)   ###]]>

FX 2015年2月第2週デモ口座運用状況

2/09 09:45:10 buy 1 usdjpy 118.982 2/09 10:02:18 118.9 -68.97
2/09 15:09:24 sell 1 eurjpy 133.771 2/09 15:56:10 133.961 -160.22
2/10 02:58:19 sell 1 usdjpy 118.448 2/10 07:31:42 118.522 -62.44
2/10 03:00:28 buy 1 audusd 0.78078 2/10 04:00:23 0.78165 87
2/10 04:00:23 buy 1 audusd 0.78181 2/10 05:38:05 0.78299 118
2/10 09:00:15 buy 1 usdjpy 118.571 2/10 15:48:52 119.394 689.26
2/10 15:30:15 buy 1 usdjpy 119.55 2/11 05:35:09 119.552 1.68
2/10 16:00:01 buy 1 eurjpy 134.98 2/10 16:02:13 135.043 52.74
2/10 17:06:35 buy 1 audjpy 92.717 2/11 11:17:18 92.81 77.7
2/11 03:30:25 buy 1 usdjpy 119.538 2/11 05:35:02 119.541 2.5
2/12 03:00:02 sell 1 audjpy 92.077 2/12 04:18:39 91.953 103.26
2/12 04:00:00 sell 1 usdjpy 120.014 2/12 04:17:54 120.083 -57.46
2/12 05:13:10 buy 1 usdjpy 120.278 2/12 05:28:28 120.278 0
2/12 07:00:30 buy 1 usdjpy 120.296 2/12 08:04:05 120.245 -42.42
2/12 07:44:18 buy 1 usdjpy 120.308 2/12 08:04:05 120.245 -52.39
小計 688.24

今週は VPS で運用している口座がときどき勝手に落ちていたのでデータがボロボロ。

VPS は使わずに裁量で運用している口座のほうを紹介します。

  1. EA でエントリして、ストップ、リミットを手動で設定
  2. 手動(一目均衡表で判断)でエントリして、ストップ、リミットを手動で設定

という2つの方法で行っています。

この口座は利益を得るためでなく、手法の研究目的で運用しています。

*

EA にエントリさせるのはラクチンでいいです。

放置しても勝手に決済してくれるのですが、仕事の合間にときどき見て、ストップをトレールしたりしています。

裁量をからめているわけですが、けっこう勉強になったり、新しいアイディアが浮かんだりするので、やめられません。

###

HL Band(High Low Band) について

チャートでは HL Band というのをよく使います。

High Low Band の略で、ある期間の高値と低値とを抽出してバンド幅にするのです。

そのバンド幅を越えたら決済したりエントリしたり、というふうに活用します。

MetaTrader4 での実装方法では、

double HH2 = Low[iHighest(NULL, 0, MODE_CLOSE, N, 2)];

double LL2 = High[iLowest(NULL, 0, MODE_CLOSE, N, 2)];

というように記述します。

説明

double は実数としての宣言で、HH2、LL2 は変数名(任意)です。

Low[]、High[] というのは予約された配列で、それぞれ低値と高値を示します。

iHighest()、iLowest() というのは関数で、それぞれ決められた期間中の最高値と最低値の位置を返します。

関数の引数のうち、MODE_CLOSE は終値を示す予約定数です。

MODE_OPEN、MODE_HIGH、MODE_LOW でそれぞれ始値、高値、低値を示します。

ちなみに他の関数では PRICE_CLOSE と、アタマに PRICE がくるのに、こいつは MODE なのでよく間違います。

つまり、iHighest(NULL, 0, MODE_CLOSE, N, 2) は、現在の2本前から N 本分の終値の中から最も高いものの位置を示します。

その位置を Low[] に代入して実際の低値を出しているわけです。

たとえばこの値を 1本前の終値と比べるには、

if(Close[1] < HH2)・・・

などとすればいいわけです。

HL Band は人さまざま

上に述べたものがすべてではなく、

double HH2 = Low[iHighest(NULL, 0, MODE_CLOSE, N, 2)];

の代わりに、

  1. double HH2 = Close[iHighest(NULL, 0, MODE_CLOSE, N, 2)];
  2. double HH2 = High[iHighest(NULL, 0, MODE_CLOSE, N, 2)];
  3. double HH2 = Low[iHighest(NULL, 0, MODE_LOW, N, 2)];
  4. double HH2 = Low[iHighest(NULL, 0, MODE_HIGH, N, 2)];
  5. double HH2 = High[iHighest(NULL, 0, MODE_LOW, N, 2)];
  6. double HH2 = High[iHighest(NULL, 0, MODE_HIGH, N, 2)];

などもアリです。

それぞれ意味するものが違うわけですが、どういう意味になるか下のチャートにあてはめて考えてみてください。

###

平均足+バンドウォーク EA(1)

昔からよく”聖杯”と言われている、バンドウォークに飛び乗るトレンドシステムの研究です。

ADX30以上をフィルタにしている本もありますが、とりあえず簡単に始めてみます。

買いエントリ(下のすべての条件を満たす)

  1. EMA5:上向き
  2. 平均足:最低3本の陽線が連続し、その終値がボリンジャーの1σを上回る

売りエントリ(下のすべての条件を満たす)

  1. EMA5:下向き
  2. 平均足:最低3本の陰線が連続し、その終値がボリンジャーの -1σを下回る

決済(下のいずれかの条件を満たす)

  1. HLバンドトレーリングストップ
  2. 逆の平均足が2本連続

結果

うまく売買が行われているようです。

平均足の終値ですのでボリンジャーの2σを越えることはまれで、特にこの期間では全くないようです(高値にしますと 2σをよく逸脱すると思います)。

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

トレンドのない期間はさっぱりですし、あまり成績はよくありませんが、これから改良に努めます。

プログラムソース

//
// yasciiSayHi01
// 

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

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

extern int Fast_period = 14 ;
extern int BB_Period=20;
extern int MA_Period = 5 ;
double Deviation = 1.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;

int start(){

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

       double HA_open1 = ( Open[2] + Close[2] ) / 2.0 ;
       double HA_close1 = ( Open[1] + Close[1] + High[1] + Low[1] ) / 4.0 ;
       double HA_open2 = ( Open[3] + Close[3] ) / 2.0 ;
       double HA_close2 = ( Open[2] + Close[2] + High[2] + Low[2] ) / 4.0 ;
       double HA_open3 = ( Open[4] + Close[4] ) / 2.0 ;
       double HA_close3 = ( Open[3] + Close[3] + High[3] + Low[3] ) / 4.0 ;

     double bbp1 = iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 1, 1) ;
     double bbm1 = iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 2, 1) ;

     double FastHH2 = Low[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
     double FastLL2 = High[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

     double ema5 = iMA(NULL, 0, MA_Period, 0, MODE_EMA, PRICE_CLOSE, 1) - iMA(NULL, 0, MA_Period, 0, MODE_EMA, PRICE_CLOSE, 2);

   //買いポジションのエグジット
    OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);
    OOPL = OrderOpenPrice();
    if( 
            (Close[1] < FastHH2 || (HA_open1 > HA_close1 && HA_open2 > HA_close2)) //bbw1 < bbw2)
            && ( Ticket_L != 0 && Ticket_L != -1 ))
    {   
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }  

   //売りポジションのエグジット
     OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
     OOPS = OrderOpenPrice();
   if(  
          (Close[1] > FastLL2 || (HA_open1 < HA_close1 && HA_open2 < HA_close2)) //bbw1 < bbw2)
          && ( Ticket_S != 0 && Ticket_S != -1 ))
    {   
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    } 

   //買いエントリー
   if( ema5 > 0 
       && HA_open1 < HA_close1 && HA_open2 < HA_close2 && HA_open3 < HA_close3 
       && HA_close1 > bbp1 && HA_close2 > bbp1 && HA_close3 > bbp1
       && ( 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,Red);
    }

   //売りエントリー
   if( ema5 < 0 
       && HA_open1 > HA_close1 && HA_open2 > HA_close2 && HA_open3 > HA_close3 
       && HA_close1 < bbm1 && HA_close2 < bbm1 && HA_close3 < bbm1
       && ( 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,Blue);   
    }

   return(0);

  }

###

超シンプルな自動売買プログラム ボリ平ドラゴン式 (その2)

以前ここで「超シンプルな自動売買プログラム(2) ボリ平ドラゴン式」でとりあげた ボリ平ドラゴン式 ですが、少し改良してみました。

といっても、固定ロスカットや固定プロフィット、HLバンドトレーリングストップなどを加えただけですが。

若干よくなったのですが、問題が明確に見えてきました。

*

この方法は ZAi FX! の記事「ネットでウワサの「ボリ平ドラゴン式」。」でも紹介されていますが、一目均衡表の遅行線をドラゴンと呼び、そのドラゴンが上昇してボリンジャーバンドの3σを上抜けば買い、下行してボリンジャーバンドの-3σを下抜けば買い、とするものです。

一目均衡表では補助的に使われる遅行線は最もタイミング的には遅いシグナルを出します。

しかもプラスマイナス3σを超えるというハードな条件を設定しているために回数も減少します。

タイミングが遅れる、ハードな条件ということでダマシを減らしているつもりでしょうが、その分エントリの遅れ、利益確定の遅れが生じ、利益をとりこぼす懸念があります。

*

EA にしてやってみますと、ボリ平さんはスキャルピングでお使いということですが、昨年のデータでは日中足ではほとんど利益が出ません。

いろいろ改良したのですが、ドル円の日足でしかまともな利益になりませんでした。

ドル円日足 2014/1/1 – 2015/1/1

チャートを見ると、売買での利益はほとんどが8月から年末までの上昇(円安)相場で得たものです。

この時期はほぼ一方調子の上昇過程なので、ドラゴン(遅行線)がボリンジャーバンドの +3σを上抜いている期間が多いわけです。だから利益になっているということ。

言い換えると、こういう展開が少なければ儲からないわけですし、こういう相場なら他の EA の方が効率的に儲かるものが多いです。

短い日中足で使うと売買回数はうんと多くなりますが、総損益はマイナスになってしまいます。

その理由はダマシが多くて勝率が低下することと、利益確定が早すぎて勝ったときの充分な利益が得られていないことによるのではないかという印象です。

 

ボリ平ドラゴン式 にはこれとは違う逆張り方式もありますが、タイミングの遅れがさらに響きそうで、得られる利益も少なく、勝率も悪そうなので検証していません。

関連記事

超シンプルな自動売買プログラム(2) ボリ平ドラゴン式

 

プログラムソース

//
// yasciiSimple08
// ボリ平ドラゴン式(2)
//

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

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

extern int Fast_period =10;
int deviation = 3;
extern int MA_period = 20;

extern double ILC = 20.0 ;
extern double TP = 240.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;

int start()
  {

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

   double bollp3 = iBands( NULL, 0, MA_period, deviation, 0, PRICE_CLOSE, 1, 26);
   double bollm3 = iBands( NULL, 0, MA_period, deviation, 0, PRICE_CLOSE, 2, 26);

   double FastHH2 = Low[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
   double FastLL2 = High[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

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

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

   //買いエントリー
   if( Close[1] > bollp3
       && ( 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( Close[1] < bollm3
       && ( 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);
  }

###

超シンプルな自動売買プログラム(8) 3点チャージ変法

3点チャージ法という明地文男さんの開発した株式投資法があります。

昔ちょっと利用したことがあります。

大きく下げたときの買い(グランビルの”買い4”ですかね)を行う逆張り法です。

買いの条件は次の通りです。

・ 26日移動平均線からの乖離率 ≦ -15%

・ 14日 RSI ≦ 25

・ 25日ボリュームレシオ ≦ 70

売りの条件は

・ 26日移動平均線からの乖離率 ≧ -15%

・ 14日 RSI ≧ 70

・ 25日ボリュームレシオ ≧ 250

とします。

これを FX に応用しようと思ったのですが、FX では出来高がないのでボリュームレシオが計算できません。

ティックで代用するのも正確でありません。

どうせなので、この前作った Chande’s Momentum Oscillator シャンデ・モメンタム・オシレーター (CMO) を使わせていただくことに。

CMO が 30以下、70以上というふうに代用することにします(適正値はバックテストでも出しましたが大きく変わらないのでこの値を採用)。

*

もう一つ問題が。

乖離率が 15% を超えるなんて事態は FX では起こりません。国家倒産とか起これば別ですが。

そこで乖離率は可変にしてバックテストで適正値を決めることにしました。

*

さらにもう一つ問題が。

決済条件は任意ということで、決められておりません。

しょうがないので固定ロスカット、固定プロフィット、HLバンドトレーリングストップでやってみることにします。

固定ロスカット、固定プロフィットは影響がないようですが、念のため残しました。

乖離率が 1/3 になるくらいまでとかのほうがいいかもしれないと思ったので、それも加えました。

*

これらを組み込んで、EA を自作してみました。

次のようなところで売買が発生します。うまくいっているようです。

結果 ドル円 30分足 2014/1/1 – 2015/1/1

プロフィットファクターや勝率はそこそこいいです。

他の通貨ペアもやってみましたが、どうも金額的にはたいしたことになりません。

逆張りなのでどかんとは稼げないのはわかっていますが・・・

最大ドローダウンは低いのですが、取引数が少ないことが問題でしょうね。

2014/4/9 から 2014/10/14 まで全く売買がないです。このような”逆張り好機”がそんなに訪れないのが原因でしょう。

株なら銘柄数がFXよりはるかに多いので取引回数が多くなるでしょうから、株では非常に有効なのでしょうが。

プログラムソース

//
// yasciiSimple07
// 3点チャージ法
// cmo_s.mq4 が必要

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

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

extern int MA_period = 26;
extern int RSI_period = 14;
extern int Fast_period =10;

extern bool LastBarOnly = false; 
extern int  CMO_Range   = 25; 
extern int  Sig_Period =9;

extern double kai1level = 1.9 ;
extern double kai2level = -0.6 ;

extern double ILC = 20.0 ;
extern double TP = 40.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;

int start()
  {

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

   double sma26 = iMA( NULL, 0, MA_period, 0, 0, PRICE_CLOSE, 1) ;
   double kairi1 = 100.0 * (Close[1] - sma26) / sma26 ;
   double rsi14 = iRSI( NULL, 0, RSI_period, PRICE_CLOSE, 1) ;
   double cmo25 = iCustom( NULL, 0, "cmo_s" , LastBarOnly , CMO_Range , Sig_Period , 0, 1 ) ;

   double FastHH2 = Low[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
   double FastLL2 = High[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

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

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();   
   if( (Close[1] < OOPL - lc*Point || Close[1] > OOPL + tp*Point || Close[1] < FastHH2 || kairi1 > kai2level /3.0)
      && (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( (Close[1] > OOPS + lc*Point || Close[1] < OOPS - tp*Point || Close[1] > FastLL2 || kairi1 < kai1level /3.0
)
       && (Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if( kairi1 <= kai2level && rsi14 <= 25.0 && cmo25 <= 30.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( kairi1 >= kai1level && rsi14 >= 70.0 && cmo25 >= 70.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);
  }

###

超シンプルな自動売買プログラム(7) はらみ線(はらみ足)

超シンプルな自動売買プログラムとして、日本古来のローソク足での定番「はらみ足」を利用したものをご紹介します。

孕石(はらみいし)は女性の間では有名ですが、はらみ足(はらみ線)とは1本前のローソク足の実体の中に次の足の実体が含まれるもの。

ラリー・ウィリアムズも信奉しているくらいポピュラーなものです。

はらみ足のうち、「陽の陰はらみ」と「陰の陽はらみ」を売買シグナルにした EA を作ってみました。

そのままだと成績がいまいちなので、「陰の陽はらみ」では「その前が陰線」、「陽の陰はらみ」には「その前が陽線」という前提を加えたところ、いい結果に。

決済条件は損切り 20pips固定、利益確定 40pips固定のみとしました。

ドル円 5分足(2014/1/1 – 2015/1/1)

 

え、「たいしたことないじゃないか」って?

いえ、私が気に入っているのは、

  1. 5分足という短い時間足であること
  2. グラフの前半のドル円相場がトレンドでない時期にもそこそこ稼げている
  3. むしろ後半の強い上昇トレンドでは成績がふるわない

という、これまで私の作ってきた EA とは真逆の性格を持っているからです。

もうちょっと研究してみます。

ちなみに、損切り 50pips、利益確定 420pips とすると、下のように売買回数がぐんと少なくなりますが、最大ドローダウンをそのままに利益を伸ばせます。

ただポジションの保有時間が長くなります(最大7ヶ月)。

プログラムソース

//
// yasciiSimple06
// はらみ足
//

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

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

extern double ILC = 20.0 ;
extern double TP = 40.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;

int start()
  {

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

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

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

   //買いエントリー
   if( Close[1] > Open[1] && Close[2] < Open[2] && Close[3] < Open[3] && Close[3] > Close[2]
       &&  Close[2] < Open[1] && Open[2] > Close[1]
       && ( 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( Close[1] < Open[1] && Close[2] > Open[2] && Close[3] > Open[3] && Close[3] < Close[2]
       &&  Close[2] > Open[1] && Open[2] < Close[1]
       && ( 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);
  }

###

2015年2月アメリカ雇用統計

昨日のドル円相場です。

すごいでしょ。昇り龍みたいですね。

第一金曜日の夜は毎月恒例のアメリカ雇用統計の発表です。

NHKによると、

6日のニューヨーク外国為替市場は、この日発表された先月のアメリカの雇用統計で市場が注目していた農業分野以外の就業者の数が市場の予想を上回ったことから、雇用環境は順調に改善しているという受け止めが広がりました。
このためドルを買って円を売る動きが加速し、円相場は一時1ドル=119円23銭をつけ、統計の発表前と比べておよそ2円値下がりしました。

ということで、私はウォッチしておりませんでしたが、いつも以上の過熱ぶり。

値幅もすごいが、いつも見られる「揺り戻し」がほとんどなかったですね。

値幅がすごいのはそれまで 2週間くらいがほぼフラットな状態で、売り買い均衡しており、エネルギーも邪念もたまりにたまっていたからでしょう。

サブウィンドゥは自作の BBW ratio ですが、シグナルを下抜けた時点で利益確定というセオリーがここでも有効のようです。

*

自作の自動売買ソフト(EA) たちがどんな反応を見せたかというと、なんと VPS が止まっていたのです。

今借りている VPS はこれまでに 10回近く MetaTrader4 が勝手に終了されていることがあり、サーバーに接続できないことさえありました。

どうも信用ならないので新しい業者を物色しています。

ヤレヤレダゼェ。

###

Chande’s Momentum Oscillator シャンデ・モメンタム・オシレーター

シャンデモメンタムオシレーター(CMO と略される)という指標が本に載っていました。

アメリカの Tushar S. Chande が発表したようで、オシレーター系指標の一つです。

CMOの計算式は次のようになります。

CMO(N) = (CMO1 – CMO2) ÷ (CMO1 + CMO2) × 50 + 50

N = 指標の設定期間

CMO1 = N日間で前日比プラスとした日の値幅合計

CMO2 = N日間で前日比マイナスとした日の値幅合計

RSI(相対力指数)と似ています。

RSIと異なり、値幅を評価しているのでトレンドの強弱を知ることができるのが強みです。

ネットに転がっている CMO はシグナルのない1本線で、スケールも -100~100 とやや異なるので、改造してみました。

一番下のサブウィンドウが CMO です。一つ上は BBW ratio ですね。

CMO も 70 以上で買われすぎ、30以下で売られすぎ。

シグナルとクロスしたゴールデンクロス、デッドクロスは売買シグナルに使えます。

  • 70 以上でデッドクロスは売り
  • 30以下でゴールデンクロスは買い

 

です。

プログラムソース

//+------------------------------------------------------------------+
//|                          Chande's Momentum Oscillator  CMO_S.mq4 |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Orange
#property indicator_color2 Violet
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1   50

//---- input parameters
extern bool LastBarOnly = false;
extern int  CMO_Range   = 20;
extern int  Sig_Period =9;
//---- buffers
double CMO_Buffer[];
double CMO_signal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
//---- indicators
  IndicatorBuffers(2);
  IndicatorShortName("Chande`s Momentum Oscillator (" + CMO_Range + ")");
  SetLevelStyle(STYLE_DASHDOT, 1, DodgerBlue);
  SetIndexStyle(0, DRAW_LINE);
  SetIndexLabel(0, "CMO");
  SetIndexBuffer(0, CMO_Buffer);
  SetIndexDrawBegin(0, CMO_Range);
  SetIndexBuffer(1, CMO_signal);
  SetIndexDrawBegin(1, CMO_Range);
  SetIndexStyle(1, DRAW_LINE);

 //----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
 {
 //----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
   int i, j, Limit, cnt_bars;
   double dif_close, cmo_up, cmo_dw;
   static bool run_once;
   if(counted_bars < 0)
     {
       return(-1);
     }
   Limit = Bars - counted_bars;
// run once on start
   if(run_once == false)
       cnt_bars = Limit - CMO_Range;
   else
      if(LastBarOnly == false)
          cnt_bars = Limit;
      else
          cnt_bars = 0;
//----
   for(i = cnt_bars; i >= 0; i--)
     {
       cmo_up = 0.0;
       cmo_dw = 0.0;
       //----
       for(j = i + CMO_Range - 1; j >= i; j--)
         {
           dif_close = Close[j] - Close[j+1];
           if(dif_close > 0)
               cmo_up += dif_close;
           else
               if(dif_close < 0)
                   cmo_dw -= dif_close;
         }
       CMO_Buffer[i] = 50.0 +50.0 * (cmo_up - cmo_dw) / (cmo_up + cmo_dw);
     }
   for (i=cnt_bars - Sig_Period; i>=0; i--)
      {
         CMO_signal[i] = iMAOnArray(CMO_Buffer,0,Sig_Period,0,MODE_EMA,i);

      }
//----
   if(run_once == false)
       run_once = true;
//----
   return(0);
  }

###

シャフトレンドサイクルをエントリで使う

シャフトレンドサイクルをフィルタで使うととてもいい感触があるのでいろいろ改造中です。

これをエントリシグナルで使うのも捨てがたいのです。

いろいろつけますと、取引回数がどんどん減っていきますが、プロフィットファクターや勝率はなかなかいいところまでいきます。

たとえば下はシャフでエントリしているのですが、一目均衡表のルールをフィルタに使っています。

「一目均衡表のルールでエントリしてシャフでフィルタリングする」よりはいいかもしれません。

プログラムソース

//
// yasciiSB01c.mq4
// シャフでエントリ 一目をフィルタ的に適用
//

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

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

extern int Fast_period = 12 ;
extern int Slow_period = 38 ;

//---- input parameters
extern int MA_Short= 5;
extern int MA_Long = 10;
extern int MA_Cycle=5;
extern int SigPeriod=3;

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

extern double ILC = 20.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;

int start()
  {

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

   double STC1 = iCustom(NULL , 0, "Downloads\\STC_pure_S" ,  MA_Short , MA_Long , MA_Cycle , 0, SigPeriod , 0, 1) ;
   double STCSIG1 = iCustom(NULL, 0, "Downloads\\STC_pure_S" , MA_Short , MA_Long , MA_Cycle , 0, SigPeriod , 1 , 1) ;
   double STC2 = iCustom(NULL, 0, "Downloads\\STC_pure_S" , MA_Short , MA_Long , MA_Cycle , 0, SigPeriod , 0 , 2) ;
   double STCSIG2 = iCustom(NULL, 0, "Downloads\\STC_pure_S" , MA_Short , MA_Long , MA_Cycle , 0, SigPeriod , 1 , 2) ;

   if (STC1<1.0) STC1 = 0.0 ;
   if (STC2<1.0) STC2 = 0.0 ;
   if (STCSIG1<1.0) STCSIG1 = 0.0 ;
   if (STCSIG2<1.0) STCSIG2 = 0.0 ;
   if (STC1>99.0) STC1 = 100.0 ;
   if (STC2>99.0) STC2 = 100.0 ;
   if (STCSIG1>99.0) STCSIG1 = 100.0 ;
   if (STCSIG2>99.0) STCSIG2 = 100.0 ;          

   double FastHH2 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
   double FastLL2 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
   double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
   double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);
   double ten1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 1, 1);
   double kij1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 2, 1);

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

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);
   OOPL = OrderOpenPrice(); 
   if( (( (STC1 < 99.0 && STC1 < STC2 && STCSIG1 > STCSIG2)
       ||(Close[1] < FastLL2)) 
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {   
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }  

   //売りポジションのエグジット
   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
   OOPS = OrderOpenPrice();
   if(   ( (STC1 > 0.0 && STC1 > STC2 && STCSIG1 <STCSIG2) 
       || (Close[1] > FastHH2)   )
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {   
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    } 

   //買いエントリー
   if(    STC1 > 0.0 && STC1 > STC2 && STCSIG1 < STCSIG2 
       && (Close[1]> cla1 && Close[1]>clb1 && ten1 > kij1)
       && ( 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,Yellow);
    }

   //売りエントリー
   if(    STC1 < 99.0 && STC1 < STC2 && STCSIG1 > STCSIG2
       && (Close[1] < cla1 && Close[1] < clb1 && ten1 < kij1)
       && ( 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);
  }

###

2015年1月ドル円の動向(FX)

2015年1月ドル円の動向(FX)ですが、レンジ相場に入っており、私の作った EA たちも利益を上げられておりません。

まあ、トレンド相場用の EA ばかりなのでしょうがないです。

上記は4時間足ですが、このような三角保ち合いが2週間続いているのです。

それにしてもきれいなチャートです。

そろそろ上下どちらかに行きそうな気配ですが。

去年後半からの相場を日足で見てみても、大きなトレンドが 1月16日から雲の中に突入しており、”Don’t trade” 状態になっていることがわかりますね。

上に抜ける(円安促進)と上昇は続きそうですが、円高に動いた場合は下の雲は厚いのでフェイクに終わりそうな気もします。

ということで、リアル口座でのトレードはまだ行っておりません。

デモ口座で利益が上がりそうなトレンド相場が来てからの参戦です。

###

一目均衡表 改良の試み

前回の記事「超シンプルな自動売買プログラム(6) 簡単な一目均衡表」で紹介したプログラムを改良してみました。

まだロスカットはつけておりませんが、HLバンドによるトレーリングストップとシャフトレンドサイクルフィルタをつけました。

職場のPCでテストをしたらものすごくいい結果が出ましたが、帰宅してから別のPCでやると悪い結果が。

おまけにプログラムにもバグがあり、修正しましたが、結局オリジナルより悪い結果となりました。

ドル円 4時間足(2014/1/1 – 2015/1/1)

プログラムかバックテスターのミスあるいはその両方だったようです。

バグにしてももう一度現れてほしいものです。

関連記事

超シンプルな自動売買プログラム(6) 簡単な一目均衡表

プログラムソース

//
// yasciiIchimoku03
//           一目均衡表 + HL trailing stop + STC filter
//         Indicators\Downloads フォルダに STC_pure_S.mq4 を入れてください

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

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

extern int MA_Short=3;
extern int MA_Long=10;
extern int MA_Cycle=5;
int PriceType=0;
extern int SigPeriod=3;

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

//変数の設定//
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) ;

     double ten1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 1, 1);
     double kij1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 2, 1);
     double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
     double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);

     double FastHH2 = Low[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
     double FastLL2 = High[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

     double stc1 = iCustom(NULL,0,"Downloads\\STC_pure_S",MA_Short,MA_Long,MA_Cycle,PriceType,SigPeriod,0,1);
     double stc2 = iCustom(NULL,0,"Downloads\\STC_pure_S",MA_Short,MA_Long,MA_Cycle,PriceType,SigPeriod,1,1);

   //買いポジションのエグジット
    OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);
    OOPL = OrderOpenPrice();
    if( 
            ten1 < kij1 || Close[1] < cla1 || Close[1] < clb1 || Close[1] < FastHH2
            && ( Ticket_L != 0 && Ticket_L != -1 ))
    {   
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }  

   //売りポジションのエグジット
     OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
     OOPS = OrderOpenPrice();
   if(  
          ten1 > kij1 || Close[1] > cla1 || Close[1] > clb1 || Close[1] > FastLL2
          && ( Ticket_S != 0 && Ticket_S != -1 ))
    {   
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    } 

   //買いエントリー
   if( ten1 > kij1 && Close[1] > cla1 && Close[1] > clb1 && stc1 > stc2
       && ( 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,Red);
    }

   //売りエントリー
   if( ten1 < kij1 && Close[1] < cla1 && Close[1] < clb1 && stc1 < stc2
       && ( 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,Blue);   
    }

   return(0);

  }

###

超シンプルな自動売買プログラム(6) 簡単な一目均衡表

みんなが好きな 一目均衡表 は誰もが使えます。

同時にいくつものサインが重なって出ることが多いので、安心してエントリとエクシットが可能ですね。

そのエッセンスだけを自動売買ソフトに組み込んでみました。

買いエントリ

転換線が基準線を上回る & 終値が雲を上に突き抜ける

売りエントリ

転換線が基準線を下回る & 終値が雲を下に突き抜ける

決済

転換線が基準線とクロス or 終値が雲に突入

さて、結果は。

どの通貨ペアも 1時間足か 4時間足の成績がいい傾向にあります。

結果(ドル円 1時間足 2014/1/1 – 2015/1/1)

○印が売買の行われた部分。

上は資金1万$の口座で、取引ロットを10万通貨にした場合の結果ですが、ロットを1万通貨にしますと、

  • 最大ドローダウンは 14.35(%) ⇒ 2.52(%)
  • 総損益は 10235(ドル) ⇒1023(ドル)

になります。

私の作る EA の中でも まあ標準的な成績です。

ただ、これはまだロスカットもなにもつけておりません。

いろいろつけると成績はどんどん悪くなることが多いです(よくなることもありますが)。

関連記事

//
// yasciiIchimoku01
//           一目均衡表 
//   

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

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

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

//変数の設定//
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) ;

     double ten1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 1, 1);
     double kij1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 2, 1);
     double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
     double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);

   //買いポジションのエグジット
    OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET); 
    OOPL = OrderOpenPrice();
    if(  (ten1 < kij1 || Close[1] < cla1 || Close[1] < clb1)
            && ( Ticket_L != 0 && Ticket_L != -1 ))
    {    
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }   

   //売りポジションのエグジット
     OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
     OOPS = OrderOpenPrice();
   if(   (ten1 > kij1 || Close[1] > cla1 || Close[1] > clb1)
          && ( Ticket_S != 0 && Ticket_S != -1 ))
    {    
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    }  

   //買いエントリー
   if( ten1 > kij1 && Close[1] > cla1 && Close[1] > clb1
       && ( 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,Red);
    }

   //売りエントリー
   if( ten1 < kij1 && Close[1] < cla1 && Close[1] < clb1
       && ( 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,Blue);    
    }

   return(0);

  }

 

###

超シンプルな自動売買プログラム(5) MACD&RSI(続き)

稼ぐ人のFX 儲けの流儀 (超トリセツ) 稼ぐ人のFX 儲けの流儀 (超トリセツ)

バウンド

インターナショナル・ラグジュアリー・メディア 2012-03-23

売り上げランキング : 186567

Amazonで詳しく見る

by G-Tools

前回紹介した「稼ぐ人のFX」というMOOKの第一号の多田さんの手法ですが、

MACD&RSI

  1. MACD のシグナルとのクロス
  2. RSI の値(70以上で売り、30以下で買い)
  3. ローソク足のパターン

で2のRSI の値(70以上で売り、30以下で買い)を、「70以下で売り、30以上で買い」としたほうがいい成績になります。

「70以上で買い、30以下で売り」とするとちょっと驚くような結果になります。

やはり、誤植ではないのでしょうか。

ドル円の日足に最適化すると「49以上で買い、28以下で売り」がベストとなります。

ドル円日足(2014/1/1-2015/1/1)

70以上で売り、30以下で買い 30以上で買い、70以下で売り 70以上で買い、30以下で売り 49以上で買い、28以下で売り
総損益 -1695 8487 7263 11630
プロフィットファクター 0 1.83 65.31 6.97
勝率 0 51.72 85.71 50
最大ドローダウン 17.92 14.77 9.46 15.09
最大勝ち 0 7216 4279 7511
最大負け -1695 -1905 -112 -483
勝ち 0 30 6 10
負け 1 28 1 10
取引数 1 58 7 20

関連記事

超シンプルな自動売買プログラム(4) MACD&RSI

###

]]>

超シンプルな自動売買プログラム(5) MACD&RSI(続き)

稼ぐ人のFX 儲けの流儀 (超トリセツ) 稼ぐ人のFX 儲けの流儀 (超トリセツ)

バウンド

インターナショナル・ラグジュアリー・メディア 2012-03-23

売り上げランキング : 186567

Amazonで詳しく見る

by G-Tools

前回紹介した「稼ぐ人のFX」というMOOKの第一号の多田さんの手法ですが、

MACD&RSI

  1. MACD のシグナルとのクロス
  2. RSI の値(70以上で売り、30以下で買い)
  3. ローソク足のパターン

で2のRSI の値(70以上で売り、30以下で買い)を、「70以下で売り、30以上で買い」としたほうがいい成績になります。

「70以上で買い、30以下で売り」とするとちょっと驚くような結果になります。

やはり、誤植ではないのでしょうか。

ドル円の日足に最適化すると「49以上で買い、28以下で売り」がベストとなります。

ドル円日足(2014/1/1-2015/1/1)

70以上で売り、30以下で買い 30以上で買い、70以下で売り 70以上で買い、30以下で売り 49以上で買い、28以下で売り
総損益 -1695 8487 7263 11630
プロフィットファクター 0 1.83 65.31 6.97
勝率 0 51.72 85.71 50
最大ドローダウン 17.92 14.77 9.46 15.09
最大勝ち 0 7216 4279 7511
最大負け -1695 -1905 -112 -483
勝ち 0 30 6 10
負け 1 28 1 10
取引数 1 58 7 20

関連記事

超シンプルな自動売買プログラム(4) MACD&RSI

###

超シンプルな自動売買プログラム(4) MACD&RSI

稼ぐ人のFX 儲けの流儀 (超トリセツ) 稼ぐ人のFX 儲けの流儀 (超トリセツ)

バウンド

インターナショナル・ラグジュアリー・メディア 2012-03-23

売り上げランキング : 186567

Amazonで詳しく見る

by G-Tools

前回と前々回紹介した「稼ぐ人のFX」というMOOKの第一号に多田さんというトレーダーの手法が載っていました。

MACD&RSI

  1. MACD のシグナルとのクロス
  2. RSI の値(70以上で売り、30以下で買い)
  3. ローソク足のパターン

で売買シグナルとエクシットを決めるものです。

下のようにプログラムしてテストしてみましたが、さっぱりいい成績が出ませんでした(2014/1/1-2015/1/1)。

売買回数がどれもヒトケタで少なすぎます。

エントリ条件を少しゆるめてみても同じ。

どこか間違っているのでしょうか。

関連記事

超シンプルな自動売買プログラム(3) クラウドブレイク

超シンプルな自動売買プログラム(5) MACD&RSI(続き)

プログラムソース

//
// yasciiSimple04  MACD & RSI
//
//マジックナンバーの定義
#define MAGIC  42105        
//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  "Simple03"; //コメント
extern int Fast_EMA_Period1 = 6;
extern int Slow_EMA_Period1 = 19;
extern int Signal_Period1 = 6;
extern int RSI_Period = 14;
//変数の設定//
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) ;
   double MACD_Main1 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_MAIN, 1 );
   double MACD_Sign1 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_SIGNAL, 1 );
   double MACD_Main2 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_MAIN, 2 );
   double MACD_Sign2 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_SIGNAL, 2 );
   double RSI1 = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,1);
   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();   
   if( RSI1 >= 70.0 
      || MACD_Main1 < MACD_Sign1 
      || MathAbs(Close[1]-Open[1]) > 2.0*MathAbs(Open[2]-Close[2])
      || MathAbs(Close[1]-Open[1])< 0.25*MathAbs(Close[2]-Open[2])
      && (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( RSI1 <= 30.0 
      || MACD_Main1 > MACD_Sign1 
      || Close[1] >Open[1] && Close[2] >Open[2]
      || MathAbs(Open[1]-Close[1])> 2.0 * MathAbs(Open[2]-Close[2])
      || MathAbs(Close[1]-Open[1])< 0.25*MathAbs(Close[2]-Open[2])
       && (Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   
   //買いエントリー
   if( RSI1 <= 30.0 
       &&  MACD_Main1 > MACD_Sign1 && MACD_Main2 < MACD_Sign2
       && Close[1] > Open[1] && Close[2] > Open[2]
       && ( 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( RSI1 >= 70.0 
       &&  MACD_Main1 < MACD_Sign1 && MACD_Main2 > MACD_Sign2
       && Close[1] < Open[1] && Close[2] < Open[2]  
       && ( 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);
  }
  

###

超シンプルな自動売買プログラム(3) クラウドブレイク

稼ぐ人のFX 儲けの流儀 (超トリセツ) 稼ぐ人のFX 儲けの流儀 (超トリセツ)

バウンド

インターナショナル・ラグジュアリー・メディア 2012-03-23

売り上げランキング : 186567

Amazonで詳しく見る

by G-Tools

前回紹介した「稼ぐ人のFX」というMOOKの第一号に富永さんというトレーダーの手法も載っていました。

クラウドブレイク

  • 買い:平均足が雲を上抜ける
  • 売り:平均足が雲を下抜ける
  • 決済:平均足が連続して逆転したとき または 大きな実態の逆の足が出たとき

私の作った平均足システムにクラウドフィルタを適用したものとロジックは似ていますが、こちらのほうがよりシンプルで厳格です。

早速 EAに組み込んでテストしてみました。

ドル円 4時間足での成績がもっともましのようです。

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

ちなみに私の平均足+クラウドフィルター(最大ドローダウンがほぼ同じようになるようにロット数を7割に削減)では

プロフィットファクターもそうですが、取引数が大きく違いますね。それが収益に大きく関わっています。

詳しく見てみると、富永さんのクラウドブレイクでは

○印が売買ポイントと決済ポイントを示しています。

私の平均足+クラウドフィルターでは細かく売買を繰り返しています。

富永さんのクラウドブレイクのほうがエントリと決済の条件が厳格なだけ、取りこぼしが多いようですね。

関連記事

超シンプルな自動売買プログラム(2) ボリ平ドラゴン式

プログラムソース(平均足クロス+クラウドフィルター)

//
// yasciiHA04.mq4
//           Heiken_Ashi_Real(移動平均線クロス)を使用
//         通常平均足との組み合わせ Cloud filter

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

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

extern int Fast_period = 14 ;
extern double margin = 0.0 ;

extern double ILC = 20.0 ;

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

//変数の設定//
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(){

    //暴落対策(始め)

   double FastHH1 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 1)];
   double FastLL1 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 1)];

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   if( Bid < FastLL1-margin 
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット
   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   if( Ask> FastHH1+margin
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //暴落対策(終わり)

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

       double HA_open1 = ( Open[2] + Close[2] ) / 2.0 ;
       double HA_close1 = ( Open[1] + Close[1] + High[1] + Low[1] ) / 4.0 ;
       double HA_open2 = ( Open[3] + Close[3] ) / 2.0 ;
       double HA_close2 = ( Open[2] + Close[2] + High[2] + Low[2] ) / 4.0 ;
       double HA_openMA1 = iCustom(NULL,0,"Downloads\\Heiken_Ashi_Real",2,1);
       double HA_openMA2 = iCustom(NULL,0,"Downloads\\Heiken_Ashi_Real",2,2);
       double HA_closeMA1 = iCustom(NULL,0,"Downloads\\Heiken_Ashi_Real",3,1);
       double HA_closeMA2 = iCustom(NULL,0,"Downloads\\Heiken_Ashi_Real",3,2);

       double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
       double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);

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

   //買いポジションのエグジット
    OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
    OOPL = OrderOpenPrice();
    if(    ((HA_openMA1 > HA_closeMA1 && HA_openMA2 > HA_closeMA2) || ( HA_open1 > HA_close1 && HA_open2 > HA_close2) ||( OOPL - lc*Point >= Close[1] ) ) //|| ( OOPL+TP <= Close[1] ))
            && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット
     OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
     OOPS = OrderOpenPrice();
   if(    ((HA_openMA1 < HA_closeMA1 && HA_openMA2 < HA_closeMA2)||( HA_open1 < HA_close1 && HA_open2 < HA_close2)||( OOPS + lc*Point <= Close[1] ) ) //|| ( OrderOpenPrice()-TP >= Close[1] ))
          && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Aqua);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if( HA_openMA1 < HA_closeMA1 && HA_openMA2 < HA_closeMA2 && HA_open1 < HA_close1// && HA_open3 < HA_close3 && HA_close1 > HA_close2 && HA_close2 > HA_close3
       //&& (Close[1]> cla1 && Close[1]>clb1)
       && ((Close[1]> cla1 && Close[1]>clb1)||(Close[1]< cla1 && Close[1]<clb1))
       && ( 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,Red);
    }

   //売りエントリー
   if( HA_openMA1 > HA_closeMA1 && HA_openMA2 > HA_closeMA2 && HA_open1 > HA_close1 // && HA_open3 > HA_close3 && HA_close1 < HA_close2 && HA_close2 < HA_close3
       //&& (Close[1]< cla1 && Close[1]<clb1)
       && ((Close[1]> cla1 && Close[1]>clb1)||(Close[1]< cla1 && Close[1]<clb1))
       && ( 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,Aqua);     
    } 

   return(0);
  }

###

超シンプルな自動売買プログラム(2) ボリ平ドラゴン式

稼ぐ人のFX 儲けの流儀 (超トリセツ) 稼ぐ人のFX 儲けの流儀 (超トリセツ)
バウンド
インターナショナル・ラグジュアリー・メディア 2012-03-23
売り上げランキング : 186567
Amazonで詳しく見る
by G-Tools

「稼ぐ人のFX」というMOOKの第一号にボリ平さん(女性です)という有名なトレーダーの手法が載っています。

ボリ平ドラゴン式

  • 買い:遅行線がボリンジャーの+3σを上抜ける
  • 売り:遅行線がボリンジャーの-3σを下抜ける
  • 決済:5分足の終値が逆行したとき

ずいぶんシンプルです。

以前書かれた著書のものより新しい手法ということで、早速 昨日のシンプルなEAに組み込んでテストしてみましたが、2014/1/1 – 2015/1/1 のバックテストでの結果はほとんどの通貨ペアで赤字が出ています。

このMOOKが出たのは2年前。

それまで通用していた手法がたまたま昨年は通用しなかったのでしょうが、専業で食っていくのは大変だなあ、と思います。

関連記事

超シンプルな自動売買プログラム(EA)

プログラムソース

//
// yasciiSimple03
// ボリ平ドラゴン式
//

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

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

extern int BB_Period=20;
double Deviation=3.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;

int start()
  {

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

     double bbw1 = iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 1, 26) -  iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 0, 26)+Close[26];
     double bbw2 = iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 1, 27) -  iBands( NULL, 0, BB_Period, Deviation, 0, PRICE_CLOSE, 0, 27)+Close[27];

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

if (iClose( NULL, 5, 1)==0) return(0);
if (iClose( NULL, 5, 2)==0) return(0);

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

   //買いエントリー
   if( Close[1] > bbw1 && Close[2] < bbw2 
       && ( 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( Close[1] < bbw1 && Close[2] > bbw2 
       && ( 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);
  }

###

名波はるか&Kumaさんが教える!![日経225&mini]で始めるシステムトレード入門

名波はるか&Kumaさんが教える!![日経225&mini]で始めるシステムトレード入門 名波はるか&Kumaさんが教える!![日経225&mini]で始めるシステムトレード入門

名波 はるか Kuma

扶桑社 2008-05-23

売り上げランキング : 305594

Amazonで詳しく見る

by G-Tools

★★★☆☆(当時はよかったが、今は不要?)

名波はるかというちょっと過激な方のグラビアアイドル(私はよく知りませんでしたが)が、Kuma さんという人の作った単一のシステムトレードプログラムを紹介するという、なんとも不思議な構成の本。

エクセルのマクロで作られたトレードシステム「Kuma システム」の入った CD-ROM が付属。

データを自分で打ち込む必要がありますし、資金も結構必要ですし、勝率は低いしプロフィットファクターも低そうで、MetaTrader4 で FX をやるのに比べると敷居が10倍は高いですね。

それにこれをやったからといって、他人のロジックをそのまま使うだけ。

勝っても負けても他人任せなので、自分に進歩がないし、うまくいかなくなっても原因がわかりません。

FX のほうをお勧めします。デモ口座で練習できますからね。

###