//+------------------------------------------------------------------+
//| 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