2016年6月3日金曜日

【EAを作ろう】第十五回 ぽちぽち補助EAを作ります!

わたしもポチポチ病の重症患者です。
EAが稼いだ分をそっくりそのままポチポチで失います@@;

早くエントリーしたいと我慢できずにポチ!
含み損が多くなる前にポチ!
冷静に考えると待てないのです。

そこで!!いままでの関数で、ぽちぽち補助EAを作ります。
エントリー用にアラートシステム
クローズは自動的にシャンデリア・トレーリング

行動様式は画面に張り付いてチャートを注視する状態から、ポテチを食べながら、漫画を読みながら、アラートが鳴ったら画面確認と決定的な変革が起こります。太りそう・・・

ボリンジャ・バンドをこえたらアラート
MACDがクロスしたらアラート
RSIが70,30を超したらアラート

ポジションがあるときは自動的にシャンデリア・トレーリング
儲かった時にはマリオのコインをとるコイーン♪を鳴らしたいのですが音源がありません・・・

#property copyright "Copyright 2016/6/3,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
int d;double TSL,OTSL,SL;datetime TimeOld;
input int ChandelierTrailing=60;
input string RSI;
input int RSIPeriod    = 14;
input int RSIUpperLine = 70;
input int RSIBelowLine = 30;
input string MACD;
input int MACDFastPeriod=12;
input int MACDSlowPeriod=26;
input int MACDSignalPeriod=9;
input string BollingerBands;
input int BandsPeriod=20;
input double BandDevision=2.0;

void OnTick(){if(OrdersTotal()!=0){CS();}
if(Time[0]!=TimeOld){TimeOld=Time[0];
if (RSI(2) < RSIUpperLine && RSI(1) > RSIUpperLine){Alert("RSI above the " + RSIUpperLine);}
if (RSI(2) > RSIBelowLine && RSI(1) < RSIBelowLine){Alert("RSI below the " + RSIBelowLine);}
if (MACD(0,2)<MACD(1,2)&&MACD(0,1)>MACD(1,1)){Alert("MACD Golden Cross");}
if (MACD(0,2)>MACD(1,2)&&MACD(0,1)<MACD(1,1)){Alert("MACD Deadly Cross");}
if (Band(1)<Close[1]){Alert("Bollinger Bands above the " + BandDevision);}
if (Band(2)>Close[1]){Alert("Bollinger Bands below the " + -BandDevision);}
}}

double RSI(int Shift){return(iRSI("",0,RSIPeriod,0,Shift));}
double MACD(int mode,int shift){return( iMACD("",0,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,0,mode,shift) );}
double Band(int mode){return( iBands("",0,BandsPeriod,BandDevision,0,0,mode,1) );}

void CS(){
d=OrderSelect(0,SELECT_BY_POS);
if(OrderType()==0)
{if(TSL<Close[0]){TSL=Close[0];SL=TSL-ChandelierTrailing*Point;}}
else
{if(TSL>Close[0]){TSL=Close[0];SL=TSL+ChandelierTrailing*Point;}}
if(TSL!=OTSL){OTSL=TSL;d=OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrNONE);
}}

意外と長くなってしまいました・・・
#propertyでコピーライトとブログのページを載せていますが、
ソースをコピーされた多くの人は書き換えるようです@@;

input~が続きます。各設定を好きなように変更してください!
定数の名前は短いのが好きなのですが、input やexternは変数名がそのまま表示されますので、
解りやすくしています。

input string~は設定画面で各項目の区切りがわかりやすいようにいれています。
RSI は定数、RSI() は関数です。別の物として扱われます。

void OnTick()でポジションを持っている時 OrdersTotal!=0 の時はCS()シャンデリアストップ関数へ飛ばしています。
その次の行ではTime[0](その足の始まった時間)を見ています。
Time[0]をTimeOldに格納してTime[0]とTimeOld(ひとつ前のTime[0])を比較しています。
足が変わるとTime[0]が変わります。
足が変わるたびにその下を動作させます。

アラートが鳴り続けてポテチタイムを阻害されるのを防ぐためです。

そしてその下は条件がそろえばアラートを鳴らします。
一番上はRSI(2)二本前のRSIが上の線より下でRSI(1)一本前のRSIが上の線より上になった時にアラートを鳴らします。一度上の線より下に来ないと再びアラートはならないようにしています。

Alertは( )の中に文字列を入れます。
線の位置は70以外にも設定できるようにしましたので + RSIUpperLineでいくつを超えたかわかるようにしました。 

あとは追っかけて読んでみてください。
ブログに乗せるには長めのソースコードになりましたが、していることはシンプルです!











0 件のコメント:

コメントを投稿