//+----------------------------------------------------------------------------+
//| e-CloseByTime.mq4 |
//| |
//| Èäåÿ è ÒÇ : stamen [http://kimiv.ru/forum/viewtopic.php?p=4830#4830]|
//| Ïðîãðàììèðîâàíèå: Kim Igor V. aka KimIV [http://www.kimiv.ru] |
//| |
//| 21.04.2013 Çàêðûòèå ïîçèöèé, óäàëåíèå îðäåðîâ, çàêðûòèå òåðìèíàëà |
//| â çàäàííîå âðåìÿ. |
//+----------------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
datetime DateTime;//=D'2015.12.29 00:57'; // Äàòà è âðåìÿ çàêðûòèÿ
datetime DateTimeDelete;
extern int HourClose=3; // Òîðãîâàÿ îïåðàöèÿ:
extern int MinuteClose=20; // Òîðãîâàÿ îïåðàöèÿ:
extern int HourDelete=3; // Òîðãîâàÿ îïåðàöèÿ:
extern int MinuteDelete=15; // Òîðãîâàÿ îïåðàöèÿ:
extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà
// 0 - ðàáîòà ñîâåòíèêà ðàçðåøåíà íà ëþáîì ñ÷¸òå
extern string symbol = ""; // Òîðãîâûé èíñòðóìåíò
// "" - ëþáîé
// "0" - òåêóùèé
extern int Operation = -1; // Òîðãîâàÿ îïåðàöèÿ:
// -1 - ëþáàÿ
// 0 - OP_BUY
// 1 - OP_SELL
extern int MagicNumber = -1; // MagicNumber
extern bool SetVLine = True; // Óñòàíîâèòü âåðòèêàëüíóþ ëèíèþ
extern bool SetVLineDelete= True; // Óñòàíîâèòü âåðòèêàëüíóþ ëèíèþ
extern color colorLine = Red; // Öâåò ëèíèè
extern color colorLineDelete=Blue; // Öâåò ëèíèè
extern int styleLine=0; // Ñòèëü ëèíèè
extern int styleLineDelete=0; // Ñòèëü ëèíèè
// 0 - STYLE_SOLID - Ñïëîøíàÿ ëèíèÿ
// 1 - STYLE_DASH - Øòðèõîâàÿ ëèíèÿ
// 2 - STYLE_DOT - Ïóíêòèðíàÿ ëèíèÿ
// 3 - STYLE_DASHDOT - Øòðèõ-ïóíêòèðíàÿ ëèíèÿ
// 4 - STYLE_DASHDOTDOT - Øòðèõ-ïóíêòèðíàÿ ëèíèÿ ñ äâîéíûìè òî÷êàìè
extern int widthLine=2; // Øèðèíà ëèíèè
extern int widthLineDelete=2; // Øèðèíà ëèíèè
extern bool DeleteOrders=True; // Óäàëÿòü îðäåðà
extern bool CloseTerminal=False; // Çàêðûâàòü òåðìèíàë
extern string _P_Performance="---------- Ïàðàìåòðû èñïîëíåíèÿ";
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string SoundSuccess = "expert.wav"; // Çâóê óñïåõà
extern string SoundError = "timeout.wav"; // Çâóê îøèáêè
extern int Slippage=5; // Ïðîñêàëüçûâàíèå öåíû â ïóíêòàõ
extern int NumberOfTry=5; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê ïðè îøèáêàõ
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
color clCloseBuy = Blue; // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red; // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color clDelete = Yellow; // Öâåò çíà÷êà óäàëåíèÿ îðäåðîâ
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà
#import "user32.dll"
int GetParent(int hWnd);
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_CLOSE 0x0010
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init()
{
int day=TimeDay(TimeCurrent());
int mon=TimeMonth(TimeCurrent());
int year=TimeYear(TimeCurrent());
DateTime=StrToTime(year+"."+mon+"."+day+" "+HourClose+":"+MinuteClose);
DateTimeDelete=StrToTime(year+"."+mon+"."+day+" "+HourDelete+":"+MinuteDelete);
gbNoInit=False;
if(!IsTradeAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if(!IsLibrariesAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if(Operation<-1 || Operation>1)
{
Message("Íåäîïóñòèìîå çíà÷åíèå âíåøíåãî ïàðàìåòðà Operation");
gbNoInit=True; return;
}
if(symbol!="0" && symbol!="")
{
if(MarketInfo(StringUpper(symbol),MODE_BID)==0)
{
Message("Â îáçîðå ðûíêà îòñóòñòâóåò ñèìâîë "+symbol);
gbNoInit=True; return;
}
}
if(!IsTesting())
{
if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
start();
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit()
{
if(!IsTesting()) Comment("");
ObjectDelete(WindowExpertName());
}
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start()
{
if(gbDisabled)
{
Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
}
if(gbNoInit)
{
Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if(!IsTesting())
{
if(NumberAccount>0 && NumberAccount!=AccountNumber())
{
Comment("Ðàáîòà ñîâåòíèêà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
return;
}
else Comment("");
}
if(ShowComment)
{
Comment("Current=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)," "
,"CloseOrder=",TimeToStr(DateTime,TIME_DATE|TIME_MINUTES)," "
,"DeleteOrder=",TimeToStr(DateTimeDelete,TIME_DATE|TIME_MINUTES)," "
,"\n"
,"NumberAccount=",IIFs(NumberAccount>0,DoubleToStr(NumberAccount,0),"All")," "
,"Symbol=",IIFs(symbol=="","All",IIFs(symbol=="0",Symbol(),StringUpper(symbol)))," "
,"Operation=",IIFs(Operation<0,"All",GetNameOP(Operation))," "
,"MagicNumber=",IIFs(MagicNumber<0,"All",DoubleToStr(MagicNumber,0))," "
,"\n"
,IIFs(DeleteOrders,"DeleteOrders ","")
,IIFs(CloseTerminal,"CloseTerminal ","")
,"Slippage=",DoubleToStr(Slippage,0)," ï. "
,"NumberOfTry=",DoubleToStr(NumberOfTry,0)," "
);
}
else Comment("");
if(SetVLine)
{
SetVLine(colorLine,"OrderClose",DateTime,styleLine,widthLine);
}
if(SetVLineDelete)
{
SetVLine(colorLineDelete,"OrderDelete",DateTimeDelete,styleLineDelete,widthLineDelete);
}
if(TimeCurrent()>=DateTime)
{
ClosePosFirstProfit(symbol,Operation,MagicNumber);
ClosePositions(symbol,Operation,MagicNumber);
if(DeleteOrders) DeleteOrders(symbol,Operation,MagicNumber);
if(CloseTerminal) CloseTerminal();
}
if(TimeCurrent()>=DateTimeDelete)
{
if(DeleteOrders) DeleteOrders(symbol,Operation,MagicNumber);
if(CloseTerminal) CloseTerminal();
}
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 26.03.2013 |
//| Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| ll - ðàçìåð ëîòà. |
//+----------------------------------------------------------------------------+
void ClosePosBySelect(double ll=0)
{
bool fc;
color clClose;
double pa,pb,pp;
int dg=MarketInfo(OrderSymbol(),MODE_DIGITS),err,it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
{
Message("ClosePosBySelect(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
if(ll<=0) ll=OrderLots();
pp=NormalizeDouble(pp, dg);
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
Message("Error("+err+") Close "+GetNameOP(OrderType())+" "
+ErrorDescription(err)+", try "+it+"\n"
+OrderTicket()+" Ask="+DoubleToStr(pa,dg)
+" Bid="+DoubleToStr(pb,dg)+" pp="+DoubleToStr(pp,dg)+"\n"
+"sy="+OrderSymbol()+" ll="+DoubleToStr(ll,2)
+" sl="+DoubleToStr(OrderStopLoss(),dg)
+" tp="+DoubleToStr(OrderTakeProfit(),dg)+" mn="+OrderMagicNumber());
Sleep(1000*5);
}
}
}
else Message("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close "+GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûõ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
// Ñíà÷àëà çàêðûâàåì ïðèáûëüíûå ïîçèöèè
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
}
}
}
}
}
// Ïîòîì âñå îñòàëüíûå
k=OrdersTotal();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.03.2013 |
//| Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ll - ðàçìåð ëîòà. |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="",int op=-1,int mn=-1,double ll=0)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ll<=0) ll=OrderLots();
if(ll>OrderLots())
{
ClosePosBySelect(OrderLots());
ll-=OrderLots();
}
else ClosePosBySelect(ll);
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 18.04.2013 |
//| Îïèñàíèå : Çàêðûâàåò òîðãîâûé òåðìèíàë. |
//+----------------------------------------------------------------------------+
void CloseTerminal()
{
Print("Ñðàáîòàëà ôóíêöèÿ CloseTerminal()");
int hwnd=WindowHandle(Symbol(),Period());
int hwnd_parent=0;
while(hwnd==0)
{
hwnd=WindowHandle(Symbol(),Period());
if(IsStopped()) break;
Sleep(5);
}
while(!IsStopped())
{
hwnd=GetParent(hwnd);
if(hwnd==0) break;
hwnd_parent=hwnd;
}
if(hwnd_parent!=0) PostMessageA(hwnd_parent,WM_CLOSE,0,0);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 08.03.2013 |
//| Îïèñàíèå : Óäàëåíèå îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. |
//+----------------------------------------------------------------------------+
void DeleteOrderBySelect()
{
bool fd;
int err,it;
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(),clDelete);
if(fd)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
Message("Error("+err+") delete order "+GetNameOP(OrderType())
+": "+ErrorDescription(err)+", try "+it);
Sleep(1000*5);
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 08.03.2013 |
//| Îïèñàíèå : Óäàëåíèå îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal(),ot;
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ot=OrderType();
if(ot>1 && ot<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op))
{
if(mn<0 || OrderMagicNumber()==mn) DeleteOrderBySelect();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op)
{
switch(op)
{
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 08.03.2013 |
//| Îïèñàíèå : Âûâîä òåêñòîâîãî ñîîáùåíèÿ. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| ms - òåêñò ñîîáùåíèÿ |
//| nv - ôëàãè íàïðàâëåíèé âûâîäà ñîîáùåíèÿ: (0-âûêë, 1-âêë) |
//| Alert, Comment, Print, SendMail, SendNotification |
//| am - ôëàã âñåõ ïîâòîðÿþùèõñÿ ñîîáùåíèé |
//+----------------------------------------------------------------------------+
void Message(string ms,string nv="01100",bool am=False)
{
static string prevMessage="";
string as[];
int i,k;
if(StrToInteger(StringSubstr(nv,1,1))==1) Comment(ms);
if((StringLen(ms)>0) && (am || prevMessage!=ms))
{
if(StrToInteger(StringSubstr(nv,0,1))==1)
{
k=StrSplit(ms,as,"\n");
for(i=0; i<k; i++) Alert(as[i]);
}
if(StrToInteger(StringSubstr(nv,2,1))==1)
{
k=StrSplit(ms,as,"\n");
for(i=0; i<k; i++) Print(as[i]);
}
if(StrToInteger(StringSubstr(nv, 3, 1))==1) SendMail(WindowExpertName(), ms);
if(StrToInteger(StringSubstr(nv, 4, 1))==1) SendNotification(ms);
prevMessage=ms;
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 02.07.2008 |
//| Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_VLINE âåðòèêàëüíàÿ ëèíèÿ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| cl - öâåò ëèíèè |
//| nm - íàèìåíîâàíèå ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà) |
//| t1 - âðåìÿ (0 - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà) |
//| st - ñòèëü ëèíèè (0 - ïðîñòàÿ ëèíèÿ) |
//| wd - øèðèíà ëèíèè (1 - ïî óìîë÷àíèþ) |
//+----------------------------------------------------------------------------+
void SetVLine(color cl,string nm="",datetime t1=0,int st=0,int wd=1)
{
if(nm=="") nm=DoubleToStr(Time[0],0);
if(t1<=0) t1=Time[0];
if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_VLINE,0,0,0);
ObjectSet(nm,OBJPROP_TIME1,t1);
ObjectSet(nm,OBJPROP_COLOR,cl);
ObjectSet(nm,OBJPROP_STYLE,st);
ObjectSet(nm,OBJPROP_WIDTH,wd);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò ñòðîêó â ÂÅÐÕÍÅÌ ðåãèñòðå |
//+----------------------------------------------------------------------------+
string StringUpper(string s)
{
int c,i,k=StringLen(s),n;
for(i=0; i<k; i++)
{
n=0;
c=StringGetChar(s, i);
if(c>96 && c<123) n=c-32; // a-z -> A-Z
if(c>223 && c<256) n=c-32; // à-ÿ -> À-ß
if(c==184) n=168; // ¸ -> ¨
if(n>0) s=StringSetChar(s,i,n);
}
return(s);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 20.01.2012 |
//| Îïèñàíèå : Ðàçáèåíèå ñòðîêè íà ìàññèâ ýëåìåíòîâ |
//+----------------------------------------------------------------------------+
//| Âîçâðàò: |
//| Êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå |
//| Ïàðàìåòðû: |
//| st - ñòðîêà ñ ðàçäåëèòåëÿìè |
//| as - ñòðîêîâûé ìàññèâ |
//| de - ðàçäåëèòåëü |
//+----------------------------------------------------------------------------+
int StrSplit(string st,string &as[],string de=",")
{
int i=0,np;
string stp;
ArrayResize(as,0);
while(StringLen(st)>0)
{
np=StringFind(st,de);
if(np<0)
{
stp=st;
st="";
} else {
if(np==0) stp=""; else stp=StringSubstr(st,0,np);
st=StringSubstr(st,np+1);
}
i++;
ArrayResize(as,i);
as[i-1]=stp;
}
return(ArraySize(as));
}
//+----------------------------------------------------------------------------+
Comments