//Âíèìàíèå! Ýòîò ýêñïåðò òðåáóåò ðàçðåøåíèÿ íà èçïîëüçîâàíèå ñòîðîííèõ áèáëèîòåê DLL
//Ýêñïåðò óñòàíàâëèâàåòñÿ íà ëþáóþ ïàðó â òåðìèíàëå ñî ñ÷¸òîì èñòî÷íèêà ñäåëîê.
#property copyright "Copyright © Evgeniy Trofimov, 2009"
#property link "http://www.mql4.com/ru/users/EvgeTrofi"
#property show_inputs
#include <WinUser32.mqh>
#import "kernel32.dll"
int _lopen (string path, int of);
int _lclose (int handle);
int CopyFileA (string lpExistingFileName, string lpNewFileName, int bFailIfExists);
#import
// Êàê ýòî ðàáîòàåò:
// _lopen : Îòêpûâàåò óêàçàííûé ôàéë. Âîçâpàùàåò: îïèñàòåëü ôàéëà.
// _lclose : Çàêpûâàåò óêàçàííûé ôàéë. Âîçâpàùàåò: 0.
//  ñëó÷àå íåóñïåøíîãî çàâåpøåíèÿ âñå ôóíêöèè âîçâðàùàþò çíà÷åíèå HFILE_ERROR=-1.
// CopyFileA : Êîïèðóåò ôàéë â ëþáîå ìåñòî
// lpExistingFileName : ïóòü ê èñòî÷íèêó
// lpNewFileName : ïóòü ê ïîëó÷àòåëþ
// bFailIfExists : 0 - êîïèðîâàòü ìîë÷à, 1 - åñëè ôàéë ñóùåñòâóåò, òî ñïðàøèâàòü ðàçðåøåíèå íà ïåðåçàïèñü
// path : Ñòpîêà, îïpåäåëÿþùàÿ ïóòü è èìÿ ôàéëà.
// of : Ñïîñîá îòêðûòèÿ.
// attrib : 0 - ÷òåíèå èëè çàïèñü; 1 - òîëüêî ÷òåíèå; 2 - íåâèäèìûé èëè 3 - ñèñòåìíûé.
// handle : Ôàéëîâûé îïèñàòåëü.
// Ñïîñîáû îòêðûòèÿ (ïàðàìåòð of):
int OF_READ = 0; // Îòêðûòü ôàéë òîëüêî äëÿ ÷òåíèÿ
int OF_WRITE = 1; // Îòêðûòü ôàéë òîëüêî äëÿ çàïèñè
int OF_READWRITE = 2; // Îòêðûòü ôàéë â ðåæèìå çàïèñü/÷òåíèå
int OF_SHARE_COMPAT = 4; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî ñîâìåñòíîãî äîñòóïà.  ýòîì ðåæèìå ëþáîé ïðîöåññ ìîæåò îòêðûòü äàííûé ôàéë ëþáîå êîëè÷åñòâî ðàç. Ïðè ïîïûòêå îòêðûòü ýòîò ôàéë â ëþáîì äðóãîì ðåæèìå, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_EXCLUSIVE =16; // Çàïðåò òåêóùåìó è äðóãèì ïðîöåññàì íà äîñòóï ê ýòîìó ôàéëó â ðåæèìàõ ÷òåíèÿ/çàïèñè. Ôàéë â ýòîì ðåæèìå ìîæíî îòêðûòü òîëüêî îäèí ðàç (òåêóùèì ïðîöåññîì). Âñå îñòàëüíûå ïîïûòêè îòêðûòèÿ ôàéëà áóäóò ïðîâàëåíû.
int OF_SHARE_DENY_WRITE=32; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà ñ çàïðåòîì íà çàïèñü äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà ñ ôëàãàìè OF_SHARE_COMPAT è/èëè OF_WRITE èëè OF_READWRITE, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_DENY_READ =48; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà ñ çàïðåòîì íà ÷òåíèå äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà ñ ôëàãàìè OF_SHARE_COMPAT è/èëè OF_READ èëè OF_READWRITE, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_DENY_NONE =64; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà áåç çàïðåòà íà ÷òåíèå/çàïèñü äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà â ðåæèìå OF_SHARE_COMPAT, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
//---------------------------------------------------------------------------
extern string FileName = "Orders.txt"; // Èìÿ ôàéëà äëÿ ïîëó÷àòåëÿ
extern string Path = "D:\test"; // Êàòàëîã ïîëó÷àòåëÿ
//---------------------------------------------------------------------------
void start() {
string buffer[], oldBuffer[1000];
double risk;
string slash=StringSubstr("\a",0,1);
int dig, j, handle, k;
int total = OrdersTotal();
bool ReWrite=false;
ArrayResize(buffer,total);
for(int i = 0; i < total; i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
risk = 100*OrderLots()*MarketInfo(OrderSymbol(), MODE_MARGINREQUIRED)/AccountEquity();
dig = MarketInfo(OrderSymbol(), MODE_DIGITS);
buffer[j] = DoubleToStr(risk,3)+" "+OrderTicket()+" "+OrderSymbol()+" "+OrderType()+" "
+DoubleToStr(OrderOpenPrice(),dig)+" "
+DoubleToStr(OrderStopLoss(),dig)+" "
+DoubleToStr(OrderTakeProfit(),dig);
j++;
}
}//Next i
//Îòêðîåì ôàéë äëÿ ÷òåíèÿ è ïîñòðî÷íî ñðàâíèì, èçìåíèëîñü ëè ÷åãî ñ ïðîøëîãî ðàçà èëè íåò
handle=FileOpen(FileName,FILE_BIN);
if(handle<0) {
Print("Îòñóòñòâóåò ôàéë îðäåðîâ. Ôàéë áóäåò ñîçäàí.");
ReWrite=true;
} else {
k=FileReadArray(handle,oldBuffer,0,1000);
FileClose(handle);
if(k!=j) {
Print("Ïîìåíÿëîñü êîëè÷åñòâî îðäåðîâ. Ôàéë áóäåò ïåðåïèñàí.");
ReWrite=true;
} else {
for(i=0; i<j; i++) {
if(StringSubstr(buffer[i], 6)!=StringSubstr(oldBuffer[i], 6)) {
Print("Ïîìåíÿëèñü çíà÷åíèÿ. Ôàéë áóäåò ïåðåïèñàí.");
Print(StringSubstr(buffer[i], 6));
Print(StringSubstr(oldBuffer[i], 6));
ReWrite=true;
break;
}
if(oldBuffer[i]=="") break;
}//Next i
}
if(k==0){
Print("Íåò íè îäíîãî îòêðûòîãî îðäåðà. Ôàéë áóäåò ïåðåïèñàí. (íà ñëó÷àé, êîãäà èñòî÷íèê ñëèøêîì áûñòðî çàêðîåò âñå îðäåðà)");
ReWrite=true;
}
}
if(ReWrite) {
handle=FileOpen(FileName,FILE_BIN|FILE_WRITE);
if(FileWriteArray(handle, buffer, 0, j)>0) {
FileClose(handle);
j = _lopen(Path+slash+FileName,OF_READ);
if(j<0) {//Ôàéë íå ïåðåçàïèñûâàåì!
CopyFileA(TerminalPath()+"\experts\files"+slash+FileName, Path+slash+FileName, 0);
} else {
_lclose(j);
FileDelete(FileName);
Print("Ôàéë îðäåðîâ óäàë¸í, ïîòîìó ÷òî ôàéë, íàõîäÿùèéñÿ ó ïîëó÷àòåëÿ, åù¸ íå îáðàáîòàí.");
}
}
}
} //start()
Comments