5分钟动量交易系统代码
#property strictint magic=2022111;
input double 下单量=0.01;
input int ema=21;
input int buyN=5; //入场触发条件有效K线根数
input int chushistop=250; //初始止损点数(书中为200点)
input int chushitp=300;//初始止盈点数(书中等于初始止损点数)
input double TrailingStop = 250;//移动止损点数
double EMA_0,EMA_1,EMA_2,MACD1,MACD2,MACD3;
double buychushi_tp=0; //初始止损变量
datetime buytime=0; //防止同一根bar反复开仓变量
datetime modifytime=0; //防止同一根bar反复修改止损变量
int CountL=0; //触发条件有效K线根数计数
int zhuizong=0;//移动止损开关
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
EMA_0=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,0);
EMA_1=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,1);
EMA_2=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,2);
MACD1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
MACD2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
MACD3=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,3);
if(Close>=EMA_1 && Close<EMA_2 && MACD1<0)
{
CountL = Bars; //获取当前图表柱数。当价格上穿EMA,而MACD还为负值时,开始计数,用于控制开仓
}
//如果持仓多单数=0,则进行初始开多单
if(buydanshu()==0)
{
if(Close>EMA_1 && MACD1>0 && Bars <= CountL+buyN)
{
if(buytime!=Time)
{
int a=0;
double stop1=EMA_0-chushistop*Point;
a=OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,Ask+chushitp*Point,Symbol()+"buy",magic,0,White);
buychushi_tp=Ask+250*Point;
if(OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,0,Symbol()+"buy1",magic,0,Blue)>0)//第2单不设止盈
{
buytime=Time;
}
}
}
}
//价格达到多单初始止盈,修改第2张单子的止损价为开仓价
if(Close>buychushi_tp && zhuizong==0)
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
string zhushi=(Symbol()+"buy1");
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi)
{
double sl=OrderOpenPrice();
if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
{
int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
if(a>0)
{
zhuizong=1;
modifytime=Time;
}
}
}
}
}
}
//移动止损
if(zhuizong==1 && TrailingStop>0 && modifytime!=Time)
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
string zhushi=(Symbol()+"buy1");
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<(Bid-Point*TrailingStop))
{
double sl=Bid-Point*TrailingStop;
if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
{
int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
if(a>0) modifytime=Time;
}
}
}
}
}
}
}
if(OrdersTotal()==0)
{
zhuizong=0;
}
}
//-----统计多单数量函数
int buydanshu()
{
int a=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
{
a++;
}
}
}
return(a);
}
谢谢 怎么只开多单啊? {:1_180:}
页:
[1]