2016年1月29日金曜日

トレンド型逆トラップベッティングシステム考察

トラップ型の自動売買システムを考えてみたい。
レンジ相場時やベットした方向のトレンド時の収益は素晴らしい
が、逆トレンドになると莫大な損失を生み出す。
トレンド方向を考えなければならないのは面倒です。
トレンドを考えたくないと両建てをした時には、どちらにトレンドしても激しく損失を生み出してしまいます。

トレンドとレンジ相場は交互に起こります。一週間ごとに交互という意味ではありません。レンジ相場が続いていてもいつかはトレンドが来るという意味です。つまりレンジ幅は必ず崩れます。しかし、トレンドに関してはレンジに相場になってもまたいつか必ずトレンド相場がやってきます。

そこで!!トレンド相場待ちの逆トラップベッティングシステムを検討してみましょう!!

まずは通常のトラップ型です。通貨は仮想通貨KYO/JPYです。
100円で買建1と売建aをエントリー
101円で買建1は利益確定+1
    買建2と売建bをエントリー
    売建aは含み損-1
    合計±0です。
102円で買建2を利益確定+1
    買建3と売建cをエントリー
    売建aが-2、売建bが-1の含み損
    合計-1です。
103円でも同様に合計-3です。

トレンド相場で両建てトラップは利益確定できないマイナス側がドンドンたまるので損失が膨らんでしまいます。
こちらは先程と同じ結果ですが買建の利益確定と新規エントリーを相殺しています。
相殺することで手数料、建て玉の本数を減らせます。
レートが1円上がるごとに売建を一本追加しているように見えます。
実際その通りなのですが...

三枚目のこちらが逆トラップです。
レートが1円上がるごとに買建を一本追加します。
100円スタート
101円±0
102円+1
103円+3
104円+6(ここからがグラフにしてませんごめんなさい)
105円+10
素晴らしいです!
(101円で新規2とaを相殺した方が証拠金、スワップの面からいいですね)

 次は100円から101円に上がったあと100円に戻った場合です。
選択肢は売建に追加エントリーをするかしないかです。
追加した場合
100円スタート
101円±0
100円-1
101円-1
102円±0
103円+2
104円+5
105円+9
建て玉は二本増えて-1の結果となりますね。
一度買建でエントリーした場合下がっても売らないのがいいようです。

100円から101円もしくは99円に動いたときにトレンドを決定しますが、
トレンドが決めた方向の逆に動いた時の処理が必要です。

一円下がったらすべて清算する場合(10円プラスで終了)
100円→101円±0   →100円 -1
100円→102円+1   →101円 -1
100円→103円+3   →102円 ±0
100円→104円+6   →103円 +2
100円→105円+10 →104円 +5
100円→106円+15 →104円 +9
100円→107円+21 →104円 +14
100円→108円+28 →104円 +20
100円→109円+36 →104円 
100円→110円+45                
レンジ相場でコテンパンにされそうですね。

104円に到達しない段階で下った時にはこちらの4連続ナンピンゲールで処理してしまうのがいいかもしれません。


















2016年1月26日火曜日

RSI4r 見よ!!これが四連続可変ナンピンの力だ!!

クローズ処理について四連続ナンピン可変ベットを提案しましたが、EAにしてみました。
RSIシグナル後に10pipsでクローズ。逆に動き損失が出たときはナンピン追加で追加後10pipsでクローズを四連続で行います。ロットは可変で1,1,2,4と増やします。
結果ですが15分足、715取引で勝率約80%売り買いともにいい数字です。
利益は0.01LOT(最大LOTx8必要です)で10万→利益1.9万 最大ドローダウンは3,307です。
10万円で0.02lotsまでは不足なく稼働できます。
いつもの11カ月で10万円0.07Lots利益107,100までは稼働しますが、少しハイリスクです。
※2/29ソースコードShortの演算ミスを修正データーを変更しました。



#property copyright "Copyright 2016/1/26,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAG 1124
datetime TimeOld;
extern int RSIPeriod=17;
extern int RSIBL=33;
extern int RSIUL=75;
extern double Lots=0.01;
double Profit;
double StopLoss;
double Entry;
double Type[4]={0,0,0,0};
double Mode;
double ModeOld;
int Slip=3;
int d;
int i;

int start(){if(Time[0]!=TimeOld){TimeOld=Time[0];
if(OrdersTotal()==0){
if(iRSI(NULL,1,RSIPeriod,0,1)<=RSIBL)
{LongEntry();}
if(iRSI(NULL,1,RSIPeriod,0,1)>=RSIUL)
{ShortEntry();}
}
}
Exit();
Modify();
return(0);}
void LongEntry(){
Entry=Ask;Mode=3;ModeOld=3;StopLoss=Ask-0.4;
 d=OrderSend(NULL,OP_BUY    ,Lots,  Ask,    Slip,StopLoss,Ask+0.1,"Long1",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots,  Ask-0.1,Slip,StopLoss,Ask+0.1,"Long2",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots*2,Ask-0.2,Slip,StopLoss,Ask+0.1,"Long3",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots*4,Ask-0.3,Slip,StopLoss,Ask+0.1,"Long4",MAG,0,Red);
}
void ShortEntry(){
Entry=Bid;Mode=7;ModeOld=7;StopLoss=Bid+0.4;
 d=OrderSend(NULL,OP_SELL,    Lots,   Bid,    Slip,StopLoss,Bid-0.1,"Short1",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots,   Bid+0.1,Slip,StopLoss,Bid-0.1,"Short2",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots*2, Bid+0.2,Slip,StopLoss,Bid-0.1,"Short3",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots*4, Bid+0.3,Slip,StopLoss,Bid-0.1,"Short4",MAG,0,Blue);
}
void Modify(){
for(i=0;i<4;i++){d=OrderSelect(i,SELECT_BY_POS);Type[i]=OrderType();}
if (Type[0]==0){Mode=(Type[1]+Type[2]+Type[3])/2;}
else
{Mode=(1+Type[1]+Type[2]+Type[3])/2+2;}
if(ModeOld!=Mode)
{ModeOld=Mode;
if (Mode<4){Profit=Entry+(Mode-2)/10;}else{Profit=Entry+(6-Mode)/10;}
for(i=0;i<4;i++){
d=OrderSelect(i,SELECT_BY_POS);
d=OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,Profit,0,Green);
}}}
void Exit(){
if (OrdersTotal()!=4){
    for (i=OrdersTotal()-1; i>=0; i--){
d=OrderSelect(i,SELECT_BY_POS);
d=OrderDelete(OrderTicket(),clrNONE);
}}}

EA清水寺時間別設定 恐れていた結果が...

