検索結果

タグ検索

FX自動売買「Dr.EAのブログ」で“VQ”タグの付いているブログ記事

下記のエントリー(記事)が検索結果となります。

VQをEA内で計算する方法

のやり方でいきますと、

extern   bool     Crash = false;
extern   int      TimeFrame = 0;
extern   int      Length = 5;
extern   int      Method = 3;
extern   int      Smoothing = 1;
extern   int      Filter = 5;
extern   int      SignShift = 1;

として、VQからコピペ&SignShiftというパラメータを追加。
そして、Start()関数内で

int sign;
sign = iCustom(NULL, TimeFrame, "VQ", Crash, 0, Length, Method, Smoothing, Filter, 6, SignShift );

とすれば、買い状態の時は、sign が1、売り状態の時は、sign が-1となり、あとは条件をいろいろと加えるだけですね^^

でも、VQ自体にいろいろな機能が付いているため、EA内で計算したほうが稼動がスムーズです。

VQを内部で計算したEAのコード

extern string  Entry_Setting  = "---------- Entry Setting";
extern double  Lots           = 0.1;
extern int     StopLoss       = 50;
extern int     TakeProfit     = 100;
extern int     Slippage       = 3;
extern int     MagicNumber    = 123456;

extern string Indicator_Setting = "---------- Indicator Setting";
extern int     TimeFrame      = 0;
extern int     Length         = 5;
extern int     Method         = 3;
extern int     Smoothing      = 1;
extern int     Filter         = 5;

extern int     EntryShift     = 1;
extern int     ExitShift      = 0;

//記憶用共通変数
int VQsign[2];    //VQのシグナル
int VQsignbar[2]; //VQのシグナルが出た場所(足の番号)
int bar;          //エントリした時の足の数(足の番号)

int init()
  {
//----
   ArrayInitialize(VQsign,0);
   ArrayInitialize(VQsignbar,0);
   bar=0;
//----
   return(0);
  }

int start()
  {
//----
   //VQ sign計算************
   FuncVQ(0);
   FuncVQ(1);
   
   //オーダーに関する部分******
   
   //現在のポジションの情報を取得
   int pos=-1;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) pos=i;
   }
   
   /*
   この時点でポジションなしの場合 pos は -1
   ポジションありの場合 pos は、そのポジションのインデックスの値
   となります。
   */
   
   //ポジション有りの場合
   if(pos>=0)
   {
      //そのポジションを選択し情報を取得できるようにする
      OrderSelect(pos,SELECT_BY_POS);
      
      if((OrderType()==OP_BUY && VQsign[ExitShift]==-1) || (OrderType()==OP_SELL && VQsign[ExitShift]==1))
         OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Yellow);
   }
   
   int ticket=0;   //注文番号を代入する変数
   double sl,tp;   //ストップとリミットを代入する変数
   
   //まだエントリしていない足で ポジションなしの場合
   if(bar!=iBars(NULL,TimeFrame) && pos<0)
   {
      //エントリ条件を計算
      int sign;
      if(VQsignbar[EntryShift]==iBars(NULL,TimeFrame)-EntryShift)
      {
         if(VQsign[EntryShift]==1) sign=1;
         if(VQsign[EntryShift]==-1) sign=-1;
      }
      
      //sign が 1 の場合
      if(sign==1)
      {
         sl=Ask-StopLoss*Point;
         if(StopLoss<=0) sl=0;
         tp=Ask+TakeProfit*Point;
         if(TakeProfit<=0) tp=0;
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,sl,tp,NULL,MagicNumber,0,Blue);
      }
      //sign が -1 の場合
      if(sign==-1)
      {
         sl=Bid+StopLoss*Point;
         if(StopLoss<=0) sl=0;
         tp=Bid-TakeProfit*Point;
         if(TakeProfit<=0) tp=0;
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sl,tp,NULL,MagicNumber,0,Red);
      }
      //エントリした時の足の数を代入
      if(ticket>0) bar=iBars(NULL,TimeFrame);
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

