EA1-简单的均线穿越

本段MT4 程序源码是一个EA。
extern int 短均周期=3;
extern int 长均周期=13;
extern int 短均均模=0;
extern int 长均均模=3;
extern int 短均价类=0;
extern int 长均价类=4;
extern int 短均平移=0;
extern int 长均平移=0;
extern double 手数 = 0.01;
extern int 滑点 = 0;
int New_Bar;
int 最后时间;
int 开仓定位;
int 关仓定位;
int 单总数;
double 当前短均;
double 前一短均;
double 当前长均;
double 前一长均;
int 买单判断;
int 卖单判断;
int start()
{
买单判断=0;
卖单判断=0;
double 下单现价;
int 开仓单=0;
int 单总数=OrdersTotal();
for(int i=单总数-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderType()==OP_BUY)
{
买单判断=1;
if(MACross()==1)
{
下单现价=MarketInfo(Symbol(),MODE_BID);
OrderClose(OrderTicket(),
OrderLots(),
下单现价,
滑点,
CLR_NONE);
}
}
if(OrderType()==OP_SELL)
{
卖单判断=1;
if(MACross()==2)
{
下单现价=MarketInfo(Symbol(),MODE_ASK);
OrderClose(OrderTicket(),
OrderLots(),
下单现价,
滑点,
CLR_NONE);
}
}
}
}
New_Bar=0;
if (最后时间 != Time[0])
{
New_Bar= 1;
最后时间 = Time[0];
}
当前短均= iMA(NULL,0, 短均周期, 短均平移, 获均线类型子(短均均模), GetTYpe(短均价类), 0);
前一短均= iMA(NULL,0, 短均周期, 短均平移, 获均线类型子(短均均模), GetTYpe(短均价类), 1);
当前长均= iMA(NULL,0, 长均周期, 长均平移, 获均线类型子(长均均模), GetTYpe(长均价类), 0);
前一长均= iMA(NULL,0, 长均周期, 长均平移, 获均线类型子(长均均模), GetTYpe(长均价类), 1);
if (开仓前检查穿越定位子()==1 && New_Bar==1)
{
OpenBuyOrder();
}
if (开仓前检查穿越定位子()==2 && New_Bar==1)
{
OpenSellOrder();
}
return;
}
int 开仓前检查穿越定位子()
{
开仓定位=0;
if ((前一短均<=当前长均 && 当前短均>当前长均) || (前一短均<当前长均 && 当前短均>=当前长均))
{
开仓定位=1;
}
if ((前一短均>=当前长均 && 当前短均<当前长均) || (前一短均>当前长均 && 当前短均<=当前长均))
{
开仓定位=2;
}
return(开仓定位);
}
int MACross()
{
关仓定位=0;
if ((前一短均>=当前长均 && 当前短均<当前长均) || (前一短均>当前长均 && 当前短均<=当前长均)) { 关仓定位=1; } if ((前一短均<=当前长均 && 当前短均>当前长均) || (前一短均<当前长均 && 当前短均>=当前长均))
{
关仓定位=2;
}
return(关仓定位);
}
int OpenBuyOrder()
{
if (单总数==1)
{
OrderSelect(0, SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY) return;
}
OrderSend(Symbol(),
OP_BUY,
手数,
Ask,
滑点,
0,
0,
"Buy: 均线穿越",
1,
0,
CLR_NONE);
return;
}
int OpenSellOrder()
{
if (单总数==1)
{
OrderSelect(0, SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_SELL) return;
}
OrderSend(Symbol(),
OP_SELL,
手数,
Bid,
滑点,
0,
0,
"Sell: 均线穿越",
2,
0,
CLR_NONE);
return;
}
int 获均线类型子(int 均模)
{
switch(均模)
{
case 0: return(0);
case 1: return(1);
case 2: return(2);
case 3: return(3);
}
}
int GetTYpe(int 使用价格)
{
switch(使用价格)
{
case 0: return(PRICE_CLOSE);
case 1: return(PRICE_OPEN);
case 2: return(PRICE_HIGH);
case 3: return(PRICE_LOW);
case 4: return(PRICE_MEDIAN);
case 5: return(PRICE_TYPICAL);
case 6: return(PRICE_WEIGHTED);
}
}