//+------------------------------------------------------------------+
//| Ach CheckOrders.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property strict
// Äàííûé ïðîäóêò áûë íàïèñàí äëÿ èñïîëüçîâàíèÿ â ñîâåòíèêå ÷òîáû ïîýêñïåðèìåíòèðîâàòü ñ ìàðòèíîì.×òî áû äàííûå î îðäåðàõ áûëè â îäíîì ôëàêîíå.
// ×òî âûâîäèò ñìîòðåòü ñ 80 ïî 109 ñòðîêó. Íà ïåðâûé âçãëÿä çàïóòàííî, íî ñî øïàðãàëêîé
// Ïðèìåð èñïîëüçîâàíèÿ â ñîâåòíèêå
// if(order[6]==0 && order[7]<0) // åñëè ó Âàñ íåò ñäåëîê (çàêðûëàñü ïî TP èëè SL) íî îñòàëèñü îòëîæåííûå îðäåðà êîòîðûå íàäî óäàëèòü
// {
// if(OrderDelete(order[8])!=tru)Fun_Error(GetLastError(); // óäàëÿåì ïåðâûé îòëîæåíûé îðäåð ñ äàííûì òèêåòîì order[8], åñëè èõ íåñêîëüêî òî íà ñëåä òèêå óäàëèòñÿ ñëåäóþùèé è òä
// return; //âûõîä â OnTick
// }
//
extern int Magic=1234;
double buy[5],sell[5],prof[6]; // ïåðåìåííûå ó÷åòà îðäåðîâ
int order[15],order_old[15]; //// ïåðåìåííûå ó÷åòà îðäåðîâ
double L_buy[5],L_sell[5],L_prof[6]; // ïåðåìåííûå ó÷åòà îðäåðîâ
int L_order[15],L_order_old[15]; //// ïåðåìåííûå ó÷åòà îðäåðîâ
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
CheckOrders(Magic,_Symbol,order,order_old,buy,sell,prof);
// CheckOrders(Magic,_Symbol,L_order,L_order_old,L_buy,L_sell,L_prof);
// Âûâîä êîììåíòàðèÿ äëÿ ïðîâåðêè ðàáîòû CheckOrders()
Comment("Buy ",order[0]," ",buy[0]," ",sell[0]," ",prof[0],
"\nSell ",order[1]," ",buy[1]," ",sell[1]," ",prof[1],
"\nbuylimit ",order[2]," ",buy[2]," ",sell[2]," ",prof[2],
"\nselllimit ",order[3]," ",buy[3]," ",sell[3]," ",prof[3],
"\nbuystop ",order[4]," ",buy[4]," ",sell[4]," ",prof[4],
"\nsellstop ",order[5]," ",prof[5],
"\nÑäåëîê ",order[6],
"\nÎòëîæåê ",order[7],
"\nòèê 0 ORD ",order[8],
"\n ",order[9],
"\n ",order[10],
"\n ",order[11],
"\n ",order[12],
"\n ",order[13],
"\n ",order[14]);
}
void CheckOrders(int Mag,string Symbl,int &orders[15],int &orders_Old[15],double &buy_mas[5],double &sell_mas[5],double &prof_mas[6])
{
ArrayCopy(orders_Old,orders);// Ñîõðàíÿåì ïðåäûäóùóþ èñòîðèþ
ArrayInitialize(orders,0);// îáíóëÿåì ìàññèâ
ArrayInitialize(buy_mas,0);
ArrayInitialize(sell_mas,0);
ArrayInitialize(prof_mas,0);// îáíóëÿåì ìàññèâ
/* orders[0] - êîëè÷åñòâî Buy
// orders[1] - êîëè÷åñòâî Sell
// orders[2] - êîëè÷åñòâî buylimit
// orders[3] - selllimit
// orders[4] - êîëè÷åñòâî buystop
// orders[5] - êîëè÷åñòâî sellstop
// orders[6] - êîëè÷åñòâî ñäåëîê
// orders[7] - êîëè÷åñòâî îòëîæåê
// orders[8] - òèêåò ïåðâîãî ëþáîãî íóëåâîãî îðäåðà
// orders[9] - òèêåò ïåðâîãî ñ ìåíüøèì ïîðÿäêîâûì íîìåðîì Buy
// orders[10] - òèêåò ïîñëåäíåãî ñ áîëüøèì ïîðÿäêîâûì íîìåðîì Buy
// orders[11] - òèêåò ïåðâîãî ñ ìåíüøèì ïîðÿäêîâûì íîìåðîì Sell
// orders[12] - òèêåò ïîñëåäíåãî ñ áîëüøèì ïîðÿäêîâûì íîìåðîì Sell
// orders[13] - íàëè÷èå ëèìèòíûõ buylimit è selllimit îðäåðîâ
// orders[14] - íàëè÷èå buystop è sellstop îðäåðîâ
// buy_mas[0] - Öåíà ïîñëåäíåãî îòêðûòîãî Buy sell_mas[0] - Öåíà ïîñëåäíåãî îòêðûòîãî Sell
// buy_mas[1] - Öåíà áåçóûòêà NonLosBuy sell_mas[1] - Öåíà áåçóûòêà NonLosSell
// buy_mas[2] - max ëîò Buy sell_mas[2] - max ëîò Sell
// buy_mas[3] - ñóììà âñåõ ëîòîâ Buy sell_mas[3] - ñóììà âñåõ ëîòîâ Sell
// buy_mas[4] - ëîò ïåðâîãî buy sell_mas[4] - ëîò ïåðâîãî sell
// prof_mas[0] - Ïðîôèò Buy ñäåëîê
// prof_mas[1] - Ïðîôèò Sell ñäåëîê
// prof_mas[2] - îáùèé ïðîôèò ïî òåêùåìó èíñòðóìåíòó
// prof_mas[3] - Ïðîôèò ïî ìàãèêó
// prof_mas[4] - Ïðîôèò ïî ñ÷åòó
// prof_mas[5] - NoLossTotal áåçóáûòîê ïðè íàëè÷èè âñòðå÷íûõ îðäåðîâ ïðè ïåðåâåñå êîëè÷åñòâà ëîòîâ â ëþáóþ ñòîðîíó */
double techBuy,technSell; // òåõíè÷åñêèé îïåðàòîð
techBuy=0;
technSell=0;
int tip;
int poz;
int tiket=-1;
for(poz=OrdersTotal()-1;poz>=0;poz--)
//+------------------------------------------------------------------+
//| ïåðåáîð îðäåîâ îò áîëüøãî ê ìíåíüøåìó |
//+------------------------------------------------------------------+
{
if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==_Symbol && OrderMagicNumber()==Mag && OrderTicket()!=tiket)
{
tiket=OrderTicket();
orders[8]=tiket; // òèêåò ëþáîãî ñàìîãî ïåðâîãî îðäåðà
tip=OrderType();
switch(tip)
{
case 0:{orders[0]++;orders[6]++;buy_mas[3]+=OrderLots();buy_mas[4]=OrderLots();orders[9]=OrderTicket();break;}
case 1:{orders[1]++;orders[6]++;sell_mas[3]+=OrderLots();sell_mas[4]=OrderLots();orders[11]=OrderTicket();break;}
case 2:{orders[2]++;orders[7]++;orders[13]++;break;}
case 3:{orders[3]++;orders[7]++;orders[13]++;break;}
case 4:{orders[4]++;orders[7]++;orders[14]++;break;}
case 5:{orders[5]++;orders[7]++;orders[14]++;break;}
}
if(orders[10]<orders[9])orders[10]=orders[9]; //òèêåò ïîñëåäíåãî ñ áîëüøèì íîìåðîì áàÿ
if(orders[12]<orders[11])orders[12]=orders[11]; //òèêåò ïîñëåäíåãî ñ áîëüøèì íîìåðîì ñåëëà
if(buy_mas[2]<buy_mas[4])buy_mas[2]=buy_mas[4]; //max ëîò Buy
if(sell_mas[2]<sell_mas[4])sell_mas[2]=sell_mas[4]; //max ëîò Sell
if(OrderType()==OP_BUY)
{
techBuy=techBuy+OrderOpenPrice()*OrderLots();
prof_mas[0]=prof_mas[0]+OrderProfit()+OrderSwap(); //Ïðîôèò Buy ñäåëîê
buy_mas[1]=NormalizeDouble(techBuy/buy_mas[3],_Digits); //Öåíà áåçóûòêà NonLosBuy áåç ó÷åòà Swop è êîìèññèè
}
if(OrderType()==OP_SELL)
{
technSell=technSell+OrderOpenPrice()*OrderLots();
prof_mas[1]=NormalizeDouble(prof_mas[1]+OrderProfit()+OrderSwap(),_Digits); //Ïðîôèò Sell ñäåëîê
sell_mas[1]=NormalizeDouble(technSell/sell_mas[3],_Digits); //Öåíà áåçóûòêà NonLosSell áåç ó÷åòà Swop è êîìèññèè
}
}
if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==_Symbol )
{
prof_mas[2]=NormalizeDouble(prof_mas[2]+OrderProfit()+OrderSwap(),2); // îáùèé ïðîôèò ïî òåêùåìó èíñòðóìåíòó
}
if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true)
{
prof_mas[4]=NormalizeDouble(prof_mas[4]+OrderProfit()+OrderSwap(),2); // îáùèé ïðîôèò ïî ñ÷åòó
}
}
if(orders[0]>0 && orders[1]>0 && buy_mas[3]!=sell_mas[3])prof_mas[5]=NormalizeDouble(Bid-prof_mas[2]/MarketInfo(Symbol(),MODE_TICKVALUE)/(buy_mas[3]-sell_mas[3])*Point,Digits);
prof_mas[3]=NormalizeDouble(prof_mas[0]+prof_mas[1],2); //îáùèé ïðîôèò ïî òåêóùåìó ìàãèêó
if(OrderSelect(orders[10],SELECT_BY_TICKET,MODE_TRADES)==true)buy_mas[0]=OrderOpenPrice(); // Öåíà ïîñëåäíåãî îòêðûòîãî áàÿ
if(OrderSelect(orders[12],SELECT_BY_TICKET,MODE_TRADES)==true)sell_mas[0]=OrderOpenPrice(); // Öåíà ïîñëåäíåãî îòêðûòîãî ñåëëà
return;
}
//+------------------------------------------------------------------+
Comments