← Назад к списку файлов

sa_ea_600.mq4

Поиск по коду файла

extern double MaxDD          = 30;
extern double MM             = 30;

extern string PipeName       = "SA_600";
extern string ServerPairName = "";
extern double BidCorrection  = 0;
extern double AskCorrection  = 0;

extern int    ActionPips     = 2;
extern int    TargetPips     = 5;
extern int    StopPips       = 15;
extern int    VirtualStops   = false;

extern int    ConfirmMS     = 20;
extern int    SleepMS       = 20;
extern int    Slippage      = 1;    
extern int    Magic         = 2013; 

#define PIPE_BASE_NAME     "\\\\.\\pipe\\mt4-"     // MUST tally with client code
#define ERROR_MORE_DATA 234

#import "kernel32.dll"
	int CallNamedPipeW(string pipeName, uchar& outBuffer[], int outBufferSz, uchar& inBuffer[], int inBufferSz, int& bytesRead[], int timeOut);
#import

datetime StartTime=0;
double   MinLots=0.1;
double   MaxLots=0.1;
double   LotStep=0.1;
double   MyPoint=0.0001;

string   MasterPair="";
double   MaxBalance=0;
double   TotalPips=0;
int      TotalTrades=0;
double   EntrySlippage=0;
int      EntryMS=0;
int      OpenErrors=0;

int      LastTicket=0;
double   MasterBid=0;
double   MasterAsk=0;

string   LastQ="";

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {
   Comment("");
   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   double CurrentPips=0;
   string sInfo="";
   if(IsStopped() || !IsConnected())
      return(0);

   if(Digits<=3)
      MyPoint=0.01;
   MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);

   if(StartTime<=0)
     {
      MaxBalance=AccountBalance();
      StartTime=TimeLocal();
      TotalPips=0;
      EntrySlippage=0;
      TotalTrades=0;
      EntryMS=0;
      LastTicket=0;
      OpenErrors=0;
     }

   while(!IsStopped())	
     {
      RefreshRates();
      double dBid=Bid;
      double dAsk=Ask;
      int OldTicket=LastTicket;
      LastTicket=0;
      for(int j=OrdersTotal()-1; j>=0; j--) 
          if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
            if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic))
              {
               if(OrderType()==OP_BUY)
                  CurrentPips=dBid-OrderOpenPrice();
               else
                  CurrentPips=OrderOpenPrice()-dAsk;
               CurrentPips=CurrentPips/MyPoint;
               LastTicket=OrderTicket();
               if((CurrentPips>=TargetPips || CurrentPips<=-StopPips) && IsTradeContextBusy()==false)
                 {
                  if(OrderType()==OP_BUY)
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dBid,Digits), Slippage*MyPoint/Point, Blue);
                  else
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dAsk,Digits), Slippage*MyPoint/Point, Red);
                 }
               else  
               if(VirtualStops==false && OrderStopLoss()<Point && IsTradeContextBusy()==false)
                 {
                  double MinDistance=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point+MyPoint;
                  if(OrderType()==OP_BUY)
                     OrderModify(OrderTicket(),OrderOpenPrice()
                                ,MathMin(OrderOpenPrice()-StopPips*MyPoint,dBid-MinDistance)
                                ,MathMax(OrderOpenPrice()+TargetPips*MyPoint,dAsk+MinDistance),0); 
                  else  
                     OrderModify(OrderTicket(),OrderOpenPrice()
                                ,MathMax(OrderOpenPrice()+StopPips*MyPoint,dAsk+MinDistance)
                                ,MathMin(OrderOpenPrice()-TargetPips*MyPoint,dBid-MinDistance),0); 
                 }

              }

      if(LastTicket==0 && OldTicket>0)
         if(OrderSelect(OldTicket, SELECT_BY_TICKET, MODE_HISTORY))
           {
            if(OrderType()==OP_BUY)
               TotalPips=TotalPips+(OrderClosePrice()-OrderOpenPrice())/MyPoint;
            else
               TotalPips=TotalPips+(OrderOpenPrice()-OrderClosePrice())/MyPoint;
           }

      MaxBalance=MathMax(MaxBalance,AccountBalance());
      if(AccountBalance()<=0)
         break;
      sInfo="";
      CheckMaster();
      if(MaxDD<=100*(MaxBalance-AccountBalance())/MaxBalance)
         sInfo=sInfo+"\nMaximum Drawdawn Reached !!!";
      else   
      if(MasterBid>=Point && MasterAsk>=Point)
         sInfo=sInfo+"\nBuy/Sell Levels: "+DoubleToStr((MasterBid-dAsk)/MyPoint-ActionPips,1)+" / "+DoubleToStr((dBid-

Показано первые 50% кода (символов: 6497)

Как получить полную версию?

Введите ваш email и нажмите кнопку, чтобы перейти к оплате.