2013年3月30日土曜日

だめだめを公開

RANGEツールの勢いが1未満(勢いがない)の時に、hMAツールでの移動平均計算を行わない。 と したらどうなるのか

ということを昨日書きましたが

実際にどれくらい儲かるのか、損するのかを簡易な方法として組み込んで結果を出力するように改造したバージョンが出来ました。

このままでは損するだけなのですが、あえて公開します。

まじめに使ってはなりません が エントリーは悪くないはずですのでクローズを工夫することで多少は使い道があるのかもしれません。

でも 使って頂きたくて公開するのではなく、この先、このツールをひとつひとつ手を入れて行きますので、途中経過を残すものとして、使ってはならないツールを公開します。




















例によって手抜きプログラムなのですが、エントリーとクローズのサインも思い切って簡略化しています。 普通ならは矢印でlongかshort、エントリーかクローズを別々な記号で表すわけですが、その為には4つの矢印が必要になるので、今回はなんと、EMA9の下に表示されているか、上に表示されているかでlongかshortを表しています。

EMA9(白い線)の下 long
同 上         short

エントリーかクローズかは

エントリー 白色
クローズ  赤色

ということで2つの記号のみです




















ロジック

エントリー

RANGEツールの勢いが1を超えた時に、hMAの色に従ってエントリーします。

クローズ

エントリーした色と反対の色が出現したらクローズします。同じ色が出てもそのままホールドします。



マイナスになるケース


















図ではshortとlongのマイナス例を示しています。
エントリーはそんなに悪くないと思うのですが、クローズに失敗しています。
移動平均系が避けられないクローズの遅さ。と言うのは少し乱暴で、クローズの方法が単純すぎることだと考えています。(図のlongは他の方法でもマイナスになってしまうかもしれませんが)

設定方法

今回のプログラムは2つのex4ファイルを使って動かしています。
公開済みのRANGEツールとhMAツールがベースなのですが、2つを連携させているのでプログラムを別に用意しました。

ダウンロード Nonlag_hMA_with_Signal_DontUSE.zip ファイルを2つZIP圧縮しています。

不具合を一部修正し再掲載 2013/03/13  Nonlag_hMA_with_Signal_DontUSE_0331.lzh

解凍後同じフォルダーに入れて動かしてください。 DontUseの方が本体です。

本体側プログラムがMT4のiCUSTOM関数でRANGEツールの値を取り出しています。
























パラメータ設定

新しく追加しているもののみ書きます。

Short Range 係数 と Long Range 係数 はRANGEツールの2つの値を合成計算するパラメーターです。

ERUJP 1時間の時にShort=1,Long=0にすると最も良い結果が出ましたが、それ以外の組み合わせと、それ以外の通貨では残念な結果になりました。

Notifyは EntryとCloseのサインが出た時に通知を行う機能です。

1:PUSHはiPhoneやAndroidのPushで通知します
2:メールはメール通知
3:AlertはMT4のAlert関数を利用

ただし、これを設定してインケーターを動かすと、過去のサインから順番に処理しますのでPUSHでは最初の通知のみ(一定時間内の回数制限を超えている)、メールは2通目が少し時間を開けて到着(全部到着するか怪しいです)、Alertは数が多くてなにがアラートなのかわからない状態になります。

これも徐々に直して行きますので、今回は笑いのネタとしまして。


プログラムの解説は初めてだと思いますが、興味がある方のみにNotify部を説明しますと

1.後からなんだっけ? となりそうなことをプログラムの最初で定義しておきます

#define open.long 0
#define open.short 1
#define close.long 2
#define close.short 3

#define Notify.non 0
#define Notify.push 1
#define Notify.mail 2
#define Notify.alert 3

2.文字列配列を用意し
string Notify.mes[4];

3.Init部で初期化
 Notify.mes[open.long]="Open Long position ";
 Notify.mes[open.short]="Open Short position ";
 Notify.mes[close.long]="Close Long position ";
 Notify.mes[close.short]="Close Short position ";

4.処理部分(メインループから呼び出されます)

void Notice(int OP)   このOPは最初に定義された値のいずれか
{
        if(Notify==Notify.non) return(0);
        if(OP <0 || OP >3) return(0);
        
        string mes=Notify.mes[OP];
        if(OP<2)
        {
                mes =mes+DoubleToStr(Price.open,Digits);   Price.openはエントリー時価格
        }
        else 
        if(OP==2)
        {
                mes =mes+"profit "+DoubleToStr(Price.close - Price.open,Digits)+".";
        }
        else
        if(OP==3)
        {
                mes =mes+"profit "+DoubleToStr(Price.open - Price.close,Digits)+".";
        }
                
        if(Notify==Notify.alert)
        {
                Alert(mes);
        }
        
        if(Notify==Notify.mail)
        {
                SendMail("Nonlag_hMA",mes);
        }
        
        if(Notify==Notify.push)
        {
                SendNotification(mes);
        }
                
MT4ではメール送信、Push送信ともにMT4のターミナルで予め設定しておく必要があります。
プログラムでは単に1行書くだけなので、予め設定を行なっておいてください。

メールはYahooメールが一番簡単に設定できます。
Pushはスマートフォン用のMT4をダウンロードして、スマートフォンアプリの中でID番号を確認する必要があります。


0 件のコメント:

コメントを投稿

コメントありがとうございます。

すぐに返信できないことが多いかもしれませんが、よろしくお願いいたします。