Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
mt_terminal
//+------------------------------------------------------------------+
//| mt_terminal.mq4 |
//| Copyright © 2011, albr |
//| albr@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, albr"
#property link "albr@ukr.net"
#include <stderror.mqh>
extern bool ShowArrow4NewOrders = false; // îòîáðàæàòü ñòðåëêè ïðè ïîêóïêå/ïðîäàæå/çàêðûòèè îðäåðîâ
extern int order_slippage = 3; // ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû
int magicnumber = 123; // èäåíòèôèêàòîð îðäåðîâ îòêðûòûõ ñ ïîìîùüþ ñîâåòíèêà
/* Âíóòðåííèå ïåðåìåííûå (íå ìîäèôèöèðîâàòü) */
int g_accMaxLotSize = 0; // ìàêñèìàëüíîå êîë-âî îòêðûâàåìûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
double g_accMaxLotValue = 0; // ìàêñèìàëüíîå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
int g_currentLotSize = 0; // òåêóùåå êîë-âî îòêðûâàåìûõ îðäåðîâ.
double g_currentLotValue = 0; // òåêóùåå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ.
string g_set_curr = ""; // òåêóùàÿ âàëþòà
int g_totalordersH = 0; // êîë-âî îðäåðîâ â èñòîðèè
int g_FirstOrderTicketH = -1; // ïåðâûé îðäåð â èñòîðèè
#import "mt_dll.dll"
int init_dll();
int deinit_dll();
int prepare_write_dll();
int write_dll(string);
int commit_dll();
int get_orders_count_dll();
string get_order_dll(int);
int send_order_dll(string);
#import
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
init_dll();
g_totalordersH = 0;
g_FirstOrderTicketH = -1;
send_order_dll("hclear");
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
deinit_dll();
g_totalordersH = 0;
g_FirstOrderTicketH = -1;
return(0);
}
/*
aOrder: OO LLLLL TTTTTTTTTT SSSSSSSSSSSSSSS PPPPPPPPPPPPPPP CCCCCCCC
01 23456 7890123456 789012345678901 234567890123456 78901234
O 02[00 .. 01]: BN - buy now; SN - sell now; CN - Close now; BL - Buy Limit; BS - Buy Stop; SL - Sell Limit; SS - Sell Stop; CO - cancel order; MO - Modify Order;
LS - max lots size; LV - max lots value;
L 05[02 .. 06]: lot size 5,2;
T 10[07 .. 16]: ticket no
S 15[17 .. 31]: stop lose 15
max lot size; max lot value
P 15[32 .. 46]: take profit 15
C 8 [47 .. 54]: currency
*/
int ParseOrder (string aOrder, int& aOrderType, double& aOrderValue, int& aOrderTicket, int& aOrderTP, int& aOrderSL, string& aCurrency)
{
if (StringLen(aOrder) < 7) return (1);
int res = 0;
string ordType = StringSubstr(aOrder, 0, 2);
if (ordType == "BN")
{
aOrderType = OP_BUY;
aOrderValue = StrToDouble(StringTrimRight(StringSubstr(aOrder, 2, 5)))/100;
aOrderSL = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));
aOrderTP = StrToInteger(StringTrimRight(StringSubstr(aOrder, 32, 15)));
aCurrency = StringTrimRight(StringSubstr(aOrder, 47, 8));
} else
if (ordType == "SN")
{
aOrderType = OP_SELL;
aOrderValue = StrToDouble(StringTrimRight(StringSubstr(aOrder, 2, 5)))/100;
aOrderSL = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));
aOrderTP = StrToInteger(StringTrimRight(StringSubstr(aOrder, 32, 15)));
aCurrency = StringTrimRight(StringSubstr(aOrder, 47, 8));
} else
if (ordType == "CO")
{
aOrderType = -1;
aOrderTicket = StrToInteger(StringTrimLeft(StringSubstr(aOrder, 7, 10)));
} else
if (ordType == "LS")
{ // ìàêñèìàëüíîå êîë-âî îòêðûâàåìûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
g_accMaxLotSize = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));
res = 1;
} else
if (ordType == "LV")
{ // ìàêñèìàëüíîå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
g_accMaxLotValue = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));
g_accMaxLotValue = g_accMaxLotValue / 100;
res = 1;
} else
if (ordType == "SC")
{ // Set Currency
g_set_curr = StringTrimRight(StringSubstr(aOrder, 7, 10));
if (MarketInfo(g_set_curr, MODE_ASK) == 0)
{
g_set_curr = "";
}
res = 1;
} else
if (ordType == "UH")
{
g_totalordersH = 0;
g_FirstOrderTicketH = -1;
res = 1;
} else
{
res = 1;
}
return (res);
}
/* getCurrency - òåêóùàÿ âàëþòà*/
string getCurrency(string aCCY)
{
if (aCCY != "") {return (aCCY);}
if (g_set_curr == "") {return (Symbol());}
return (g_set_curr);
}
double getCurrencyBid(string aCCY)
{
return (MarketInfo(getCurrency(aCCY), MODE_BID));
}
double getCurrencyAsk(string aCCY)
{
return (MarketInfo(getCurrency(aCCY), MODE_ASK));
}
double getCurrencyPoint(string aCCY)
{
return (MarketInfo(getCurrency(aCCY), MODE_POINT));
}
void PrintError(string aErrM)
{
if (StringLen(aErrM) > 0)
{
Print("err:",aErrM,".");
send_order_dll("m"+aErrM);
}
return;
}
/*CheckOrder - ïðîâåðêà îãðàíè÷åíèé ïî ìàêñèìàëüíîìó êîë-âó ëîòîâ
albr
*/
bool CheckOrder(int aOrderType, double aOrderValue)
{
string l_last_error_message = "";
if (g_accMaxLotSize > 0)
{
if (g_currentLotSize+1 > g_accMaxLotSize)
{
l_last_error_message = "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] Íàðóøåíî îãðàíè÷åíèå ïî ìàêñèìàëüíîìó êîë-âó îòêðûòûõ îðäåðîâ. Ìàêñèìóì = "+g_accMaxLotSize+". Òåêóùåå êîë-âî = "+g_currentLotSize;
PrintError(l_last_error_message);
return (false);
}
}
if (g_accMaxLotValue > 0)
{
if (NormalizeDouble(g_currentLotValue+aOrderValue,2) > NormalizeDouble(g_accMaxLotValue,2))
{
l_last_error_message = "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] Íàðóøåíî îãðàíè÷åíèå ïî ìàêñèìàëüíîìó îáúåìó îòêðûòûõ îðäåðîâ. Ìàêñèìóì = "+DoubleToStr(NormalizeDouble(g_accMaxLotValue ,2),2)
+". Òåêóùèé îáúåì = "+DoubleToStr(NormalizeDouble(g_currentLotValue,2),2);
PrintError(l_last_error_message);
return (false);
}
}
return (true);
}
/* apply_new_orders - îáðàáîòàòü íîâûå îðäåðà
albr
*/
int apply_new_orders(string acc_num)
{
int new_orders = get_orders_count_dll();
int ticket = 0;
string l_last_error_message = "";
string lOrder;
if (new_orders > 0)
{
for (int i = 0; i<new_orders; i++)
{
RefreshRates();
lOrder = get_order_dll(i);
int lOrderType;
double lOrderValue;
int lOrderTP;
int lOrderSL;
double lOrderTP_;
double lOrderSL_;
int lOrderTicket;
int lColorB = Green;
int lColorS = Violet;
string lCCY = "";
string sOrd = "";
if (ShowArrow4NewOrders == false)
{
lColorB = CLR_NONE;
lColorS = CLR_NONE;
}
if (ParseOrder (lOrder, lOrderType, lOrderValue, lOrderTicket, lOrderTP, lOrderSL, lCCY) == 0)
{
if (lOrderType == OP_BUY && lOrderValue > 0)
{
if (CheckOrder(lOrderType, lOrderValue) == false) return (0);
if (lOrderTP <= 0)
{lOrderTP_ = NULL;} else
{lOrderTP_ = getCurrencyAsk(lCCY) + lOrderTP*getCurrencyPoint(lCCY);}
if (lOrderSL <= 0)
{lOrderSL_ = NULL;} else
{lOrderSL_ = getCurrencyAsk(lCCY) - lOrderSL*getCurrencyPoint(lCCY);}
ticket = OrderSend(getCurrency(lCCY), OP_BUY, lOrderValue, getCurrencyAsk(lCCY), order_slippage, lOrderSL_, lOrderTP_, NULL, magicnumber, 0, lColorB);
sOrd = DoubleToStr(NormalizeDouble(lOrderValue ,2),2) + " BUY (#"+ticket+") "+getCurrency(lCCY);
}
else
if (lOrderType == OP_SELL && lOrderValue > 0)
{
if (CheckOrder(lOrderType, lOrderValue) == false) return (0);
if (lOrderTP <= 0)
{lOrderTP_ = NULL;} else
{lOrderTP_ = getCurrencyBid(lCCY) - lOrderTP*getCurrencyPoint(lCCY);}
if (lOrderSL <= 0)
{lOrderSL_ = NULL;} else
{lOrderSL_ = getCurrencyBid(lCCY) + lOrderSL*getCurrencyPoint(lCCY);}
ticket = OrderSend(getCurrency(lCCY), OP_SELL, lOrderValue, getCurrencyBid(lCCY), order_slippage, lOrderSL_, lOrderTP_, NULL, magicnumber, 0, lColorB);
sOrd = DoubleToStr(NormalizeDouble(lOrderValue ,2),2) + " SELL (#"+ticket+") "+getCurrency(lCCY);
}
else
if (lOrderType == -1 && lOrderTicket > 0)
{
if(OrderSelect(lOrderTicket, SELECT_BY_TICKET, MODE_TRADES)==true)
{
if(OrderType()==OP_BUY)
{
sOrd = DoubleToStr(NormalizeDouble(OrderLots() ,2),2) + " CLOSE BUY (#"+lOrderTicket+") "+DoubleToStr(NormalizeDouble(OrderProfit()+OrderSwap(),2),2)+" "+OrderSymbol();
if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),order_slippage,lColorS)) PrintLastHistoryOrder(lOrderTicket);
}
else
if(OrderType()==OP_SELL)
{
sOrd = DoubleToStr(NormalizeDouble(OrderLots() ,2),2) + " CLOSE SELL (#"+lOrderTicket+") "+DoubleToStr(NormalizeDouble(OrderProfit()+OrderSwap(),2),2)+" "+OrderSymbol();
if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),order_slippage,lColorS)) PrintLastHistoryOrder(lOrderTicket);
}
}
}
int err=GetLastError();
if (StringLen(l_last_error_message) > 0) l_last_error_message = l_last_error_message + ";%%%";
l_last_error_message = l_last_error_message + "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] ";
if (err != ERR_NO_ERROR)
{
l_last_error_message = l_last_error_message + ErrorDescription(err);
}
else
{
l_last_error_message = l_last_error_message + sOrd;
}
}
}
}
PrintError(l_last_error_message);
return (0);
}
/* upload_account_info - âûãðóçèòü èíôîðìàöèþ î òåêóùåì ñ÷åòå
albr
*/
int upload_account_info(string acc_num)
{
prepare_write_dll();
write_dll("[ACCOUNT]="+acc_num);
write_dll("[BALANCE]="+DoubleToStr(NormalizeDouble(AccountBalance(),2),2));
write_dll("[EQUITY]="+DoubleToStr(NormalizeDouble(AccountEquity(),2),2));
write_dll("[PROFIT]="+DoubleToStr(NormalizeDouble(AccountEquity()-AccountBalance(),2),2));
double lpoint = getCurrencyPoint("");
if (lpoint == 0)
{
write_dll("[SPREAD]=0");
write_dll("[DEFCCYASK]=0");
write_dll("[DEFCCYBID]=0");
} else
{
write_dll("[SPREAD]="+DoubleToStr((getCurrencyAsk("") - getCurrencyBid(""))/lpoint,0));
write_dll("[DEFCCYASK]="+DoubleToStr(getCurrencyAsk("")/lpoint,0));
write_dll("[DEFCCYBID]="+DoubleToStr(getCurrencyBid("")/lpoint,0));
}
write_dll("[DEFCCY]="+getCurrency(""));
int totalorders = OrdersTotal();
g_currentLotSize = totalorders;
g_currentLotValue = 0;
write_dll("[ORDERS]="+DoubleToStr(NormalizeDouble(totalorders,0),0));
for (int i=0; i < totalorders; i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
write_dll("[ORDER_"+i+"_TICKET]="+OrderTicket());
write_dll("[ORDER_"+i+"_SYMBOL]="+OrderSymbol());
write_dll("[ORDER_"+i+"_TYPE]="+GetOrderTypeStr(OrderType()));
write_dll("[ORDER_"+i+"_LOTS]="+DoubleToStr(NormalizeDouble(OrderLots(),2),2));
g_currentLotValue = NormalizeDouble(g_currentLotValue + OrderLots(),2);
write_dll("[ORDER_"+i+"_OPENTIME]="+TimeToStr(OrderOpenTime(),TIME_DATE|TIME_SECONDS));
write_dll("[ORDER_"+i+"_PROFIT]="+DoubleToStr(NormalizeDouble(OrderProfit(),2),2));
write_dll("[ORDER_"+i+"_SWAP]="+DoubleToStr(NormalizeDouble(OrderSwap() ,2),2));
write_dll("[ORDER_"+i+"_MAGIC]="+DoubleToStr(NormalizeDouble(OrderMagicNumber() ,0),0));
write_dll("[ORDER_"+i+"_OPENPRICE]="+DoubleToStr(NormalizeDouble(OrderOpenPrice(), 5), 5));
}
}
commit_dll();
PrintHistoryOrders();
return (0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
apply_new_orders(AccountNumber());
upload_account_info(AccountNumber());
return(0);
}
//+------------------------------------------------------------------+
string ErrorDescription(int err_code)
{
switch(err_code)
{
case 1: return("Ïîïûòêà èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè");
case 2: return("Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ");
case 3: return("Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû ");
case 4: return("Òîðãîâûé ñåðâåð çàíÿò");
case 5: return("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");
case 6: return("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");
case 7: return("Íåäîñòàòî÷íî ïðàâ");
case 8: return("Ñëèøêîì ÷àñòûå çàïðîñû");
case 9: return("Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà");
case 64: return("Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");
case 65: return("Íåïðàâèëüíûé íîìåð ñ÷åòà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");
case 128: return("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè");
case 129: return("Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà");
case 130: return("Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ (èëè â öåíå îòêðûòèÿ îòëîæåííîãî îðäåðà)");
case 131: return("Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà");
case 132: return("Ðûíîê çàêðûò");
case 133: return("Òîðãîâëÿ çàïðåùåíà");
case 134: return("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè");
case 135: return("Öåíà èçìåíèëàñü");
case 136: return("Íåò öåí");
case 137: return("Áðîêåð çàíÿò");
case 138: return("Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask");
case 139: return("Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ");
case 140: return("Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ");
case 141: return("Ñëèøêîì ìíîãî çàïðîñîâ");
case 142: return("Îðäåð ïîñòàâëåí â î÷åðåäü");
case 143: return("Îðäåð ïðèíÿò äèëåðîì ê èñïîëíåíèþ");
case 144: return("Îðäåð àííóëèðîâàí ñàìèì êëèåíòîì ïðè ðó÷íîì ïîäòâåðæäåíèè ñäåëêè");
case 145: return("Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ");
case 146: return("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïîâòîðèòü ïîïûòêó òîëüêî ïîñëå òîãî, êàê ôóíêöèÿ IsTradeContextBusy âåðíåò FALSE.");
case 147: return("Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì");
case 148: return("Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì");
case 149: return("Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî");
case 4001: return("Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè");
case 4002: return("Èíäåêñ ìàññèâà - âíå äèàïàçîíà");
case 4003: return("Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé");
case 4004: return("Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà");
case 4005: return("Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ");
case 4006: return("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà");
case 4007: return("Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè");
case 4008: return("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà");
case 4009: return("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå");
case 4010: return("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà");
case 4011: return("Ñëèøêîì äëèííàÿ ñòðîêà");
case 4012: return("Îñòàòîê îò äåëåíèÿ íà íîëü");
case 4013: return("Äåëåíèå íà íîëü");
case 4014: return("Íåèçâåñòíàÿ êîìàíäà");
case 4015: return("Íåïðàâèëüíûé ïåðåõîä");
case 4016: return("Íåèíèöèàëèçèðîâàííûé ìàññèâ");
case 4017: return("Âûçîâû DLL íå ðàçðåøåíû");
case 4018: return("Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó");
case 4019: return("Íåâîçìîæíî âûçâàòü ôóíêöèþ");
case 4020: return("Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû");
case 4021: return("Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè");
case 4022: return("Ñèñòåìà çàíÿòà");
case 4050: return("Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè");
case 4051: return("Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè");
case 4052: return("Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè");
case 4053: return("Îøèáêà ìàññèâà");
case 4054: return("Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè");
case 4055: return("Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà");
case 4056: return("Ìàññèâû íåñîâìåñòèìû");
case 4057: return("Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ");
case 4058: return("Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà");
case 4059: return("Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå");
case 4060: return("Ôóíêöèÿ íå ðàçðåøåíà");
case 4061: return("Îøèáêà îòïðàâêè ïî÷òû");
case 4062: return("Îæèäàåòñÿ ïàðàìåòð òèïà string");
case 4063: return("Îæèäàåòñÿ ïàðàìåòð òèïà integer");
case 4064: return("Îæèäàåòñÿ ïàðàìåòð òèïà double");
case 4065: return(" êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ");
case 4066: return("Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ");
case 4067: return("Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè");
case 4099: return("Êîíåö ôàéëà");
case 4100: return("Îøèáêà ïðè ðàáîòå ñ ôàéëîì");
case 4101: return("Íåïðàâèëüíîå èìÿ ôàéëà");
case 4102: return("Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ");
case 4103: return("Íåâîçìîæíî îòêðûòü ôàéë");
case 4104: return("Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó");
case 4105: return("Íè îäèí îðäåð íå âûáðàí");
case 4106: return("Íåèçâåñòíûé ñèìâîë");
case 4107: return("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè");
case 4108: return("Íåâåðíûé íîìåð òèêåòà");
case 4109: return("Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü â ñâîéñòâàõ ýêñïåðòà");
case 4110: return("Äëèííûå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");
case 4111: return("Êîðîòêèå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");
case 4200: return("Îáúåêò óæå ñóùåñòâóåò");
case 4201: return("Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà");
case 4202: return("Îáúåêò íå ñóùåñòâóåò");
case 4203: return("Íåèçâåñòíûé òèï îáúåêòà");
case 4204: return("Íåò èìåíè îáúåêòà");
case 4205: return("Îøèáêà êîîðäèíàò îáúåêòà");
case 4206: return("Íå íàéäåíî óêàçàííîå ïîäîêíî");
case 4207: return("Îøèáêà ïðè ðàáîòå ñ îáúåêòîì");
default: return("Íåèçâåñòíàÿ îøèáêà: "+err_code);
}
return("");
}
/* PrintHistoryOrders - âûãðóçèòü èíôîðìàöèþ îá èñòîðèè òåêóùåãî ñ÷åòà
albr
*/
void PrintHistoryOrders()
{
int totalorders = OrdersHistoryTotal();
if (g_totalordersH == totalorders)
{
if (totalorders > 0)
{
if(OrderSelect(0,SELECT_BY_POS, MODE_HISTORY))
{
if (g_FirstOrderTicketH == OrderTicket()) return;
g_FirstOrderTicketH = OrderTicket();
}
}
else
{
g_FirstOrderTicketH = -1;
return;
}
}
g_totalordersH = totalorders;
send_order_dll("hclear");
for (int i=0; i < totalorders; i++)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
{
SendHistoryOrder();
}
}
}
/* PrintLastHistoryOrder - âûãðóçèòü èíôîðìàöèþ î ïîñëåäíåì çàêðûòîì îðäåðå
albr
*/
void PrintLastHistoryOrder(int HistoryTicket)
{
if(OrderSelect(HistoryTicket, SELECT_BY_TICKET, MODE_HISTORY))
{
g_totalordersH = g_totalordersH + 1;
SendHistoryOrder();
}
}
string GetOrderTypeStr(int aOrderType)
{
string ord_type;
switch(aOrderType)
{
case OP_BUY: ord_type = "BUY"; break;
case OP_SELL: ord_type = "SELL"; break;
case OP_BUYLIMIT: ord_type = "BUYLIMIT"; break;
case OP_BUYSTOP: ord_type = "BUYSTOP"; break;
case OP_SELLLIMIT: ord_type = "SELLLIMIT"; break;
case OP_SELLSTOP: ord_type = "SELLSTOP"; break;
}
return (ord_type);
}
void SendHistoryOrder()
{
send_order_dll("h["+ DoubleToStr(NormalizeDouble(OrderLots() ,2),2)+
"]["+ OrderMagicNumber()+
"]["+ OrderTicket()+
"]["+ OrderSymbol()+
"]["+ DoubleToStr(NormalizeDouble(OrderClosePrice(),5),5) +
"]["+ TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+
"]["+ DoubleToStr(NormalizeDouble(OrderOpenPrice() ,5),5)+
"]["+ TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+
"]["+ DoubleToStr(NormalizeDouble(OrderSwap() ,2),2)+
"]["+ DoubleToStr(NormalizeDouble(OrderProfit() ,2),2)+
"]["+ GetOrderTypeStr(OrderType())+
"]"
);
return;
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---