かなりご無沙汰しておりますが、久しぶりにブログを更新します^^;
『誰もが結果が出せるロンドンコーリング手法をマネーパートナーズでやってみた【実践編】』という記事を見て面白そうだったのでEAを作成し検証してみました。
コード化
本来は、OCO注文ですが、そこは、EAということで通常の発注形態です。
//+------------------------------------------------------------------+
//| London_Call.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string Pd_time = "08:00";//日本時間15時
extern string Start_time = "14:00";//日本時間21時(夏時間20時)
extern int Week_index = 0; //0:all 1:月曜日 2:火曜日。。
extern int Type_Order = 1;//1:順張り 2:逆張り
extern int Tp = 100;//利食い値
extern int Sl = 100;//損切値
extern double lots = 0.1;//ロット
int magic = 20120803 ;//マジックNo
int shour;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){
shour = TimeHour(StrToTime(Start_time));
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
static bool set = false;
int index,n;
double tpf,spl,hi,lw;
if(Hour()==0) set = false;
if(Hour() < shour) return(0);
if( DayOfWeek() != Week_index && Week_index !=0)return(0);
if(!set){
index = iBarShift(NULL,0,StrToTime(Pd_time));
n = iBarShift(NULL,0,StrToTime(Start_time ));
hi = High[iHighest(NULL,0,MODE_HIGH,index,n+1)];
lw = Low[iLowest(NULL,0,MODE_LOW,index,n+1)];
if(High[0] > hi){
switch(Type_Order){
case 1 ://順張り
OrderPosition(magic,OP_BUY,lots,Tp,Sl);
set = true;
break;
case 2://逆張り
OrderPosition(magic,OP_SELL,lots,Tp,Sl);
set = true;
break;
default :
Print("typ_orderの設定が間違っています。");
return(0);
}
}
if(lw > Low[0]){
switch(Type_Order){
case 1 ://順張り
OrderPosition(magic,OP_SELL,lots,Tp,Sl);
set = true;
break;
case 2://逆張り
OrderPosition(magic,OP_BUY,lots,Tp,Sl);
set = true;
break;
default :
Print("typ_orderの設定が間違っています。");
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
void OrderPosition(int MagicNumber,int Type,double Lots,double TakeProfit,double StopLoss){
int Ticket;
double price;
int Slippage = 30;
double tkp,spl;
switch(Type){
case OP_BUY:
price = Ask;
if(TakeProfit>0) tkp = NormalizeDouble(TakeProfit*Point+price,Digits);else tkp =0;
if(StopLoss>0) spl = NormalizeDouble(price-StopLoss*Point,Digits); else spl =0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, price, Slippage,spl,tkp,"", MagicNumber, 0, DodgerBlue);
break;
case OP_SELL:
price = Bid;
if(TakeProfit>0) tkp = NormalizeDouble(price-TakeProfit*Point,Digits);else tkp=0;
if(StopLoss>0) spl = NormalizeDouble(price+StopLoss*Point,Digits); else spl =0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, price, Slippage,spl,tkp,"", MagicNumber, 0, DeepPink);
break;
default:
Print("????????");
レイアウトが崩れていますがご愛嬌で。。^^;
検証結果
テスト通貨ペア:EURUSD 期間 :5M スプレッド:1.0pips 期間2013/01/01~08/03
サーバー:アルパリJPデモ
順張り 利食値10pips 損切10pips(全曜日共通)
逆張り 利食値8pips 損切値10pips(全曜日共通)
月曜日順張り
月曜日逆張り
火曜日順張り
火曜日逆張り
水曜日順張り
水曜日逆張り
木曜日順張り
木曜日逆張り
金曜日順張り
金曜日逆張り
※今回の検証は、簡素化を図るため指標発表等を考慮していませんのでご注意ください。
まとめ
今回の検証では、思うような結果出ませんでした。どこか設計ミスがあるのかな?