2016年5月1日日曜日

BULLsPower & BearsPower  

プサンでアップしたブル&ベアのブログを間違えて消してしまったようです。(;´д`)トホホ

プサンのカジノで半日ビールを飲みながら考えたのは、
①MACDやボリンジャーバンドなどメジャーなインディケーターは終値を見ているのに、最高値、最低値を含むろうそく足を見るのは迷いが生じる。
②平均からの現在の終値の差の成長で未来が予測できる。

そして、バカラと酒に酔いながらひらめいたのがBULLsPOWER BearsPOWERです。

過去13回の最高値の平均-現在の終値がBULLsPOWER
最低値の場合はBearsPOWER

①とは逆なのですが最高値、最低値の差をみるのはCOA的発想でありですね。
②は終値平均で考えていたのですが、二つの平均の差というのは面白そうです。

そういえば有名なEA WhiteBear なんてのもありますが、あれももしかするとBEARかもしれませんね。

そして朝二時酩酊状態で作りました。(今回のはその時の進化版です)
作成の流れは
①ブル、ベア共に正ならLONGエントリー、両方負の時はSHORT
いい結果はでません。
②すこし下駄をはかせます。ブル、ベアともに0.1以上の時はLONG、以下同じ・・・
真横に進むグラフ
③シャンデリア・トレーリングを装備
いい結果になりました。
④足を5分に変更
完成です。

1・5分足においてシャンデリア・トレーリングは幅30以下での数値が出るのが、いいインジケーターです。40以上ではブレが生じます。
ブレというのは月別に見た時にマイナス月が多くなることです。
今回のEAはマイナス月0です。優秀かつ安定型ですね。

時々迷走していますが・・・
プログラムを覚えるときに他人のソースコードを見ると勉強になります。
しかしなかなかいい教材が無いのも事実です。
そこで、公開しようと思ったのがこのブログです。
という事はわかりやすいソースコードを書かなければならないのですね。
はい、がんばります。

#property copyright "Copyright 2016/5/1,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
extern int TSProfit=20;
extern int MAGIC=7;
extern int Spread=4;
extern double Lots=0.1;
datetime TimeOld;
int d,i;
double TSL,OTSL,SL;
double Bull(){return(iBullsPower(Symbol(),0,13,0,1));}
double Bear(){return(iBearsPower(Symbol(),0,13,0,1));}
void OnTick()
{
TS();
if(OrdersTotal()==0){
if(MarketInfo(Symbol(),MODE_SPREAD)<=Spread){
if(Time[0]!=TimeOld){TimeOld=Time[0];
if(Bull()> 0.1&&Bear()> 0.1){E(0);}
if(Bull()<-0.1&&Bear()<-0.1){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);}}}

4 件のコメント:

  1. TACA様
    いつも大変参考にさせて頂いています。

    今回のBullBearEAですが、ドル円だけでなくユーロドルでもバックテストしてみたいと思ってるのですがスプレッドを5に変更するだけではunmatched data error (low value 1.13126 at 2016.03.30 13:45 is not reached from the least timeframe, low price 1.13128 mismatches)の様にエラーが出て出来ません・・・

    何となくiBullPower,iBearPowerの式を変えれば良いような気がするのですが、何分MQLの知識が乏しいので上手く行かなくて困っております・・・
    力を貸していただけないでしょうか?
    よろしくお願いいたします。

    返信削除
  2. KSKさん初めまして
    unmatched data errorはパソコンの中のヒストリーデーターがおかしいという事で発生しています。
    USDJPYのヒストリーデーターは正しいものを使っているので動いているが、EURUSDのヒストリーデーターはおかしいので動かないという事です。
    ヒストリーデーターを削除して入れなおしてください。
    やり方はこちらのサイトがわかりやすいと思います。
    http://efxcursion.com/812.html
    因みにわたくしはFXDDのデーターを使っています。
    ソースコードのBull()>0.1のようなところが何個かあると思います。
    BULL BEARは最高値、最低値、終値を参考としています。
    USDJPYは少数3ケタ(ex. 106.160)で0.1
    EURUSDの場合少数5桁(ex. 1.15313)ですので0.001前後が最適だと思います。
    0.1のままではハードルが高すぎて動かないと思います・・・
    KSKときくと製薬卸さんを思い出します、

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

    3桁と5桁の違いということで、If(Ask<10の時は100倍する)という不細工な命令を追加しユーロドルも出来るようになりました!
    ありがとうございましたm(__)m

    KSKは製薬卸の会社なんですね知りませんでした…
    KSKで検索してみたらDAIGOの「K結婚SしてKくれませんか」がトップでした(笑)
    これからも更新楽しみにしております♪

    返信削除
  4. ASK<10は素晴らしいやり方ですね!

    Pointという関数があります。3桁の時はPoint=0.001 5桁の時はPoint=0.00001です。
    Bull()>0.1を Bull()>100*Pointにすればよかったと今気が付きました。

    応援ありがとうございます!!

    返信削除