さて前回の最適化結果を踏まえてEA化しました。
仮称EABandHoursさて実力はいかに!!

気になっていた勝率ですが、
EA清水寺  売62%買52%
BandHours 売54%買56%
ちょっと落ちていますが予想ほどひどくありません。

最大ドローダウン
EA清水寺 98,180 予想 29,441 BandHours 27,491
いいですねー

そして、損益は
EA清水寺 2,208,900
予想    1,019,698
BandHours  1,370,65
あれ?一桁足りない!!!!
時間が変わった時に残っていたポジションが影響しているのでしょうか
どうやら没です。






#property copyright "Copyright 2016/1/26,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAGIC 20160126
extern int BandUpP = 20;  
extern int BandDownP = 20;
double TSProfitU[24] ={170,160,150,150,150,160,160,200,170,180,180,170,180,220,170,160,150,250,250,190,160,160,230,180};
double TSProfitD[24] ={220,250,170,150,150,150,160,150,160,180,180,190,250,160,180,160,170,150,150,220,220,180,250,230};
double ProfitU[24]   ={ 60,130,130, 70, 70,150,140,130, 60, 90, 80, 50,110, 90, 70, 50,130,150,100, 90, 50, 90, 70,110};
double ProfitD[24]   ={ 90, 90, 80,150,150,100, 70,140,140,110, 80,140, 70, 60,140,150,100, 50,100,100,120, 50, 60,110};
double TSMaxRange = 0 ;
double StopLossU[24] ={140,200,200,100,150,100,180,100,110,130,190,190,160,120,120,110,150,140,120,190,200,170,200,200};
double StopLossD[24] ={180,120,140,130,120,100,100,190,190,190,160,170,150,180,170,170,160,200,190,150,150,200,200,180};
extern int Hours=0;
extern int Spread =4 ;
extern double Lots = 0.01;          
string Comments = "Bands USDJPY m1"; // Comments
datetime TimeOld;
int Ticket = 0;
int d;
int init()
{TimeOld = Time[0];TSMaxRange = Close[0];
if (OrderSelect(0,SELECT_BY_POS) == 1)
   {if (OrderComment() == Comments){Ticket = OrderTicket();}}
return(0);}
int start()
{if (Time[0] != TimeOld){TimeOld = Time[0];
if (OrdersTotal() == 0){Ticket = 0;}
if (Ticket <=0){TSMaxRange = Close[0];}
if(OrderSelect(Ticket,SELECT_BY_TICKET) == True)
{if(OrderType()==0)
   {if (TSMaxRange < Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange - TSProfitU[Hour()] * Point > Close[0]){Exit();}
    else  if(OrderOpenPrice() - StopLossU[Hour()] * Point > Close[0]){Exit();}
          else if(OrderOpenPrice()+ProfitU[Hour()]*Point < Close[0]){Exit();}
   Comment("Long");}
else
   {if (TSMaxRange > Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange + TSProfitD[Hour()] * Point < Close[0]){Exit();}
    else  if(OrderOpenPrice() + StopLossD[Hour()] *Point < Close[0]){Exit();}
          else if(OrderOpenPrice()-ProfitD[Hour()]*Point > Close[0]){Exit();}
   Comment("Short");}
}  
   if( TBandUp(2,2) >= Close[2] && TBandUp(2,1) < Close[1] ){EntryShort();}
   if( TBandDown(2,2) <= Close[2] && TBandDown(2,1) > Close[1] ){EntryLong();}    

}  
return(0);}
int Exit()
{if (OrderClose(Ticket,Lots,OrderClosePrice(),5,Blue) == 1){Ticket = 0 ;}
   else{Exit();}
return(0);}
int EntryLong()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask - StopLossD[Hour()] * Point,0,Comments,MAGIC,0,Red);}
return(0);}
int EntryShort()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Bid + StopLossU[Hour()] * Point,0,Comments,MAGIC,0,Blue);}
return(0);}
double TBandDown(double Dev,int Shift){return(iBands(NULL,0,BandDownP,Dev,0,0,2,Shift));}
double TBandUp(double Dev,int Shift){return(iBands(NULL,0,BandUpP,Dev,0,0,1,Shift));}

EA清水寺 時間別最適化結果!!

寒波カンパと言われていますが京都では全く雪が降っていません。
そしてなぜかGMOクリック証券にログインできません。
なにかしっくりこない日ですね。

さて、久々にブログを書く気がします。
じつはこちらのようにEA清水寺は特定の時間にマイナスが出るということがわかりました。
たしかに東京時間と、ロンドン、ニューヨークでそれぞれに癖はあるでしょう
そこで、時間ごとに最適化を実施しました。
二台のPCにつきっきりでバックテストを繰り返したのですが、一台が熱のせいかブルーバック連発で時間がかかってしまいました。
期間は2005.1.1-2015.11.30
そして、バックテストにかかった時間はなんと72時間(汗)

下から二行目ALLの損益は合計、ドローダウンは最大値、勝率は平均を取っています。
損益減っています><;ドローダウンは大幅改善^^v 勝率は激減><;
最適化をしながら勝率が気になっていたのですがまさかの結果です。
しかしEAにしてみないとわかりません。
ということで次回はEAをつかったバックテストです!!


2016年1月24日日曜日

【クローズ処理】四連続ベットが効果的!! マネケンとは?

ブリュッセル証券取引所への旅まであと一週間。
ワクワクである!そしてブリュッセルと言えばワッフル。
ワッフルといえばやはりマネケンである。あの甘いニオイは悪魔的誘惑です
そういえばマネケンってどう有意味だろう?グーグル先生教えてください。
ということで聞いてみました。

え?

さて、今日はクローズの処理について
カジノで客側のアドバンテージはベットするレートを決められることである。
すぐれたベッティングシステムを持つことは勝利への近道だ。
もちろんFXにおいても同様である。
さまざまな指標やタイミングでエントリーするが、外れる事もある。
外れた時に放置して反転を待つか、ストップロスをするか買い増しナンピンをするかである。
各先生方のご意見ではストップロスを支持する意見が圧倒的に多い
予想が外れたなら損失が広がらないようにすぐクローズする。
もしくは、予想が外れた=運が悪い 流れがわるいよって一時引く
そういった意見が大半である。

しかし、マーチンゲールとナンピンを限定で組み合わせた限定ナンピンゲールは非常に有効である。

ターゲットは15分足の推定4本の一時間をひと枠と考える。
15分足にする理由はこちら 15分足は75%以上の確率で0.01動くということである。
まあ75%なので5本が正解かもしれないが15分で完結する時もあるので一時間と考えます。

まず、100円の時に1本買建をエントリーします。
 100.01になったら終了0.01x1単位の利益です。
