0


//inputs esterni
extern double TakeProfitLong     = 50;
extern double TakeProfitShort    = 50;
extern int     DLong             = 30;
extern int     DShort            = 30;
extern double     Pct_Equity        = 1;
extern double Multiplier         = 2;
extern int    MaxTrades          = 5;
extern int    Slippage           = 3;
extern int    cangliang          =20;
extern bool   UseSound           = false;
extern int    minicang           =2; //0.01=2
extern int shift = 0;
extern int ma7_period = 7;              //ma参数值
extern int ma14_period = 14;
extern int ma27_period = 27;
extern int ma52_period = 52;
extern int ma60_period = 60;

double ma7;
double ma14;                           //ma的值      
double ma27;
double ma52;
double ma60;
//variabili globali
string  Name_Expert    = "";
double  stopLossB      = 30;
double  stopLossS      = 30;
string  NameFileSound  = "alert.wav";
double  InitLots       = 0.01;
double  MaxLot         = 1000000;
int     SL             = 20;
double  sB=0,sS=0,MinAccount=9999999;
int c,j;
double LotsB,LotsS,Long,Short;
double LastB=0,LastS=1000;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  MinAccount=AccountEquity();
  return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
  return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
   {
  
   if(Bars<1)   {Print("bars less than 1");return(0);}
  
   double   Price=iClose(NULL,0,0);
 
   if (!ExistPositions()) {sB=0; sS=0;}
   
   int T=0;
   int B=0; 
   for(int i=0;i<OrdersTotal();i++)
      {   
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert)  
        {
        int type=OrderType();
        switch(type)
           {
           case OP_BUY:
              sB=1;
              T++;
              LastB=OrderOpenPrice();
              break;
           case OP_SELL:
              sS=2;
              B++;
              LastS=OrderOpenPrice();
              
              break;
           }
        }   
      }
     
 
   InitLots=MathCeil(AccountBalance()/10000)/cangliang;
   LotsB=InitLots;
   LotsS=InitLots;
   LotsB=NormalizeDouble(MathFloor(LotsB*100)/100,minicang);
   LotsS=NormalizeDouble(MathFloor(LotsS*100)/100,minicang);
   if (minicang==2){
       if (LotsB<0.01) LotsB=0.01;
       if (LotsS<0.01) LotsS=0.01;}
   if (minicang==1){
       if (LotsB<0.1) LotsB=0.1;
       if (LotsS<0.1) LotsS=0.1;}
 
 
   stopLossB=SL+(MaxTrades-1)*DLong;
   stopLossS=SL+(MaxTrades-1)*DShort;
   for (j=0;j<T;j++) {LotsB=Multiplier*LotsB; stopLossB=stopLossB-DLong;}
   for (j=0;j<B;j++) {LotsS=Multiplier*LotsS; stopLossS=stopLossS-DShort;}
  // if (AccountBalance()>6000) MaxLot=MathFloor(AccountBalance()/4)/100;
   if (LotsB>MaxLot) LotsB=MaxLot;
   if (LotsS>MaxLot) LotsS=MaxLot;
   if (LotsB>100) LotsB=100;
   if (LotsS>100) LotsS=100;

   if (T==0) { Long=1000;}
   if (B==0) {Short=-1000;}
   if ((T>0)||(B>0))
      {
      if ((sB==1)&&(Long>LastB)) Long=LastB;
      if ((sS==2)&&(Short<LastS)) Short=LastS;
      }
   if ((T==MaxTrades)||(B==MaxTrades)) c=1;//达到最大开仓数量,限制最大开仓个数
   if ((T==0)||(B==0)) c=0;
   if ((sB==0)||(sS==0)) if(AccountFreeMargin()<(1000*LotsB))
      {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
      }
   double spread=(Ask-Bid)/Point;
   double V1=High[iHighest(NULL,0,MODE_HIGH,2,1)];
   double V2=Low[iLowest(NULL,0,MODE_LOW,2,1)];
  
    ma7 = iMA(Symbol() , NULL , ma7_period , 0 , MODE_EMA , PRICE_CLOSE , i );
    ma14 = iMA(Symbol() , NULL , ma14_period , 0 , MODE_EMA , PRICE_CLOSE , i );
    ma27 = iMA(Symbol() , NULL , ma27_period , 0 , MODE_EMA , PRICE_CLOSE , i );
    ma52 = iMA(Symbol() , NULL , ma52_period , 0 , MODE_EMA , PRICE_CLOSE , i );
    ma60 = iMA(Symbol() , NULL , ma60_period , 0 , MODE_EMA , PRICE_CLOSE , i );
   if ((sB==0)&&(c==0)&& ma27 > ma52 && ma52 > ma60 &&V2< ma14)  {OpenBuy();sB=1;}
   if ((sS==0)&&(c==0)&& ma27< ma52 && ma52<ma60&&V1>  ma14)  {OpenSell();sS=2;}  
   if ((T<MaxTrades)&&(B<MaxTrades))
      {
      if ((sB==1)&&(Price<=(LastB-(DLong+spread)*Point))&&(c==0))   {OpenBuy();sB=1;return(0);}
      if ((sS==2)&&(Price>=(LastS+(DShort)*Point))&&(c==0))         {OpenSell();sS=2;return(0);}
      if ((sB==1)&&(Price>=(Long+TakeProfitLong*Point)))            {closeAllOrders(0);sB=0;return(0);}
      if ((sS==2)&&(Price<=(Short-(TakeProfitShort+spread)*Point))) {closeAllOrders(1);sS=0;return(0);}
    
      }
     
 
  return (0);
}//end start

