新しい記事を書くことで広告を消すことができます。
スプレッドは全て0で計算
EURUSD 4361トレード 3.18pips
USDJPY 2.08pips
GBPUSD 2.60pips
//+------------------------------------------------------------------+
//| Moving Average.mq4 |
//| Copyright ゥ 2005, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#define MAGICMA 20050612
extern double Lots = 0.1;
extern double MaximumRisk = 0.02;
extern double DecreaseFactor = 3;
extern double MovingPeriod = 12;
extern double MovingShift = 6;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double ma;
int res;
int flagm=0;
int timer=0;
double score=0;
double scoreb=0;
int magicbango=0;
int a;
int b;
double hourmax=-99999;
double hourmin=99999;
double hourscore[30];
int hourcount[30];
double niku=0;
double nikuniku=1;
double kasan[30];
int fla=0;
for(a=0;a<26;a++){
hourscore[a]=0;
hourcount[a]=0;
kasan[a]=0;
}
if(Volume[0]>1) return;
b=0;
for(a=1;a<140;a++){
if(TimeHour(Time[a]) == 0)b=a;
}
//24*30個の足の終値を各時間に分けて加算する。何回加算したかを記録する。
for(a=b;a<(24 * 50);a++){
if(hourcount[TimeHour(Time[a])] < 30){
hourscore[TimeHour(Time[a])] += Close[a];
//hourscore[TimeHour(Time[a])] += Close[a] - Open[a];
hourcount[TimeHour(Time[a])]++;
}
}
//各時間の終値平均を計算する
for(a=0;a<24;a++){
hourscore[a] = (hourscore[a] / hourcount[a]);
}
//終値平均の中で一番高い物と低い物はどれか
for(a=0;a<24;a++){
if(hourscore[a] > hourmax)hourmax = hourscore[a];
if(hourscore[a] < hourmin)hourmin = hourscore[a];
}
fla=1;
for(a=0;a<24;a++){
if(hourscore[TimeHour(Time[a])]<0)fla=0;
}
if(hourmax != hourmin){
if((hourscore[TimeHour(Time[1])] == hourmax)){flagm=2;magicbango=3000;}
if((hourscore[TimeHour(Time[1])] == hourmin)){flagm=1;magicbango=3001;}
}
if(1 == 1){
if(flagm==1){
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,300,0,0,"",magicbango,0,Red);//
// res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(MarketInfo(Symbol(), MODE_ASK),2),300,0,0,"",0201,0,Red);//
Alert(Symbol(),"Open","BUY");
SendMail("MailAlert",Symbol()+"OpenBUY");
return;
}
}
if(1 == 1){//押し目
if(flagm==2){
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,300,0,0,"",magicbango,0,Red);//
// res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(MarketInfo(Symbol(), MODE_BID),2),300,0,0,"",0201,0,Red);//
Alert(Symbol(),"Open","SELL");
SendMail("MailAlert",Symbol()+"OpenSELL");
return;
}
}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double ma;
int res;
int timer=0;
double score=0;
double scoreb=0;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol() == Symbol()){
int flagm=0;
int ii;
double niku = 0;
double nikuniku = 1;
double hourmax=-99999;
double hourmin=99999.0;
double hourscore[30];
int hourcount[30];
int a;
int b;
for(ii=0;ii<26;ii++){
hourscore[ii]=0;
hourcount[ii]=0;
}
b=0;
for(a=1;a<100;a++){
if(TimeHour(Time[a]) == 0)b=a;
}
//24*30個の足の終値を各時間に分けて加算する。何回加算したかを記録する。
for(a=b;a<(24 * 40);a++){
if(hourcount[TimeHour(Time[a])] < 30){
hourscore[TimeHour(Time[a])] += Close[a];
//hourscore[TimeHour(Time[a])] += Close[a] - Open[a];
hourcount[TimeHour(Time[a])]++;
}
}
//各時間の終値平均を計算する
for(a=0;a<24;a++){
hourscore[a] = (hourscore[a] / hourcount[a]);
}
//終値平均の中で一番高い物と低い物はどれか
for(a=0;a<24;a++){
if(hourscore[a] > hourmax)hourmax = hourscore[a];
if(hourscore[a] < hourmin)hourmin = hourscore[a];
}
if(hourmax != hourmin){
if((hourscore[TimeHour(Time[1])] == hourmax)){flagm=1;}
if((hourscore[TimeHour(Time[1])] == hourmin)){flagm=2;}
}
if(flagm==1){
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,300,White);
// if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symbol(), MODE_BID),2),300,White);
if(OrderType()==OP_BUY)Alert(Symbol(),"Close","BUY");
if(OrderType()==OP_BUY)SendMail("MailAlert",Symbol()+"CloseBUY");
}
if(flagm==2){
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,300,White);
// if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symbol(), MODE_ASK),2),300,White);
if(OrderType()==OP_SELL)Alert(Symbol(),"Close","SELL");
if(OrderType()==OP_SELL)SendMail("MailAlert",Symbol()+"CloseSELL");
}
}
}
}
//----
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else {CheckForClose();
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//----
}
//+------------------------------------------------------------------+