逆に99.99に下がった時はもう一本買建追加エントリーします。
その後100まで99.99から0.01上がれば終了
 100円でエントリーしたポジションは±0
 99.99でエントリーしたポジションは+0.01
 トータル0.01x1単位の利益
99.98まで下がった時にはさらに2本追加エントリーします。
99.99まで0.01上がれば終了
 100円でエントリーしたポジションは-0.01
 99.99円のポジションは±0
 99.98円のポジションは+0.01x2本
 トータル0.01x1単位の利益
99.97まで下がった時はさらに4本追加エントリー
その後99.98まで上がれば同様に0.01x1単位の利益
99.96まで下がればストップロスします。

つまりスタート後最終ベットから0.01上がれば常に0.01の利益です。
(手数料、スプレッドは考えていません)

0.01で考えましたが、0.1の変動の場合。
100エントリー100.1クローズ
99.9追加1本
99.8追加2本
99.7追加4本で0.1の利益を狙えます。
0.1の場合四時間足、もしくは日足がいいと思います。


 












2016年1月22日金曜日

EA清水寺実弾テスト 一週間

EA清水寺を公開して一週間経ちました。
バックテストの一週間は短いですがフロントテストの一週間は非常に長いですね。

公開してから一週間で1,000単位で-600円微妙です...
誤差範囲と言えばそうなのですが、気にかけているDayTimeは増えているのに朝確認すると減っている気がします。
そこで、一週間を時間別に確認してみました。

一週間、わずか160取引です。そして途中でLOTを0.01から0.02に増やしていますので参考になるかどうかのデーターと思いますが、17時(日本時間24時)が気になります。
17時だけ取引をやめればプラスに転じます。
(たちの悪い最適化のようですw)
もしくは時間によってセッティングを変えた方がいいのかもしれません。
そこで2005年からのバックテストの結果をのぞいてみました。




















縦が時間、横は年です。一番右はマイナス月の回数を見ています。
04時と、17時(黄色い帯)が10回中9回マイナスですね。
ほかにも気になる時間は多々見受けられます。
逆に13時は無敗、優秀です!!
時間別に最適化しなおした方がいいのかもしれません。









EA往復ビンタ君w なぜか稼げる不思議なEA

ブログを開始したばかりの時に作成した往復ビンタ君というEAがあります。 前の日が下がった時は買建エントリーするEA往復ビンタ君L、そして上がった日は売建という往復ビンタ君S ソースはわずか13行、非常にシンプルな物でした。 別々に作ったのですが合計するとなかなかいい数字がでていました。
 
毎月の取引数は10程度、バックテストの結果は1,000以上は必要とかなんとか声が聞こえてきそうですが(汗)
そして12月の結果ですが、Lがー7,680 Sは17,350合計9,670の利益です。
10万円スタートで月1万ならなかなかいいかもしれませんね。

2016年1月21日木曜日

RSI Averagingを五分足で動かしてみると驚きの事実が!