// - - - - - - FUNZIONI - - - - - - -
 
bool ExistPositions()
   {
   for(int i=0;i<OrdersTotal(); i++)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert) return(True);
         else return(false);
      }  
}
void OpenBuy()
   {
   double ldLot, ldStop, ldTake;
   string lsComm;
   ldLot = GetSizeLotB();
   ldStop = Ask-Point*stopLossB;
   if (ldStop<0.01) ldStop=0;
    //Comment("lotB="+ ldStop);
   ldTake = NormalizeDouble(GetTakeProfitBuy(),Digits);
   lsComm = GetCommentForOrder();
   OrderSend(Symbol(),OP_BUY,ldLot,NormalizeDouble(Ask,Digits),Slippage,ldStop,ldTake,lsComm,0,0,NULL);
  //OrderSend(Symbol(),OP_BUY,0.1,Ask,Slippage,ldStop,ldTake,lsComm,0,0,NULL);
 
   if (UseSound) PlaySound(NameFileSound);
}
 
void OpenSell()
   {
   double ldLot, ldStop, ldTake;
   string lsComm;
   ldLot = GetSizeLotS();
   ldStop = Bid+Point*stopLossS;
   ldTake = NormalizeDouble(GetTakeProfitSell(),Digits);
   lsComm = GetCommentForOrder();
   OrderSend(Symbol(),OP_SELL,ldLot,NormalizeDouble(Bid,Digits),Slippage,ldStop,ldTake,lsComm,0,0,NULL);
   if (UseSound) PlaySound(NameFileSound);
}
void closeAllOrders(int type)
   {
   for(int c=0;c<OrdersTotal();c++)
      {
      OrderSelect(c,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol()==Symbol() && OrderComment()==Name_Expert && OrderType()==OP_BUY && type==0)
         {
         OrderClose(OrderTicket(), OrderLots(),Bid,Slippage, White);
         }
      if (OrderSymbol()==Symbol() && OrderComment()==Name_Expert && OrderType()==OP_SELL && type==1)
         {
         OrderClose(OrderTicket(), OrderLots(), Ask,Slippage, White);
         }  
      if (OrderSymbol()==Symbol() && OrderComment()==Name_Expert && OrderType() > 1)  {OrderDelete(OrderTicket());
      }
   }
}

string GetCommentForOrder() {return(Name_Expert);}
double GetSizeLotB() {return(LotsB);}
double GetSizeLotS() {return(LotsS);}
double GetTakeProfitBuy() {return(Ask+TakeProfitLong*Point);}
double GetTakeProfitSell() {return(Bid-TakeProfitShort*Point);}

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.