Author: sanyooooook
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
Uses files from the file systemIt reads information from a file
0 Views
0 Downloads
0 Favorites
Slave_Copy
//+------------------------------------------------------------------+
//|                                                   Slave_Copy.mq4 |
//|                                                      sanyooooook |
//|                        sany000000k.narod.ru, sanyooooook@mail.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "sanyooooook.ru, sanyooooook@mail.ru"
#property show_inputs
//--- input parameters
//---- Êîëè÷åñòâî òèêîâ â îäíîì áàðå
extern bool revers=true;
extern string Filename="MarketInfo.txt";
extern double Coeff=1.0;
//--- input parameters
int magik=-100;
string MN[5][100];
double Stops[2][100];
int TM[100];
int Slippage=20;
int Magik=12;
extern int Sleep_=1000;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if(Digits==3||Digits==5)
   {
      Slippage=Slippage*10;
   }
   int i1=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
while(!IsStopped())
{
   RefreshRates();
   Comment(TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS));
   {
      int c=init_work_buff();
      for(int i=0;i<c;i++)
      {
         if(Exist_Order(MN[0][i])=="")//åñëè äóáëèðóþùåãî îðäåðà íå îáíàðóæåíî
         {
            double Lot=Coeff*StrToDouble(MN[3][i]);
            if(MathAbs(Lot)>=MarketInfo(MN[1][i],MODE_MINLOT))
            {
               if(!revers)
               {
                  if(StrToInteger(MN[2][i])==0)//Long
                  {
                     if(MarketInfo(MN[1][i],MODE_LOTSTEP)!=0)
                     {
                        OpenOrders(MN[1][i],OP_BUY,NormalizeLots(Lot,MarketInfo(MN[1][i],MODE_LOTSTEP)),Slippage,0,0,StrToInteger(MN[0][i]),"BUY","sanyooooook"/*MN[1][i]*/);//res=OrderSend(Symbol_,OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask-StopLoss*Point,Digits),NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magik,0);
                        continue;
                     }
                  }
                  else
                  {
                     if(StrToInteger(MN[2][i])==1)//Short
                     {
                        if(MarketInfo(MN[1][i],MODE_LOTSTEP)!=0)
                        {
                           OpenOrders(MN[1][i],OP_SELL,NormalizeLots(Lot,MarketInfo(MN[1][i],MODE_LOTSTEP)),Slippage,0,0,StrToInteger(MN[0][i]),"SELL","sanyooooook"/*MN[1][i]*/);//res=OrderSend(Symbol_,OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask-StopLoss*Point,Digits),NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magik,0);
                           continue;
                        }
                     }
                  }
               }
               else
               {
                  if(StrToInteger(MN[2][i])==0)//Long
                  {
                     if(MarketInfo(MN[1][i],MODE_LOTSTEP)!=0)
                     {
                        OpenOrders(MN[1][i],OP_SELL,NormalizeLots(Lot,MarketInfo(MN[1][i],MODE_LOTSTEP)),Slippage,0,0,StrToInteger(MN[0][i]),"SELL","sanyooooook"/*MN[1][i]*/);//res=OrderSend(Symbol_,OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask-StopLoss*Point,Digits),NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magik,0);
                        continue;
                     }
                  }
                  else
                  {
                     if(StrToInteger(MN[2][i])==1)//Short
                     {
                        if(MarketInfo(MN[1][i],MODE_LOTSTEP)!=0)
                        {
                           OpenOrders(MN[1][i],OP_BUY,NormalizeLots(Lot,MarketInfo(MN[1][i],MODE_LOTSTEP)),Slippage,0,0,StrToInteger(MN[0][i]),"BUY","sanyooooook"/*MN[1][i]*/);//res=OrderSend(Symbol_,OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask-StopLoss*Point,Digits),NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magik,0);
                           continue;
                        }
                     }
                  }
               }
            }
         }
      }
      int tot1=OrdersTotal();
      for(int i1=0;i1<tot1;i1++)//ïðîâåðÿåì ñîîòâåòñòâèå íàøåãî ñïèñêà ñ òàáëèöåé îðäåðîâ
      {
         if(OrderSelect(i1,SELECT_BY_POS)&&Exist_Master_Order(DoubleToStr(OrderMagicNumber(),0),c)==""&&OrderComment()=="sanyooooook")
         //åñëè îðäåð â ñïèñêå åñòü, à â òàáëèöå åãî íå îáíàðóæåíî íåîáõîäèìî åãî óäàëèòü
         {
            //çàêðûâàåì ïîçèöèþ
            if(OrderType()==OP_BUY)
            {
               RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);
               continue;
            }
            if(OrderType()==OP_SELL)
            {
               RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);
               continue;
            }
         }
      }
   }
   Sleep(Sleep_);
}
   return(0);
}
//+------------------------------------------------------------------+
int init_work_buff()
{
   int handle;
   handle=FileOpen(Filename,FILE_READ,';');
   if(handle==(-1))
   {
      Print("Ôàéë MarketInfo.txt íå îáíàðóæåí, ïîñëåäíÿÿ îøèáêà ", GetLastError());
      return(0);//continue;
   }
   FileSeek(handle,0,SEEK_SET);
   int count=StrToInteger(FileReadString(handle));
   for(int i=0;i<count;i++)
   {
      string stroka=FileReadString(handle);
      int Poz=0;
      int i1=0;
      int t=0;
      while(i1<=StringLen(stroka)-1&&t<=4)
      {
         if(StringFind(stroka,"/",i1)==i1)
         {
            MN[t][i]=StringSubstr(stroka,Poz,i1-Poz);
            Poz=i1+1;
            t++;
            i1++;
            continue;
         }
         i1++;
      }
   }
   FileClose(handle);
   return(i);
}
double NormalizeLots (double lots, double step) 
{
      return (MathRound(lots/step)*step);
}
string Exist_Order(string Tiket)
{
   int cOrd=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS)&&OrderMagicNumber()==StrToInteger(Tiket)&&OrderComment()=="sanyooooook")//&&OrderComment()==Tiket)
      {
         cOrd++;
         break;
      }
   }
   if(cOrd>0)return(Tiket);
   else return("");
}
string Exist_Master_Order(string Tiket,int count)
{
   int cOrd=0;
   for(int i=0;i<count;i++)
   {
      if(StrToInteger(MN[0][i])==StrToInteger(Tiket))
      {
         cOrd++;
         break;
      }
   }
   if(cOrd>0)return(Tiket);
   else return("");
}