以前ブログで紹介しましたRSI Averaging(記事やソースコードはこちら)では、ガンガンと稼いでくれるのですが最大60本近い建玉を必要とする点がネックでした。まあ、わたしは気にせずに使っているのですが( ´∀` )そこで5分足で動かしてみました。最適化は面倒なのでパスします。

1分足の損益は234,239がこちらは54,851激減しています。
しかし、最大ドローダウンは166,691から22,688になりました!!

つまり初期資金20万円で
一分足 LOT0.01 利益234,239
 五分足 Lots0.08  利益54,851x8=493,659 となります。
ちなみに5分足の最大建玉は44本こちらも激減しました。
99%が9本以内に終了
96%が4本以内です。
RSI五分足で4本限定の平均化システムなんか面白いかもしれませんね。

今日からこちらも稼働させています!              


2016年1月17日日曜日

清水寺 USDJPY + EURUSD 合算チャート検証

リスク分散で清水寺2通貨で運用開始しました。
二通貨の合計はどう動くのでしょうか?

エクセルでチャートをまとめてみました。
お互いを補う形で右肩上がりになりましたが8月に下がってしまいます。
チャイナショックの影響を考えると優秀ですね♪


あのEA清水寺をEURUSDでうごかすと...☆☆☆☆

一番良いEAに全額突っ込めれば男なのですが、なかなかそうもいきません。
リスク分散がなんたらと言うと兵頭会長に怒られそうですが、
分散思考で通貨を変えてみました。
あらwUSDJPYより成績がいいw
設定だけ微妙に調整しましたがあとは同じです。

#property copyright "Copyright 2016/1/17,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAGIC 20160117
int BandUpP = 20;  
int BandDownP = 20;
double TSProfitU = 170;
double TSProfitD =250;
double ProfitU = 110;
double ProfitD = 150;
double TSMaxRange = 0 ;
double StopLossU = 140;
double StopLossD =140;
int Spread =5 ;
extern double Lots = 0.01;          
string Comments = "Bands USDJPY m1"; // Comments
datetime TimeOld;
int Ticket = 0;
int d;
int init()
{TimeOld = Time[0];TSMaxRange = Close[0];
if (OrderSelect(0,SELECT_BY_POS) == 1)
   {if (OrderComment() == Comments){Ticket = OrderTicket();}}
return(0);}
int start()
{if (Time[0] != TimeOld){TimeOld = Time[0];
if (OrdersTotal() == 0){Ticket = 0;}
if (Ticket <=0){TSMaxRange = Close[0];}
if(OrderSelect(Ticket,SELECT_BY_TICKET) == True)
{if(OrderType()==0)
   {if (TSMaxRange < Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange - TSProfitU * Point > Close[0]){Exit();}
    else  if(OrderOpenPrice() - StopLossU * Point > Close[0]){Exit();}
          else if(OrderOpenPrice()+ProfitU*Point < Close[0]){Exit();}
   Comment("Long");}
else
   {if (TSMaxRange > Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange + TSProfitD * Point < Close[0]){Exit();}
    else  if(OrderOpenPrice() + StopLossD *Point < Close[0]){Exit();}
          else if(OrderOpenPrice()-ProfitD*Point > Close[0]){Exit();}
   Comment("Short");}
}  
   if( TBandUp(2,2) >= Close[2] && TBandUp(2,1) < Close[1] ){EntryShort();}
   if( TBandDown(2,2) <= Close[2] && TBandDown(2,1) > Close[1] ){EntryLong();}    

}    
return(0);}
int Exit()
{if (OrderClose(Ticket,Lots,OrderClosePrice(),5,Blue) == 1){Ticket = 0 ;}
   else{Exit();}
return(0);}
int EntryLong()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask - StopLossD * Point,0,Comments,MAGIC,0,Red);}
return(0);}
int EntryShort()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Bid + StopLossU * Point,0,Comments,MAGIC,0,Blue);}
return(0);}
double TBandDown(double Dev,int Shift){return(iBands(NULL,0,BandDownP,Dev,0,0,2,Shift));}
double TBandUp(double Dev,int Shift){return(iBands(NULL,0,BandUpP,Dev,0,0,1,Shift));}

2016年1月15日金曜日

EAバルス!! けっして人に渡したり、作動させちゃいけないって。 

滅びのEA!!いいEAに力を与えるには、悪いEAも知らなければいけないって、でも決して使うなって
あのEAは外に出しちゃいけないものだったのよ
だからいつもブログの穴に隠してあって、結婚式にしかつけなかったんだわ
黒いEAだ 伝承の通りだ!!

そう、このEAは23:20にアラートと共にLONG発注します。

危険ですのでバックテストしたり、運用したりしないでください。


#property copyright "Copyright 2016/1/15,TACA&Pazu"
#property link      "http://mt4kyoto.blogspot.jp/"
datetime TimeOld;
void OnTick(){if(Time[0]!=TimeOld){TimeOld=Time[0];
if(Hour()==16&&Minute()==20){Alert("バルス!!");

int Ticket = OrderSend(Symbol(),OP_BUY,1,Ask,5,Ask-0.01,Ask+0.01,"バルスLong",2320,0,Red);}}}

2016年1月14日木曜日

EA清水寺 私の使っているEAの一つを紹介します!!☆☆☆☆☆

今日は私の使っているEAを紹介します。
まぁ傑作ですね!!(←自画自賛)

京都から東へ下る道は二本、三条通と五条通り(国道一号線)です。
地図でこの二つの道をゆっくり見てください。
だんだんあれに見えてきませんか?
そうです。ボリンジャーバンドです!!!
そして清水寺はバンドに収まったチャートに見えないでしょうか?

今日のEAはその名もEA清水寺!!
ボリンジャーバンドを超えたら逆方向にエントリー、適当なところで利益確定もしくはS/Lです。最大ポジションは1本です。
一万円がなんと32,074円に!!(参考までに2005-2015.11.30で損益は22万です。)
清水の舞台から飛び降りたつもりでどうでしょうか


#property copyright "Copyright 2016/1/14,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAGIC 20160114
int BandUpP = 20;  
int BandDownP = 20;
double TSProfitU = 190;
double TSProfitD =220;
double ProfitU = 110;
double ProfitD = 80;
double TSMaxRange = 0 ;
double StopLossU = 140;
double StopLossD =140;
int Spread =4 ;
extern double Lots = 0.01;          
string Comments = "Bands USDJPY m1"; // Comments
datetime TimeOld;
int Ticket = 0;
int d;
int init()
{TimeOld = Time[0];TSMaxRange = Close[0];
if (OrderSelect(0,SELECT_BY_POS) == 1)
   {if (OrderComment() == Comments){Ticket = OrderTicket();}}
return(0);}
int start()
{if (Time[0] != TimeOld){TimeOld = Time[0];
if (OrdersTotal() == 0){Ticket = 0;}
if (Ticket <=0){TSMaxRange = Close[0];}
if(OrderSelect(Ticket,SELECT_BY_TICKET) == True)
{if(OrderType()==0)
   {if (TSMaxRange < Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange - TSProfitU * Point > Close[0]){Exit();}
    else  if(OrderOpenPrice() - StopLossU * Point > Close[0]){Exit();}
          else if(OrderOpenPrice()+ProfitU*Point < Close[0]){Exit();}
   Comment("Long");}
else
   {if (TSMaxRange > Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange + TSProfitD * Point < Close[0]){Exit();}
    else  if(OrderOpenPrice() + StopLossD *Point < Close[0]){Exit();}
          else if(OrderOpenPrice()-ProfitD*Point > Close[0]){Exit();}
   Comment("Short");}
}  
   if( TBandUp(2,2) >= Close[2] && TBandUp(2,1) < Close[1] ){EntryShort();}
   if( TBandDown(2,2) <= Close[2] && TBandDown(2,1) > Close[1] ){EntryLong();}    

}    
return(0);}
int Exit()
{if (OrderClose(Ticket,Lots,OrderClosePrice(),5,Blue) == 1){Ticket = 0 ;}
   else{Exit();}
return(0);}
int EntryLong()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask - StopLossD * Point,0,Comments,MAGIC,0,Red);}
return(0);}
int EntryShort()
{if (Ticket <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Bid + StopLossU * Point,0,Comments,MAGIC,0,Blue);}
return(0);}
double TBandDown(double Dev,int Shift){return(iBands(NULL,0,BandDownP,Dev,0,0,2,Shift));}
double TBandUp(double Dev,int Shift){return(iBands(NULL,0,BandUpP,Dev,0,0,1,Shift));}

2016年1月13日水曜日

過去五日間のチャートを並べて最近のトレンドをチェックしよう♪

今日は1月13日です♪
さて、今日はふと過去のチャートを今日のチャートに重ねてみたくなりました。
各市場のオープン時間、クローズ時間等は変化がありますが、それ以外の時間で傾向や動きやすい時間があるのでしょうか。
そこで作ったのがこちらです。

過去5日のチャートを並べています。
1分足から1日足まで使えますが、四時間足や一日足でやっても、横にならんでいるだけで面白くありません。
はじめは30分か15分がお勧めです。
本日のグラフはラインチャート(緑色)にしています。
昨日は青、おとといは赤、その前はアクア(水色)、もう一日前は黄色です。
思い出しやすいようにあいうえお順にあお、あか、アクア、黄色にしました^^

①は15時(日本時間で22時)代ですが、15:00に緑(今日)、アクア、黄色が方向転換しています。15:30には青と赤が反転しています。
アクアは失業保険の発表時間、赤は雇用統計 青はカナダの住宅着工件数の15分後です。

②は3時(日本時間で10時)です。指標発表はありません。
3時に黄色と青が方向転換。3:15にアクアと緑(今日)の山になっています。
中国市場のオープン直前、もしくは香港のプレオープン時間ですね。

もう何か所か気になる時間がありますがそこは探してみてください。
ソースは下に張っておきます。


#property copyright "Copyright 2016/1/13,TACA's Birth Day "
#property link      "http://mt4kyoto.blogspot.jp/"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 Yellow
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
#property indicator_type3 DRAW_LINE
#property indicator_type4 DRAW_LINE

double Past1[];
double Past2[];
double Past3[];
double Past4[];
int PastTime;
int init()
{
SetIndexBuffer(0,Past1);
SetIndexBuffer(1,Past2);
SetIndexBuffer(2,Past3);
SetIndexBuffer(3,Past4);
PastTime=1440/Period();
return(0);}
int start()
{int limit=Bars-IndicatorCounted();
for(int i=limit-1;i>=0;i--){
Past1[i]=Close[i+PastTime];
Past2[i]=Close[i+PastTime*2];
Past3[i]=Close[i+PastTime*3];
Past4[i]=Close[i+PastTime*4];

}
return(0);}

2016年1月12日火曜日

FXではあまり活用されない出来高が実は!!!

株屋さんの世界では出来高が重宝されているようですが、
為替の世界ではあまり出来高が~といった話を聞きません。

しかし古来より出来高にチャレンジしたインディケーターや日経225先物の出来高を参考にしたものなどいろいとあるようです。

そこで相関性があるのかどうか調べてみました。
30分足で期間は2005.1.1-2015.12.31
青は最高値ー最低値の平均 赤は出来高の平均です。
単位をそろえるために出来高は10,000で割っています。
時間はGMT+3(夏)+2(冬)です。

結果はご覧のとおりです。
相関係数は0.933(1に近いほど相関性がありー1に近いほど相関性がありません)
これを活用すれば利益確定幅を出来高で決めることができるかもしれません。

もうひとつオセアニア時間は少し乖離があります。
出来高にかかわらず最低の変動値が0.8-0.9なのかもしれませんね。

つづく...

その後出来高の平均化や平方根を期間にした変動平均などなど試したのですが、
まったくうまくいきませんでした><;
そもそも出来高の未来を予測できずHigh-Lowをそのまま使えばええやんということで、
没にしました。半日が無駄になってしまった...



2016年1月9日土曜日

バックテストの時間短縮術 過酷試験!!

MT4で一番時間がかかるのはバックテストでしょう。
EAを作ったらバックテスト、調整したらバックテスト、うわさのEAを入手したらバックテスト重たいEAだと一日以上かかってしまいます。

さてそんな中、ナンピンやマーチンゲールなど採用したEAは嫌われていましたが、トラップなんとかの流行などからまた大量のポジションを持つEAが出てきました。

ポジションを大量にもつEAはバックテストが重くなります。
そこでわたしは過酷試験をしてから本番のバックテストをします。
このグラフは月初から月末までにいくら動いたかをみたグラフです。
この十年間で2008.10が最低記録2009.02が最高記録です。
この期間でバックテストをして破産するEAはその時点で没。
具体的には2008.07から2009.05末までを試験します。
2008.7に一円以上、上がることでSHORTボジションをWASHOUT。
2008.09からSHORTの耐久テスト兼LONGポジションのWASHOUT。
そして2009.02でLONGの耐久テスト2009.5は余韻です。

この過酷試験で破たんしないからと言ってよいEAとは言えませんが、
破たんするEAは使い物にならないEAです。

バックテストの時間短縮にいかがでしょうか^^



2016年1月8日金曜日

雇用統計除外ルーチン作成!!

雇用統計を調べるルーチンを作成しました。
EAの初めにbool Permit=True;を設置してください。
雇用統計の前後30分はPermitがFalseになります。
これでエントリーしないようにしてください。

これがあれば折角の金曜日に雇用統計の為に飲みに行けないなんて事はなくなるはず

void ESR()//Employee Situation Report
{ Permit=True;
  if(DayOfWeek()==5)
    {if(Hour()==15)
      { if(Day()<8){Permit=False;}
        if(Month()==1||Month()==3)
        { if(Day()<4){Permit=True;}
          if(Day()==8||Day()==9||Day()==10){Permit=False;}
        }
        if(Month()==5||Month()==7||Month()==11)
        { if(Day()==1){Permit=True;}
          if(Day()==8){Permit=False;}
        }
      }
    }
}





※日足五本、GMT+3の夏冬時間ありの設定です。

雇用統計の日時をご存知でしょうか?私はさっきまで知りませんでした(汗

中国に振り回されてふらふらな毎日です。
そして本日は雇用統計、正確には米国非農業部門雇用者数。
雇用統計にあわせてEAを自動的に止めたいのですが、正確な日時を考えるとよくわかりません。
しらべると、毎月第一金曜日のニューヨーク時間8:30のようです。
アメリカ人はまだ目の覚めない早朝から大騒ぎしてるんですねw
(日本時間では夏時間21:30冬時間22:30)

しかし!!よく考えると今日は1月8日、そう第金曜日です。
そこで過去10年の時間から分析しました。難解でした。

アメリカ夏時間とは3月第二日曜日(3/8-14の日曜日)から11月第一日曜日(11/1-7の日曜日)までです。
つまり3月の雇用統計は冬時間22:30 11月は第一金曜日が1-5日の時は21:30 6,7日の時は22:30になります。

3月は確かに22:30ですがよくみると1,2,3日はありません代わりに8,9,10日になっています。未知のルールがあるようです。
11月は2-5日の時は予想通り21:30ですが、2006年は22:30です。なぜ?

調べてみました。2006年までは4月の第一日曜日02:00-10月最終日曜日の02:00までが夏時間だったのですが2007年に時間が変更になったのです。

そして5,7,11月1日もありません8日になるようです。
もう一つ正月三ヶ日も翌週に変更するようですね。


まとめると雇用統計の時間は
12,1,2,3月   は 22:30
4,5,6,7,8,9,10月は 21:30
11月2,3,4,5日  は 21:30 6,7,8日 は 22:30

1月1,2,3日 は8,9,10日に変更
3月1,2,3日 も8,9,10日に変更
5,7,11月1日 は    8日に変更

これをロシア時間(夏時間はアメリカと微妙に違います)にして、EA化ですね。
今日の雇用統計に間に合うのでしょうか




2016年1月7日木曜日

解説 TBandUPとは

昨日のBandzのなかに出てきたTBandUP(2,2)を解説します。
ソースを見てTBandUPってなんぞいや???と思われた方もいらっしゃったようですのでいちおう(汗)わかってるわという方はごめんなさい。

私は無精です。MQL4の関数の使わない項目を入れるのが面倒で仕方ありません。
iBands(1:Sym,2:TF,3:Period,4:Devision,5:Bands-shift,6:AP,7:mode,8:shift)
一番初めのNULLほぼいつもNULLです
二番目の時間足0、たまに使いますがほぼ0です。
三番目の期間 期間の可変もあまり使いません。
四番目 ここは使います。
五番目 ずらしません。
六番目 ほぼ終値です。
七番目 ここも大事です。
八番目 ここも使います。
ということでBands中で使いたいのは四番目の「偏差の倍数」と七番目「上か下か」と八番目の「何本前か」以外はいつも一緒ですね。
そこで、最終行に関数にしてみました。
double TBandUp(double Dev,int Shift){return(iBands(NULL,0,BandUpP,Dev,0,0,1,Shift));}

これがあるのでTBandUP(x,y)はiBands(NULL,0,BandUpP,x,0,0,1,y)と同じ意味になります。
七番目は間違えないようにUP,Downと関数名にしています。
BandUpPは期間です。調整できるようにexternで初めに定義して下さい。

ちなみに最初のTはわたくしTACAのTです(@^^@)v

2016年1月6日水曜日

新しいEAできました。無料公開中 一万円から動かせます!!これはいいかも☆☆☆ ボリンジャーバンド

ブログにはイギリスからのアクセスがありました。
スコットランド、ウェールズもしくはイングランドでしょうか
どこからのアクセスか想像すると妄想が膨らみます@@

今日はあたらしいEAの開発に取り組みました。
インジケーターはボリンジャーバンド
ポジションは同時に一つしか持たないものがいいですね。

ボリンジャーバンドが拡張するとエントリー収縮するとクローズです........
まったく利益が出ません。
勝率は大きいのに負け時の額が大きく負けてしまいます。
負け金を減らすために平均までもどったらクローズ。
S/Lに目標プロフィットを設定して、あれもこれもつけて
気が付けば最適化マニアになっていました。トホホ

そこで、昔作成したものを振り返ってみると あれ?これいいじゃんw
ということで、少し修正しての公開です。
※注)決して今日うまくいかなかったので昔作ったものを引っ張り出してきたわけではありません!!

レポートです。さがってー上がってー横に進んでー下がって、上がる。
スナフキンの帽子のような形です。
一本しかポジションを持ちませんので、余裕をもっても10,000円から使えます。
下に続く↓

そして損益の月別、なにか見覚えがある増減具合ですね。
そうだ!!毎月の増減と似ている!!そう思ったので月別の増減と比較してみました。
損益とClose-Openがそっくりです。う~ん
#property copyright "Copyright 2016/1/6,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAGIC 20160106
extern int BandUpP = 20;
extern int BandDownP = 20;
extern double TSProfit = 360;
extern double Profit = 210;
double TSMaxRange = 0 ;
extern double StopLoss = 150;
extern int Spread =4 ;
extern double Lots = 0.1;        
extern double Slip = 10;    
string Comments = "Bands USDJPY m1"; // Comments
datetime TimeOld;
int TicketL = 0;
int i;
int d;
int init()
{TimeOld = Time[0];TSMaxRange = Close[0];
if (OrderSelect(0,SELECT_BY_POS) == 1)
   {if (OrderComment() == Comments){TicketL = OrderTicket();}}
return(0);}
int start()
{i = 0 ;if (Time[0] != TimeOld){TimeOld = Time[0];
if(OrderSelect(TicketL,SELECT_BY_TICKET) == True)
   {if (OrderCloseTime() != 0){TicketL = 0;}}
if (TicketL <=0){TSMaxRange = Close[0];}
if(OrderSelect(TicketL,SELECT_BY_TICKET) == True)
   {if (TSMaxRange < Close[0]){TSMaxRange = Close[0];}
    if (TSMaxRange - TSProfit * Point > Close[0]){ExitLong();}
    else  if(OrderOpenPrice() - StopLoss * Point > Close[0]){ExitLong();}
          else if(OrderOpenPrice()+Profit*Point < Close[0]){ExitLong();}
   }
   if( TBandDown(2,2) <= Close[2] && TBandDown(2,1) > Close[1] ){EntryLong();}
}    
return(0);}
int ExitLong()
{if (OrderClose(TicketL,Lots,Bid,Slip,Blue) == 1){TicketL = 0 ;}
   else{ExitLong();}
return(0);}
int EntryLong()
{if (TicketL <= 0 && MarketInfo(Symbol(),MODE_SPREAD) <= Spread)
{
   TicketL = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask - StopLoss * Point,0,Comments,MAGIC,0,Red);
}
return(0);}
double TBandUp(double Dev,int Shift){return(iBands(NULL,0,BandUpP,Dev,0,0,1,Shift));}
double TBandDown(double Dev,int Shift){return(iBands(NULL,0,BandDownP,Dev,0,0,2,Shift));}

2016年1月5日火曜日

増減しやすい特定の時間はあるのでしょうか?USDJPY10年分調べてみました。

今日は一日EA RSI Ave.の改良をしていました。ポジション数を減らすための工夫です。
平均額以下でしか買わない、ポジション数に制限を付けるなどなどいろいろ作りました。
作るたびにEAの名前に機能名を付けていくのですが、最後に作ったものは
「EARSIAvHeCoAnTiBSiBeDownerSys」真ん中の方は何かの化学式のようになってしまいました。
結論は最初のままが一番です。やはりあれやこれやつけるよりシンプルなものがいいようですね。わかっているのですがついやってしまいます。

さて、今日は価格が変動しやすい時間です。
縦軸は5分単位の時間、横軸は曜日
値は2005-2015の始値-終値の差です。今考えると終値から始値を引けばよかったのですが。マイナスはドル高、プラスは円高です。
時間はOANDA時間ですので+7してください。0時は日本時間7時です。
この時間にエントリーして、5分後にエグジットすれば勝てるのではないでしょうか



2016年1月4日月曜日

皆様の期待通りに改良しました。EA MACD Averaging コメント追加!!

本日の巨大な損失をEA RSI Av.とMACD Av.に1%ほど取り返してもらいました。
夕方からは世界各国のPMIです。
私もアンケートされてみたいものです。

先ほどRSIにコメントを付けましたが、同じようにMACDにも装着しました。
メッセージの内容は発注LOT数、ポジション数、そしてLong,Short もしくはNoneのポジション表記です。


さてブログには韓国からもアクセスがありました。
カムサハムニダです。

EA RSI Averaging コメント付けました。

本日より市場再開
午前中はUSD/JPYがどんと下がり稼がしてもらいました^^V
株屋さんは大変だったでしょうね。
あれ?そういえば昨年LONG放置があったような...
大量にありました(汗)
あわててストップロスしましたが、年初からえぐいマイナスです。うぅぅ

今朝のトレンド相場RSI AVERAGING大活躍でした。
RSIが33を下回ったらエントリー、しかしずっと下回っているので買いっぱなし
そして、少し上がると利益確定を繰り返していました。
それに引き替えMACDは一度決済したら、まったくエントリしません。
トレンドにはRSI,レンジにはMACDですね。

RSIをずっと見ていて思ったのですが、今買いなのか売りなのかがわかりにくい。
ポジション数を数えるのも面倒です。
そこでコメントにロット単位、ポジション数、買建Long,売建Short,ポジション無Noneと表示するようにしました。



#property copyright "Copyright 2015/12/31,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
datetime TimeOld;
int Ticket;
extern int Profit=15;
extern int RSIPeriod=17;
extern int RSIBL=33;
extern int RSIUL=75;
int Continue;
double PrSub;
double PosAve;
int Mode=0;
string ModeText[3]={"Short Mode","None","Long Mode"};
extern double Lots=0.01;
int start(){if(Time[0]!=TimeOld){TimeOld=Time[0];
if(OrdersTotal()==0){Mode=0;}
if(Mode>=0)
{if(iRSI(NULL,1,RSIPeriod,0,1)<=RSIBL)
{int b=OrderSend(NULL,0,Lots,Ask,3,0,Bid+Profit*Point,"Long",1231,0,Red);Mode=1;Continue=1;}}
if(Mode<=0)
{if(iRSI(NULL,1,RSIPeriod,0,1)>=RSIUL)
{int c=OrderSend(NULL,1,Lots,Bid,3,0,Bid-Profit*Point,"Short",1231,0,Blue);Mode=-1;Continue=1;}}
if(iRSI(NULL,1,RSIPeriod,0,1)<=RSIBL)
{if(iRSI(NULL,1,RSIPeriod,0,1)>=RSIUL){Continue=0;}}
Averaging();
Comment("Lots:"+Lots+"\nPos:"+OrdersTotal()+"\n"+ModeText[Mode+1]);    
}return(0);}
int Averaging()
{ double LastPrice=0;double PosAll=0;double PosNum=0;
  for(int i=0;i<OrdersTotal();i++)
  {int d=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    LastPrice=OrderOpenPrice();
    PosAll+=LastPrice*OrderLots();
    PosNum+=OrderLots();
  }
  if(PosNum==0){PosAve=0;}
  else{ PosAve=PosAll/PosNum;}   
  for(i=0;i<OrdersTotal();i++)
  { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
    { Ticket=OrderTicket();
      if(OrderType()==0)
      {PrSub=PosAve+Profit*Point;}
      else
      {PrSub=PosAve-Profit*Point;} 
    int e=OrderModify(Ticket,OrderOpenPrice(),0,PrSub,0,CLR_NONE);
    }
  }
return(0);
}

2016年1月3日日曜日

RSI Averagingシステム これもいいかも☆☆☆

前回はMACD Averagingを平均のAveragingにしました。
そして今回はRSIへ、正月だから手を抜いているわけではありませんよ(汗)
RSいでは最適化する項目がたくさんあります
まずはRSIUpperLine RSIがどこを超えたら下に転換する目安になるか、
そしてRSIBelowLine 上の逆です。
2010年以降は経験的に75-33くらいがいいと思います。
さて結果はどうでしょうか下はMT4の最適化グラフです。
色が濃いところがたくさん利益が出ているところになります。
やはり75と33を中心に色が濃くなっていますね。

次は利益確定ポイント(横)とRSIの期間(縦)ですね。
利益確定ポイントは14-15 期間は16が最高値を出していますが14は利益が出ていません。誤差を考えると17-18ですね。


レポートです。
10万円が33万円になりました。
最大59本立てています。
40万円ほど予備で持っておくのがいいかもしれません。
99%は30本以内で収まっています。



EA MA Averaging Heging  MACD⇒MAへ

MACDの平均化システムをそのまま平均に変えてみました。
エントリーはゴールデンクロス、デッドクロス(短期平均と長期平均の突き抜け)です。
期間は設定できますのでいろいろ試してみてください。
SMA単純平均でしていますがEMAなども可能です。MModeを変えてみてください。
結果はMACDを超えました。
10万→26万へ!!最適化すればもう少し伸びます。
平均は期間の設定が難しいですね。
短期、長期の期間差を極端に縮めるとピンポイントで損益が上がります。
また長期、短期の期間の逆転でも数字が出るところがあります。


#property copyright "Copyright 201/1/3,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
datetime TimeOld;
int Ticket;
extern int Profit=10;
extern int FastP=3;
extern int SlowP=14;
extern int MMode=0;
double PrSub;
double PosAve;
int Mode=0;
extern double Lots=0.01;
int start(){if(Time[0]!=TimeOld){TimeOld=Time[0];
if(OrdersTotal()==0){Mode=0;}
if(Mode>=0)
{if(iMA(NULL,1,FastP,0,MMode,0,2)<=iMA(NULL,1,SlowP,0,MMode,0,2))
{if(iMA(NULL,1,FastP,0,MMode,0,1)>iMA(NULL,1,SlowP,0,MMode,0,1))
{int b=OrderSend(NULL,0,Lots,Ask,3,0,Bid+Profit*Point,"Long",1231,0,Red);Mode=1;}}}
if(Mode<=0)
{if(iMA(NULL,1,FastP,0,MMode,0,2)>=iMA(NULL,1,SlowP,0,MMode,0,2))
{if(iMA(NULL,1,FastP,0,MMode,0,1)<iMA(NULL,1,SlowP,0,MMode,0,1))
{int c=OrderSend(NULL,1,Lots,Bid,3,0,Bid-Profit*Point,"Short",1231,0,Blue);Mode=-1;}}}   
Averaging();   
}return(0);}
int Averaging()
{ double LastPrice=0;double PosAll=0;double PosNum=0;
  for(int i=0;i<OrdersTotal();i++)
  {int d=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    LastPrice=OrderOpenPrice();
    PosAll+=LastPrice*OrderLots();
    PosNum+=OrderLots();
  }
  if(PosNum==0){PosAve=0;}
  else{ PosAve=PosAll/PosNum;}  
  for(i=0;i<OrdersTotal();i++)
  { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
    { Ticket=OrderTicket();
      if(OrderType()==0)
      {PrSub=PosAve+Profit*Point;}
      else
      {PrSub=PosAve-Profit*Point;}
    int e=OrderModify(Ticket,OrderOpenPrice(),0,PrSub,0,CLR_NONE);
    }
  }
return(0);
}

2016年1月2日土曜日

MACDまとめ

その後MACDと平均化の探求を行いました。
やったことは
エントリーからクローズまでの時間縛り、価格縛り、無限購入、平均化、平均化のポジション数限定、平均化の両建て、平均マーチンゲール、平均オーダー数可変、平均時期可変、平均モンテカルロ、平均1,1,3法そして結論が出ました。
平均買い建て、売り建て継続のお年玉EAこちらがBESTですね。
やはりシンプルが一番なのでしょうか。
もう一つだけ気になったのは平均価格を下回った時だけBETする事でポジション数を減らすことができました。
しかし利益が減るのと初期証拠金が20万円必要なので残念でした。
なにかアイデアがありましたら教えて下さいm^^m







にほんブログ村 為替ブログ システムトレード 自作EA派へにほんブログ村

MACD Ver3 失敗作(><;) 達成のカギ、赤い飛行石!!

伏見稲荷1,000本鳥居へ行ってきました。
ひたすら続く鳥居そして無数の祠
そして目的地は眼力社
先見の目を授けてくれる神様です。
神様に5分後のチャートが見えるようにお願いしたところ、
「願いはかなえられよう」と神様の声が聞こえた気がします。
達成のカギと赤い飛行石です。
こんな鍵の形のチャートを作ってみたいものです。


今日はMACDのアベレージシステムを両建て向けに改良しました。
MT5では両建てをするとLONGとSHORTを自動的に相殺するらしいので、
それを作ってみました。
苦労したのですが、結果はご覧のとおりです。
相殺することで勝率が下がりました。
そして、負けトレードの単価の大きさに引きずられそのまま...
いちおうソースも載せておきますが、使用は厳禁です。
バルス!!
にほんブログ村 為替ブログ システムトレード 自作EA派へ
にほんブログ村

#property copyright "Copyright 2015/12/31,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAGIC 2016
datetime TimeOld;
int Ticket;
extern int Profit=10;
double PrSub;
double PosAve;
int d;
extern double Lots=0.01;
int start(){if(Time[0]!=TimeOld){TimeOld=Time[0];
//if(PosAve>Close[0])
{if(iMACD(NULL,1,12,26,12,0,0,2)<=iMACD(NULL,1,12,26,12,0,1,2))
{if(iMACD(NULL,1,12,26,12,0,0,1)>iMACD(NULL,1,12,26,12,0,1,1))
{EntryL();Averaging(); }}}
//if(PosAve<Close[0])
{if(iMACD(NULL,1,12,26,12,0,0,2)>=iMACD(NULL,1,12,26,12,0,1,2))
{if(iMACD(NULL,1,12,26,12,0,0,1)<iMACD(NULL,1,12,26,12,0,1,1))
{EntryS();Averaging(); }}}
 
}return(0);}
int Averaging()
{ double LastPrice=0;double PosAll=0;double PosNum=0;
  for(int i=0;i<OrdersTotal();i++)
  {d=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    LastPrice=OrderOpenPrice();
    PosAll+=LastPrice*OrderLots();
    PosNum+=OrderLots();
  }
  if(PosNum==0){PosAve=0;}
  else{ PosAve=PosAll/PosNum;}
  for(i=0;i<OrdersTotal();i++)
  { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
    { Ticket=OrderTicket();
      if(OrderType()==0)
      {PrSub=PosAve+Profit*Point;}
      else
      {PrSub=PosAve-Profit*Point;}
    d=OrderModify(Ticket,OrderOpenPrice(),0,PrSub,0,CLR_NONE);
    }
  }
return(0);
}
int EntryL()
{
if (OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)==1)
{ if(OrderType()==0)
  { if(PosAve>Close[0]){d=OrderSend(NULL,0,Lots,Ask,3,0,Bid+Profit*Point,"Long",MAGIC,0,Red);return(0);}}
  else
  { d=OrderClose(OrderTicket(),Lots,Ask,3,Blue);Comment("a");}}
else
{ d=OrderSend(NULL,0,Lots,Ask,3,0,Bid+Profit*Point,"Long",MAGIC,0,Red);return(0);}

return(0);}

int EntryS()
{
if (OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)==1)
{ if(OrderType()==1)
  { if(PosAve<Close[0]){d=OrderSend(NULL,1,Lots,Bid,3,0,Bid-Profit*Point,"Short",MAGIC,0,Blue);return(0);}}
else
  { d=OrderClose(OrderTicket(),Lots,Bid,3,Red);}}
  else
{ d=OrderSend(NULL,1,Lots,Bid,3,0,Bid-Profit*Point,"Short",MAGIC,0,Blue);return(0);}

return(0);}

2016年1月1日金曜日

新年おめでとうございます。 お年玉EA MACD改!

新年おめでとうございます。
昨日は飲みすぎました。
今から伏見稲荷の眼力社へ行って先見の目を授かりたいと思います。
お狐様5分後の未来が見えるようにしてください。

さてお年玉企画MACD改良型です。
年末のMACD3minは買い建てのみでしたが、売り建てもできるようにしました。
ポジションがあるときはそのポジションと同じ方向のみとなります。
ポジションを持っていない時にはどちらか先に出たシグナルの方向になります。
11カ月で10万⇒23万と2万円改善しました。
最大47本立てています。建て玉は減らしたかったのですが4本増えてしまいました。
ソースコードは例によって下に張り付けてあります。
にほんブログ村 為替ブログ システムトレード 自作EA派へ
にほんブログ村


#property copyright "Copyright 2015/12/31,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
datetime TimeOld;
int Ticket;
extern int Profit=10;
double PrSub;
int Mode=0;
extern double Lots=0.01;
int start(){if(Time[0]!=TimeOld){TimeOld=Time[0];
if(OrdersTotal()==0){Mode=0;}
if(Mode>=0){
if(iMACD(NULL,1,12,26,12,0,0,2)<=iMACD(NULL,1,12,26,12,0,1,2))
  {if(iMACD(NULL,1,12,26,12,0,0,1)>iMACD(NULL,1,12,26,12,0,1,1))
    {int b=OrderSend(NULL,0,Lots,Ask,3,0,Bid+Profit,"Long",1231,0,Red);Mode=1;}}}
if(Mode<=0){
if(iMACD(NULL,1,12,26,12,0,0,2)>=iMACD(NULL,1,12,26,12,0,1,2))
  {if(iMACD(NULL,1,12,26,12,0,0,1)<iMACD(NULL,1,12,26,12,0,1,1))
    {int c=OrderSend(NULL,1,Lots,Bid,3,0,Bid-Profit,"Short",1231,0,Blue);Mode=-1;}}}  
Averaging();  
}return(0);}
int Averaging()
{ double PosAve=0;double LastPrice=0;double PosAll=0;double PosNum=0;
  for(int i=0;i<OrdersTotal();i++)
  {int d=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    LastPrice=OrderOpenPrice();
    PosAll+=LastPrice*OrderLots();
    PosNum+=OrderLots();
  }
  if(PosNum==0){PosAve=0;}
  else{ PosAve=PosAll/PosNum;}
  for(i=0;i<OrdersTotal();i++)
  { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
    { Ticket=OrderTicket();
      if(OrderType()==0)
      {PrSub=PosAve+Profit*Point;}
      else
      {PrSub=PosAve-Profit*Point;}
    int e=OrderModify(Ticket,OrderOpenPrice(),0,PrSub,0,CLR_NONE);
    }
  }
return(0);
}