mt4一个综合智能交易系统的经典代码如下:
//+------------------------------------------------------------------+ //| sy_test003.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www. | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www."
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ //全局变量 int buytisun=0; int selltisun=0;
int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //所用到的技术指标 double ema15M5=iMA(Symbol(),PERIOD_M15,5,0,MODE_EMA,PRICE_CLOSE,0); double ema30M5=iMA(Symbol(),PERIOD_M30,5,0,MODE_EMA,PRICE_CLOSE,0); double ema15M10=iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0); double ema30M10=iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0); double k=iStochastic(Symbol(),0,8,5,5,MODE_EMA,0,MODE_MAIN,0); double d=iStochastic(Symbol(),0,8,5,5,MODE_EMA,0,MODE_SIGNAL,0); double kp=iStochastic(Symbol(),0,8,5,5,MODE_EMA,0,MODE_MAIN,1); double dp=iStochastic(Symbol(),0,8,5,5,MODE_EMA,0,MODE_SIGNAL,1); //下buy单 if((ema15M5>ema15M10)&&(ema30M5>ema30M10)&&(k>d)&&(kp<dp)) { if((buy(1,500,500,Symbol()+"buy",1))>0) { buytisun=200; } } //下sell单 if((ema15M5<ema15M10)&&(ema30M5<ema30M10)&&(k<d)&&(kp>dp)) { if((sell(1,500,500,Symbol()+"sell",1))>0) { selltisun=200; } } //移动止损 for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { //多单移动止损 if(OrderComment()==(Symbol()+"buy")) { if(((Bid-OrderOpenPrice())/Point)>=buytisun) { if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+200*Point,OrderTakeProfit()+200*Point,0,Blue)==true) { buytisun=buytisun+200; } } } //空单移动止损 if(OrderComment()==(Symbol()+"sell")) { if(((OrderOpenPrice()-Ask)/Point)>=selltisun) { if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-200*Point,OrderTakeProfit()-200*Point,0,Blue)==true) { selltisun=selltisun+150; } } } } } return(0); } //+------------------------------------------------------------------+
//下buy单自定义函数,此函数下单较方便 int buy(double lots,int sun,int ying,string commt,int mgc) { int com=0; int ticket=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderComment()==commt) { com=1; } } } if(com==0) { if((sun!=0)&&(ying!=0)) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,30,Ask-sun*Point,Ask+ying*Point,commt,mgc,0,White); } if((sun==0)&&(ying!=0)) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,30,0,Ask+ying*Point,commt,mgc,0,White); } if((sun!=0)&&(ying==0)) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,30,Ask-sun*Point,0,commt,mgc,0,White); } if((sun==0)&&(ying==0)) { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,30,0,0,commt,mgc,0,White); } } return(ticket); } //下sell单自定义函数,此函数下单较方便 int sell(double lots,int sun,int ying,string commt,int mgc) { int com=0; int ticket=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderComment()==commt) { com=1; } } } if(com==0) { if((sun!=0)&&(ying!=0)) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Bid+sun*Point,Bid-ying*Point,commt,mgc,0,Red); } if((sun==0)&&(ying!=0)) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,0,Bid-ying*Point,commt,mgc,0,Red); } if((sun!=0)&&(ying==0)) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Bid+sun*Point,0,commt,mgc,0,Red); } if((sun==0)&&(ying==0)) { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,0,0,commt,mgc,0,Red); } } return(ticket); }
|