int OpenOrders(string Symb, int cmd,double lot,int slip,double SL,double TP,int MG,string PP,string coment)
{
   double PriceSL;
   double PriceTP;
   int ticket=-1;
   RefreshRates();
   int StartSend=GetTickCount();
   while(ticket<0)
   {
      RefreshRates();
      if(GetTickCount()-StartSend>10000)
      {
         Print("Îðäåð íå îòêðûò, âûõîä ïî òàéìàóòó.");
         return(-1);
      }
      if (cmd==OP_SELL)
      {
         ticket=OrderSend(Symb,cmd,lot,NormalizeDouble(MarketInfo(Symb,MODE_BID),MarketInfo(Symb,MODE_DIGITS)),slip,0,0,coment,MG);
         Print("SELL "+ticket);
      }
      if (cmd==OP_BUY)
      {
         ticket=OrderSend(Symb,cmd,lot,NormalizeDouble(MarketInfo(Symb,MODE_ASK),MarketInfo(Symb,MODE_DIGITS)),slip,0,0,coment,MG);
         Print("BUY "+ticket);
      }
      if (ticket<=0)
      {
         int err=GetLastError();
      }
      else
      {
         if (TP==0&&SL==0)return(ticket);
         if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==false)return(ticket);
         if (TP==OrderTakeProfit()&&SL==OrderStopLoss())
         {
            return(ticket);
         }
         else
         {
            bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,MarketInfo(OrderSymbol(),MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(OrderSymbol(),MODE_DIGITS)),0);
         }
      }
      Sleep(500);
   }
return(ticket);
}

Comments