//VQ keisan
void FuncVQ(int VQshift)
{
   double MH1,ML1,MO1,MC1,MCS1,VQ1,SumVQ1,SumVQ2;
   HideTestIndicators(true);

   if(MathAbs(VQsign[VQshift])!=1)
   {
      for(int j=0;j 0) if (MathAbs(SumVQ1 - SumVQ2) < Filter * Point) SumVQ1 = SumVQ2;

         if(SumVQ1 > SumVQ2)
         {
            if(VQsign[VQshift]==-1) break;
            
            VQsign[VQshift]=1;
            VQsignbar[VQshift]=iBars(NULL,TimeFrame)-VQshift-j;
         }
         if(SumVQ1 < SumVQ2)
         {
            if(VQsign[VQshift]==1) break;
            
            VQsign[VQshift]=-1;
            VQsignbar[VQshift]=iBars(NULL,TimeFrame)-VQshift-j;
         }
      }
   }
   
   MH1 = iMA(NULL,TimeFrame,Length,0,Method,PRICE_HIGH,VQshift);
   ML1 = iMA(NULL,TimeFrame,Length,0,Method,PRICE_LOW,VQshift);
   MO1 = iMA(NULL,TimeFrame,Length,0,Method,PRICE_OPEN,VQshift);
   MC1 = iMA(NULL,TimeFrame,Length,0,Method,PRICE_CLOSE,VQshift);
   MCS1 = iMA(NULL,TimeFrame,Length,0,Method,PRICE_CLOSE,VQshift + Smoothing);
   
   if(MathMax(MH1 - ML1,MathMax(MH1 - MCS1,MCS1 - ML1))==0 ||(MH1 - ML1)==0) return(0);
   
   VQ1 = MathAbs(((MC1 - MCS1) / MathMax(MH1 - ML1,MathMax(MH1 - MCS1,MCS1 - ML1)) + (MC1 - MO1) / (MH1 - ML1)) * 0.5) * ((MC1 - MCS1 + (MC1 - MO1)) * 0.5);
   SumVQ2 = iClose(NULL,TimeFrame,2);
   SumVQ1 = SumVQ2 + VQ1;
   if (Filter > 0) if (MathAbs(SumVQ1 - SumVQ2) < Filter * Point) SumVQ1 = SumVQ2;

   if(SumVQ1 > SumVQ2 && VQsign[VQshift]==-1)
   {
      VQsign[VQshift]=1;
      VQsignbar[VQshift]=iBars(NULL,TimeFrame)-VQshift;
   }
   if(SumVQ1 < SumVQ2 && VQsign[VQshift]==1)
   {
      VQsign[VQshift]=-1;
      VQsignbar[VQshift]=iBars(NULL,TimeFrame)-VQshift;
   }
   if(VQshift==0 && SumVQ1 == SumVQ2)
   {
      VQsign[0]=VQsign[1];
      VQsignbar[0]=VQsignbar[1];
   }
   HideTestIndicators(false);
}

今回は詳しい説明は、省略です^^;

ソースファイルもアップしますので、いろいろと改良してみてくださいね!

→VQsimple.mq4ダウンロード

でわ、今回はこのへんでm(..)m

VQの関連記事

カスタムインジケータをEAにする方法の関連記事

タグ

VQpsV2テスト終了


EAテスト用口座でのVQpsV2のテストを終了しました。

少資金のため、ロスカットになってしまいましたが^^;、
最低資金量を守れば、パラメータをそのままでもプラスになっているので、
まずはこのバージョンで実運用しようかと思ってます。


121証券

先月まで、通貨ペア名の最後に【_】アンダーラインがついてましたが、
今月からなくなりました。

EAでの情報取得時も、楽になりましたね!


でわ、このへんで。

タグ

2008年12月 3日|コメント (24)トラックバック (0)

カテゴリー:その他

VQpsV2

もうすでに、お気づきの方もいらっしゃるかと思いますが、1ヶ月ほど前から
このブログのどこかに、EAテスト用のリアル口座(FXDD・マイクロロット・最低資金)
へのリンクがあります^^;

はじめは、マイクロロットではなかったのですが、購入したEA(EURUSD.M30で使うもの)
でマイナスになってしまいましたので^^;
VQsimpleDePS(自作EA)を改良しつつ
現在はVQspV2(自作EA改良版)で右肩上がりになってますv^-^

9月16日 $466.65
から運用

約2ヶ月で+230ドル前後(+50%前後)

です。

FXDDのUSDJPYのスプレッドは3pips。
トレード回数が470以上。

コストがかなりかかっています^^;
スプレッドでEAのパフォーマンスも落ちていると思います・・・。


なので、実運用(低資金でない運用)は、

121証券

で行なうことにしました!

11月10日より USDJPYのスプレッドが1pipsになったそうです。

日本の会社、MetaTrader4でEAが使える、スプレッド1pipsということで今のところは最高の条件だと思います^-^


口座開設の手続きをはじめたばかりですので、まだ口座はないのですが、
ワクワクしています^-^

→121証券

タグ

2008年11月18日|コメント (8)トラックバック (0)

カテゴリー:その他

VQの計算方法


今回は、VQの中身のお話です^^

VQって何?ってゆう方は
http://samuraifx.seesaa.net/article/102860052.html
↑の記事を読んでみてください^^;


VQの値は、次の計算式で割り出しています。
(説明のため形を変えてます。このままではうごきません^^;)

MH = iMA(NULL,0,Length,0,Method,PRICE_HIGH,0);
ML = iMA(NULL,0,Length,0,Method,PRICE_LOW,0);
MO = iMA(NULL,0,Length,0,Method,PRICE_OPEN,0);
MC = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,0);
MCS = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,Smoothing);

VQ0 = MathAbs(((MC - MCS) / MathMax(MH - ML,MathMax(MH - MCS,MCS - ML)) + (MC - MO) / (MH - ML)) * 0.5) * ((MC - MCS + (MC - MO)) * 0.5);

