乐于分享
好东西不私藏

顺势加码EA源码分享:带限制时间和限制账号功能

顺势加码EA源码分享:带限制时间和限制账号功能
HI,大家好
浪哥我从新疆回来了,不得不在这里赞美一下我们祖国的大好河山,景秀新疆,真的是太美了,虽然我们这一次去新疆参加第二届技术交易博览会后,由于时间太匆忙,没有去天山等一些地方游玩,但是我已经感受到了新疆作为国际大都市的魅力!以后有机会还得再去,另外就是新疆的用户也很热情啊,遇到了几个粉丝朋友,聊得很开心!
当然,今天的重点还是分享ea了,因为今天周三,我就拿一款顺势加码的EA源码分享吧,因为你们看马丁看得实在是太多了!
具体的功能介绍就不说了,配置很简单:
主要就是做顺势加仓的,这里控制盈利是重点,大家可以试试,在顺势的情况下,怎么做到加仓的,下面就是源码了:不知道怎么编译的朋友,记住我的微ID:waihuipai
#property copyright "华尔街狼人ea"#property link      ""#property version   "1.10"#property strict//授权开始#define 有效结束时间 "2123.03.20"//结束时间限制#define 有效账号 0  //使用账号限制//+------------------------------------------------------------------+//| Expert initialization function                                   |//+------------------------------------------------------------------+input int Magic = 118;input double     初始手数=0.01;input int        加仓间距=200; //加仓间距(小点)input double     加仓倍数=1.2;    input double     最大手数=1;input int        整体止盈金额=40;intOnInit()  {   return(INIT_SUCCEEDED);  }//+------------------------------------------------------------------+//| Expert deinitialization function                                 |//+------------------------------------------------------------------+voidOnDeinit(constint reason)  {//---  }intgetSumOrders(int type){   int orders = 0;   for(int i=OrdersTotal()-1;i>=0;i--)   {      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))      {       if (OrderSymbol()!=Symbol() || OrderMagicNumber() != Magic) continue;       if(OrderType()==type || type == 2)       {         orders+=1;       }      }      else      {         i=OrdersTotal()-1;      }   }   return orders;}doublegetSumProfit(int type){   double profit = 0;   for(int i=OrdersTotal()-1;i>=0;i--)   {      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))      {       if (OrderSymbol()!=Symbol() || OrderMagicNumber() != Magic) continue;       if (OrderType()<=1)       {          if(OrderType()==type || type == 2)          {            profit+=OrderProfit();          }       }      }      else      {         i=OrdersTotal()-1;      }   }   return profit;}voidcheckToOpen(){   double sl,tp;   int ret;   sl = 0;   tp = 0;   if((ret=OrderSend(Symbol(),OP_BUY,初始手数,Ask,10,sl,tp,"首单多*1",Magic,0,clrRed))<0)   {      Print(Symbol()+"做多OpenErr:",GetLastError()," bid=",Bid," ask=",Ask," lot=",初始手数);   }   else   {      int errCnt=0;      while(true)      {         ret=OrderSend(Symbol(),OP_SELL,初始手数,Bid,10,sl,tp,"首单空*1",Magic,0,clrLime);         if (ret>0)          {            break;         }         else         {            errCnt++;            Print(Symbol()+"做空OpenErr:",GetLastError()," bid=",Bid," ask=",Ask," lot=",初始手数);            if (errCnt>=100)            {               Alert("开仓失败,先退出程序,请检查!");               AllClose();               ExpertRemove();               break;            }            Sleep(100);         }      }         }}boolgetLastOrderInfo(double& lastBuyPrice,double& lastSellPrice,int& lastBuyCnt,int& lastSellCnt){      lastBuyPrice = 0;   lastSellPrice = 0;   lastBuyCnt = 0;   lastSellCnt = 0;   string retStr[5];   for(int i=OrdersTotal()-1;i>=0;i--)   {      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))      {       if (OrderSymbol()!=Symbol() || OrderMagicNumber() != Magic) continue;       if (lastBuyCnt<=0)       {          if (OrderType()==OP_BUY)          {             lastBuyPrice = OrderOpenPrice();             StringSplit(OrderComment(),'*',retStr);             lastBuyCnt = (int)StringToInteger(retStr[1]);          }       }       if (lastSellCnt<=0)       {          if (OrderType()==OP_SELL)          {             lastSellPrice = OrderOpenPrice();             StringSplit(OrderComment(),'*',retStr);             lastSellCnt = (int)StringToInteger(retStr[1]);          }       }      }      else      {         i=OrdersTotal()-1;      }   }   return true;}voidcheckToAdd(){   int ret;   double lastBuyPrice;   double lastSellPrice;   int lastBuyCnt;   int lastSellCnt;   double addLot;   getLastOrderInfo(lastBuyPrice, lastSellPrice, lastBuyCnt, lastSellCnt);   double lotStep = MarketInfo(NULL,MODE_LOTSTEP);   //printf("Bid:%f %f %d %f %f %f %d",Bid,lastBuyPrice,lastBuyCnt,加仓间距*Point(),Ask,lastSellPrice,lastSellCnt);        if(NormalizeDouble(Ask - lastBuyPrice,Digits)>=加仓间距*Point())   {      if (lastBuyCnt-lastSellCnt>=2)      {         return;      }      addLot = (int)(MathPow(加仓倍数,(lastBuyCnt))*初始手数/lotStep)*lotStep;      if (addLot >= 最大手数)      {         addLot = 最大手数;      }      if((ret=OrderSend(Symbol(),OP_BUY,addLot,Ask,5,0,0,"加仓买*"+IntegerToString(lastBuyCnt+1),Magic,0,clrRed))<0)      {         printf("Fail to buy:%f,%d",addLot,GetLastError());      }        }   if(NormalizeDouble(lastSellPrice-Bid,Digits)>=加仓间距*Point())   {      if (lastSellCnt-lastBuyCnt>=2)      {         return;      }      addLot = (int)(MathPow(加仓倍数,(lastSellCnt))*初始手数/lotStep)*lotStep;      if (addLot >= 最大手数)      {         addLot = 最大手数;      }      if((ret=OrderSend(Symbol(),OP_SELL,addLot,Bid,5,0,0,"加仓卖*"+IntegerToString(lastSellCnt+1),Magic,0,clrLime))<0)      {         printf("Fail to sell:%f,%d",addLot,GetLastError());      }        }   return;}voidOnTick(){   if(TimeCurrent()>=StringToTime(有效结束时间)) 	{   	Alert("使用期限已到!");    	return;	}	if (有效账号!=0 && AccountInfoInteger(ACCOUNT_LOGIN)!=有效账号)	{	   Alert("无效账户!"); 	   return;	} 	int orderCnt=0;   checkClose();   orderCnt=getSumOrders(2);   if (orderCnt == 0)      {      checkToOpen();   }   else   {      checkToAdd();   }   }voidAllClose(){   for(int i=OrdersTotal()-1;i>=0;i--)   {      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))      {         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic)         continue;         if(OrderType()<=1)         {            if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,clrGray))            {               Print("close erro:", GetLastError());               i = OrdersTotal() - 1;            }         }         else          {            if(!OrderDelete(OrderTicket()))            {               Print("delete erro");               i = OrdersTotal() - 1;            }         }      }      else      {         i = OrdersTotal() - 1;      }   }}boolcheckClose(){      double sumProfit;   sumProfit = getSumProfit(2);   if (sumProfit >= 整体止盈金额)   {      AllClose();   }      return true;}

相关学习资料