ÿþ
#property copyright "!5@359 urdala 0H52A:89"
#property link "urdala@mail.ru"
#property version "1.00"
#property strict
extern double Lot = 0.1;
extern double TP = 1;
extern double SL = 1;
extern double KefLot = 2.0;
extern int MaxNom = 5;
extern int Shema = 0;
int i=0;
int LastProf = 0;
int Slippage = 1;
bool chk;
double Lots;
string com;
datetime LastTime,LastUpd;
string StrShema="";
int OnInit()
{
LastTime = 0;
LastUpd = 0;
for(i=1;i<=MaxNom;i++)
{
StrShema=StrShema+"-"+(string)CheckNom(i,Shema);
}
Print("!E5<0 @01>BK : ",StrShema);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
int openord=OrdersTotal();
if(openord>0){LastTime=Time[0];return;}
if(LastTime == Time[0])return;
LastTime=Time[0];
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0)LastProf=1;
else LastProf=-1;
}
else LastProf=0;
int nom = 1;
if(LastProf<0 && (int)OrderComment()<MaxNom)
{
int sh1 = StringFind(OrderComment(),"(");
int sh2 = StringFind(OrderComment(),")");
if(sh1>=0 && sh2>=0)
{
string stroka = StringSubstr(OrderComment(),sh1+1,sh2-sh1-1);
nom = (int)stroka;
if(nom < MaxNom)
{
Lots= NormalizeDouble(Lot*MathPow(KefLot,(int)nom),2);
nom ++;
com ="("+(string)nom+")";
}
else {Lots= Lot;com = "(1)";nom=1;}
}
else {Lots= Lot;com = "(1)";nom=1;}
}
else {Lots= Lot;com = "(1)";nom=1;}
if(CheckNom(nom,Shema)==0)OpenOrder(Symbol(),OP_BUY,Lots,Ask,Ask-SL/100*Ask,Ask+TP/100*Ask,com,0);
else OpenOrder(Symbol(),OP_SELL,Lots,Bid,Bid+SL/100*Bid,Bid-TP/100*Bid,com,0);
}
int CheckNom(int nom,int shema)
{
int a = nom;
int b = shema >> (a-1);
int c = b & 1;
return(c);
}
int OpenOrder(string symb,int cmd,double lot,double price,double stoploss,double takeprofit,string comf,int magic)
{
if(AccountFreeMarginCheck(Symbol(),cmd,lot)<=0)return(0);
int err=0,f=0,ticket=0;
color clr=CLR_NONE;
while(f<10)
{
RefreshRates();
if(cmd==0){price=MarketInfo(symb,MODE_ASK);clr=RoyalBlue;}
if(cmd==1){price=MarketInfo(symb,MODE_BID);clr=Red;}
ticket=OrderSend(symb,cmd,lot,NormalizeDouble(price,Digits),Slippage,0,0,comf,magic,0,clr);
err=GetLastError();
if(err==0) break;
Print(WindowExpertName(),symb," ?@8 >B:@KB88 >@45@0.",err);
f++;
Sleep(1000);
}
if(ticket>0 && (takeprofit!=0 || stoploss!=0))
{
if(OrderSelect(ticket,SELECT_BY_TICKET))ModifyOrder(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit);
}
return(ticket);
}
int CloseOrder(int ticket,double lots)
{
int err=0,f=0;
double price=0;
if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))return(0);
if(lots==0)lots=OrderLots();
if(lots<MarketInfo(OrderSymbol(),MODE_MINLOT))lots=MarketInfo(OrderSymbol(),MODE_MINLOT);
while(f<10)
{
RefreshRates();
if(OrderType()==0)price=Bid;
if(OrderType()==1)price=Ask;
if(OrderType()>1){chk=OrderDelete(ticket);return(0);}
chk = OrderClose(ticket,lots,NormalizeDouble(price,Digits),Slippage,Goldenrod);
err = GetLastError();
if(err==0) break;
Print(WindowExpertName(),OrderSymbol()," ?@8 70:@KB88 >@45@0.",err);
f++;
Sleep(1000);
}
return(0);
}
int ModifyOrder(int ticket,double price,double stoploss,double takeprofit)
{
int err,f=0;
while(f<10)
{
RefreshRates();
chk = OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE);
err = GetLastError();
if(err==0) break;
Print(WindowExpertName(),OrderSymbol()," ?@8 <>48D8:0F88 >@45@0",err);
Sleep(1000);
f++;
}
return(0);
}
Comments