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);
}
今回は詳しい説明は、省略です^^;
ソースファイルもアップしますので、いろいろと改良してみてくださいね!
でわ、今回はこのへんでm(..)m
VQの関連記事
カスタムインジケータをEAにする方法の関連記事
タグ
取引を有利にする方法 = CashBackForexのキャッシュバック
次のバックテストレポートを見てください。
トレードルール検証中によくある右肩下がりの失敗EAです^^;
すべて1ロット(10万通貨)で取引して、5ヶ月ちょっとで約-2582ドル。
動かせば動かすだけ資産が減っていきます。
ここで少し、コストを計算してみましょう。
通貨ペアは、ドル円(USDJPY)スプレッド2ピプスとします。
1ピプスあたりのコストが1000円(現在のレートで約10.7ドル)ですので、
1トレードあたり、21.4ドルのコストがかかります。
取引総数が、853回ですので、21.4ドル×853回で、
コスト総額:18254.2ドル
スプレッドがなければ、資産は約2.5倍に膨らんでました。
キャッシュバックでコスト削減
今度は、無料登録でキャッシュバックが受けられるCashBackForexに登録していた場合の計算をしてみましょう。
取引ブローカーによって、還元率が違いますが、
FXCM(1トレードあたり、0.7ピプス)の場合、
1トレードあたり、10.7ドル×0.7ピプス=7.49ドルのキャッシュバック。
取引総数が、853回ですので、7.49ドル×853回で、
キャッシュバック総額:約6389ドル
差し引き、約3807ドルの利益で、右肩上がり、
動かせば動かすだけ資産が増えていきます。
ごく単純計算で、100万円の資産から、5ヶ月で26万円の損失を出すEAが38万円の利益を出すEAになったということです^^
普通に利益を出すEAなら、更に利益増です。
まだ、登録されていない方は、すぐ登録されることを強くお勧めいたします。
CashBackForex無料登録方法
上のページにジャンプ後、メニューバーの【Signup】をクリック。
- First Name(名前)
- Last Name(苗字)
- Username(ニックネーム)
- Password(パスワード)
- Confirm Password(パスワード再入力)
- Preferred Broker(使いたいブローカー)
- Email Address(メールアドレス)
を入力し、Accept Terms of Use(利用規約への同意)にチェックします。
Registerボタンをクリックして登録完了です^^
日本語ページがないようですので、分からない部分はGoogle翻訳などで、しらべながら見てみましょう^^;
ブローカーによって既存の口座を登録できる場合や、新規で口座を開設する必要がある場合があります。
無料で将来の利益の増減が変わるのであれば、1回の手続きはそれほど手間ではないですよね^^
でわこのへんで。
2009年8月28日|
カテゴリー:その他
会社設立で税金対策
今回は、税金のことについてです^^;
通常のブローカーで、個人でFXをやっている場合、FXの利益は雑所得として納税しなければなりません。
去年マイナスで、今年その分を取り返してトントンとなったとしても、
今年の利益分に税金がかかり、結局マイナスになってしまいます--;
運用資金が大きくなってきたら、会社設立して税金対策をしたほうがお得のようです。
大変お世話になっている山田先生のページでFXの会社設立と税金の比較についての情報がありますので紹介します。
年間の利益が大きくなってきたら相談してみるといいかもですね^^
でわでわ^^
2009年8月 8日|
カテゴリー:その他