SumVQ= Close[1] + VQ0;
if (Filter > 0 && MathAbs(VQ0) < Filter * Point)
SumVQ = SumVQ1;

↑この【SumVQ】というのが、VQの値です。
(注意:チャートの通貨ペア・時間足、現在変動中のバーの値)


では上の方から見ていきましょうか!

MH = iMA(NULL,0,Length,0,Method,PRICE_HIGH,0);
ML = iMA(NULL,0,Length,0,Method,PRICE_LOW,0);
MO = iMA(NULL,0,Length,0,Method,PRICE_OPEN,0);
MC = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,0);
MCS = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,Smoothing);

VQのパラメータである、Length,Method,Smoothingはここで使われます。

それぞれ、高値、安値、始値、終値、Smoothing本前までの終値
の移動平均ですね。
ちなみに、
Lengthは平均する期間
Methodは平均の方法(4種類)
MODE_SMA 0 単純移動平均
MODE_EMA 1 指数平滑平均
MODE_SMMA 2 平滑平均
MODE_LWMA 3 加重平均
です。


VQ0 = MathAbs(((MC - MCS) / MathMax(MH - ML,MathMax(MH - MCS,MCS - ML)) + (MC - MO) / (MH - ML)) * 0.5) * ((MC - MCS + (MC - MO)) * 0.5);

さっき計算した移動平均をつかって計算します。
ここで出てくる
MathAbs はカッコ内の絶対値
MathMax は、コンマの左右でおっきい方
といった意味です。

ごちゃごちゃしてるので、紙に書いて確認してみてください^^;

MH - ML
MH - MCS
MCS - ML
の内、最大のもので
MC - MCS
を割ったものと、
MH - ML

MC - MO
を割ったものを
足して0.5をかけたものと、
MC - MCS

MC - MO
を足して0.5をかけたものを
かけた値

となるでしょうか^^;


最後に
SumVQ= Close[1] + VQ0;
if (Filter > 0 && MathAbs(VQ0) < Filter * Point)
SumVQ = SumVQ1;

VQのパラメータである、Filterはここで使われます。

一旦、SumVQ に前のバーの終値に VQ0 を足したものを代入して、
もし、Filterが0より大きくて、VQ0の絶対値がFilterピプスよりちいさかったら、
SumVQ は SumVQ1(前のバーのSumVQ)を代入。

といった感じです。

SumVQ= Close[1] + VQ0
となって、値に変化があったときにシグナルを出すのですが、
今までと同じ方向への変化はシグナルを出さないようにしてありますので、売り買い交互のシグナルになる感じです。


基本部分はこんな感じですね^^;

でわ、このへんで。

タグ

2008年11月 8日|コメント (3)トラックバック (0)

カテゴリー:EAの作成方法

VQに関するお知らせ

前回、VQに関するEAをアップしたのですが、不具合がございましたので、修正しアップし直しました。今日の午前中までにダウンロードされた方は、お手数ですがもう1度ダウンロードし直してくださいm(..)m

商材の特典のVQsimpleDePSも、不具合がございましたのでメールでダウンロードされたVQsimpleDePSを送っていただければ、修正したものを送付します。
ご自身で修正される場合は、ポジションを持っていないときは、VQのサインが出たバーのみ、トレンドサインを出すようにしてください。

VQsimpleをGBPUSDの5分足で最適化してみました。

StopLoss 90
TakeProfit 60
Filter 7

に変更でなんとか利益がでました^^;


VQSimpleDePSは、USDJPYの1時間足で

trailingpips 35

に変更で、取引時間を指定するとよさそうでした。


その他、いろいろ試してみてくださいね!

でわ、このへんで。

タグ

2008年7月21日|コメント (4)トラックバック (0)

カテゴリー:その他

VQとVQ_EAと商材紹介^^;

今回は、VQ(Volatility Quality)というインディケータの紹介です!

私は、FXのインディケータなどをとてもよく研究されている方から教えてもらい、知りました。

ダウンロードはこちら→VQのページ

『VQ_EA』というのがEAで、『VQ』というのがインディケータです。
それぞれのフォルダに入れましょう!
(ダウンロード先参考記事→ダウンロードしたものを使う

インディケータの完成度、EAの完成度ともに抜群だと思います!

が、

・・・

重たいです^^;

これは、インディケータの計算部分で時間がかかっているのだと思います。
これでは、検証作業がなかなか進みません。

そこで、VQの計算部分だけを抽出し、シンプルなEAを作りました。
EAのみで、計算するので検証もスムーズにできます。

バックテスト用のEA(ex4ファイル)ダウンロードはこちら↓
VQSimpleForTest.zip(ex4ファイル)

さらに、このサインにPipShaker(改)を搭載したものを作りました!

バックテスト用のEA(ex4ファイル)ダウンロードはこちら↓
VQSimpleDePSforTest.zip(ex4ファイル)

これで、VQの検証効率が飛躍的にアップしました!

商材紹介終了しました^^;

では、このへんで。

タグ

2008年7月15日|コメント (6)トラックバック (0)

カテゴリー:MetaTrader EA