2016年5月9日月曜日

EA MA-TS   平均MA VS BULL,BEAR

平均からある乖離すると反転するというイメージでBULL,BEARのEAの作成を思いつきました。
泥酔状態での作成でしたが思ったより安定かつ結果がよく、大きな反響をいただきました。

BULL'S POWERは過去13回の最高値EMAと直近の終値との差Bear'S POWERは最低値EMAとの差です。

下の図は緑が終値
赤が最高値EMA(13) 青は最低値EMA(13) そして黄色は終値SMA(13)です。
SMA:単純平均 EMA:指数平均


印象は赤と青が平行しているのが驚きでした!
黄色をEMAにすると赤と青の間を走るのであえてSMAにしてみたのですが、黄色のほうがなだらかですね。
BULL,BEARにしなくても平均でいいかもと思ってきました。
ブルベアのメリットはブルベアのEAがあまりないので希少性、話題性はありそうです。
平均のメリットはブルとベアに分けないですむことと設定が簡単なことです。



ブルベアの時は期間を標準の13以外は試さなかったのですが、MAは期間も調整しました。
SMAの期間5 シャンデリア・トレーリングを付けました。
ブルベアはM5でしたがこちらはM1です。
取引数がブルベア 2,271 ⇒ MA 21,229へ増加 足が違うので当たり前かもしれません足の増加は5倍に対し9倍は驚くべきことです!
利益は ブルベア113,170 ⇒ MA468,220大幅増加です。

#property copyright "Copyright 2016/5/9,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
extern int TSProfit=20;
extern int MAPeriod=5;
extern double MADevision=0.0003;
extern int MAGIC=9;
extern int Spread=4;
extern double Lots=0.1;
datetime TimeOld;
int d,i;
double TSL,OTSL,SL;
double MA(){return(iMA(Symbol(),0,MAPeriod,0,0,0,1));}
double MAD(){return((MA()-Close[0])/Close[0]);}
void OnTick()
{
TS();
if(OrdersTotal()==0){
if(MarketInfo(Symbol(),MODE_SPREAD)<=Spread){
if(Time[0]!=TimeOld){TimeOld=Time[0];
if(MAD()>MADevision){E(0);}
if(MAD()<-1*MADevision){E(1);}
}}}}

void E(int BoS){
if(BoS==0){TSL=Ask;SL=TSL-TSProfit*Point;}
else{TSL=Bid;SL=TSL+TSProfit*Point;}
d=OrderSend(Symbol(),BoS,Lots,TSL,2,SL,0,NULL,MAGIC,0,0);}

void TS()
{d=OrderSelect(0,SELECT_BY_POS);if(OrderType()==0)
{if(TSL<Close[0]){TSL=Close[0];SL=TSL-TSProfit*Point;}}
  else
{if(TSL>Close[0]){TSL=Close[0];SL=TSL+TSProfit*Point;}}
if(TSL!=OTSL)
{OTSL=TSL;for(i=OrdersTotal()-1;i>=0;i--)
{d=OrderSelect(i,SELECT_BY_POS);
 d=OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,0);}}}












6 件のコメント:

  1. お世話になっております。キヨノリです。

    EA MA-TS、今の正式名称はEA MADだと思うのですが、このEAに
    ロータリーじゃない、クワトロでもない、そうです「Vシステム」を搭載しようと思うのですが、
    「Vシステム」のソースコードは以下のものでよいのでしょう?
    double Lots(){
    double e=AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
    double f=MarketInfo(Symbol(),MODE_MAXLOT);

    ひょとっすると、既に搭載済みなのでしょうか?

    勉強不足で申し訳ないのですが、教えていただければ幸いです。

    返信削除
  2. ご指摘のとおり平均乖離率なのでMADが正解です。
    MAだけだと平均になってしまいますね
    このEAや最近のEAにはVシステムを搭載しておりません。
    エントリーの比較をしたいのでVは不要かと考えております。
    Vをいれるとバックテストに時間がかかるというのも本音です ゴメンナサイ
    Vシステムのソースコードも進化しています。
    L=AccountFreeMargin()/MarketInfo("",MODE_MARGINREQUIRED);
    LB=MathFloor(L);LS=L-LB;
    これをvoid OnTick(){の次にセットしてください
    Lは最大発注可能ロットです。LBは最大ロットを何本発注するか、LSは端数です。
    d=OrderSend以下を
    for(i=0;i<LB;i++){d = OrderSend("",BoS,L,TSL,0,SL,TP,NULL,MAGIC,0,clrNONE);}
    d = OrderSend("",BoS,LS,TSL,0,SL,TP,NULL,MAGIC,0,clrNONE);}
    にして下さい。
    たぶんこれで行けると思います(未検証)

    返信削除
    返信
    1. 返信ありがとうございます。

      Vについて伺ったのですが、EA MADをVなしでリアルで運用してみます。

      削除
  3. 返信ありがとうございます。

    Vなしでリアルでやってみます。

    返信削除
  4. On Timerに変更してみます。

    返信削除
  5. OnTickをOnTimerに変更するとOnTickで反応しなくなります。
    if(OrderSTotal==0)でポジションを持っていない時にに発注するようにしていますので、
    発注エントリーをOnTickとOnTimerの両方にしてみてください。

    返信削除