メタトレーダー始めました。 [EA作成]
突然ですが、最近ずっと勉強しながら作成を進めていたメタトレーダーについて書こうと思います。
実は、既にいくつかのEA(Expert Advisor/エキスパート・アドバイザー)を作ったりしています。しかし、やはり一朝一夕に上手く行くわけも無く、迷路にハマっていました。現状は「EAが動作しない」とか「書き方が判らない」というあたりは通り過ぎて、EA自体は動作するようになっていますが、まず、バックテストでプラスになるようなEAにならないということも多く、なんとかバックテストを繰り返してパラメータをいじくり回してプラスになるようになっても「本来意図していた動作」と異なったり、バックテストでも「売り買いが極端に少ない」状態になったり、デモトレードで動作させても「プラスにならなかったり」と言う感じです。売り買いのポイントが意図と違うということも感じていて、なぜそこでエントリーしちゃうの?とか結構ありますね。
と、まあ、なんとかプログラムは書けるようになって来ているので、今回、あらためてエントリーの方法や売り買いの方法なども一からやり直そうと下記の様な方針を立てました。
(1) 複数の指標を「シグナル」と「トレンド」、「レジスタンス」用途に分けて使い、それぞれの指標に可変する重さ(ポイント制)を与えて売り買いシグナルを発生させる。
<シグナル>・・・Stochstics、RSI、MACD
<トレンド>・・・MA、GMMA、MACD、ボリンジャーバンド、パラボリックSAR
<レジスタンス>・・・ピボット、サポートアンドレジスタンス
(2) 可変する重さは、調整できる「パラメータ」としての重さ配分と「シグナル」の近接重複発生時の重みが増すような経過時間による減衰が起こるような仕組みにしたいと考えています。「トレンド」も同様にトレンド前期・中期に対し後期の重みが減衰するように調整したいと思っています。
上記を元に現在書きの様に書き進めています。
しかし、プログラムを表示するのは上手く行きませんね。なんか、いい方法ないかな?
[EAプログラム]
//+------------------------------------------------------------------+
//| Spreaded_Score_Type1_ver001.mq4 |
//| Littlecub |
//| http://littlecubonbackst.blog.so-net.ne.jp/ |
//+------------------------------------------------------------------+
#property copyright "Littlecub"
#property link "http://littlecubonbackst.blog.so-net.ne.jp/"
//---基本パラメータ
extern int MagicNumber = 20121119; //作成日をマジックナンバーとする
extern double Lots = 0.01; //初期値:最低ロット1000通貨単位とする(0.01)
extern int Slippage = 1; //初期値:1pips
extern int StopLoss = 50; //初期値:50pips(30pips以上でないとFXCMは受け付けない)
extern int TakeProfit = 50; //初期値:50pips(30pips以上でないとFXCMは受け付けない)
extern int TrailingStop = 50; //初期値:50pips(30pips以上でないとFXCMは受け付けない)
//---使用トレンド・シグナルなどのパラメータ
extern int TimeFrameMA = 60; //初期値:60minute
extern int TimeFrameGMMA = 60; //初期値:60minute
extern int TimeFrameMACD = 60; //初期値:60minute
extern int TimeFrameBB = 60; //初期値:60minute
extern int TimeFramePSAR = 60; //初期値:60minute
extern int TimeFramePIVOT = 60; //初期値:60minute
extern int TimeFrameSandR = 60; //初期値:60minute
//---機能使用スイッチパラメータ
extern bool UseStopLoss = False; //初期値:False
extern bool UseTakeProfit = False; //初期値:False
extern bool UseTrailingStop = True; //初期値:True
extern bool SignalMail = False; //初期値:False
extern bool EachTickMode = True; //初期値:True
extern bool ReverseSignal = False; //初期値:False
extern bool PositionClose = False; //初期値:False
extern bool ManyPosition = False; //初期値:False
//---外部宣言
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable |
//+------------------------------------------------------------------+
//---Signal 1 Stochstics
double StoSD1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,Current + 1);
double StoSD0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,Current + 0);
double Stoch1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,Current + 1);
double Stoch0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,Current + 0);
//---Signal 2 RSI
double StoSD1 = iSAR(NULL, 0, 0.005, 0.05, Current + 1);
double StoSD0 = iSAR(NULL, 0, 0.005, 0.05, Current + 0);
//---Signal 3 MACD
double Signal1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, Current + 1);
double Signal0 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double Macd1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, Current + 1);
double Macd0 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, Current + 0);
//---Trend 1 Stochstics
double EMA1 = iMA(NULL, TimeFrameMACD, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
double EMA0 = iMA(NULL, TimeFrameMACD2, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, Current + 0);
//+------------------------------------------------------------------+
//| Signal |
//+------------------------------------------------------------------+
//---Buy Signal
//---Sell Signal
//+------------------------------------------------------------------+
//| Check Position Exit&Trailing Stop
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Order
//+------------------------------------------------------------------+
}
//+------------------------------------------------------------------+