Author: Copyright c 2010, MQL ��� ����.
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
mylib_v3_3
//+--------------------------------------------------------------------------------------+
//|                                                                       mylib_v3_3.mq4 |
//|                                                       Copyright © 2010, Korvin ® Co. |
//|                                                             http://alecask.narod.ru/ |
//+--------------------------------------------------------------------------------------+
// bool RutineCheck()
// double GetLot(int Risk)
// double GetLot(int Risk)
// int NewOrder(int Cmd,double Lot,double PR=0,double TP=0,double SL=0)
// void DelOrders(int Cmd
// void DelOrder(int tic)
// void EditOrder(int tic,double sl, double tp)
// void CloseOrder(int tic)
// string Span(int n=0)
// int ErrorFix ()
//
#property copyright "Copyright c 2010, MQL äëÿ òåáÿ."
#property link      "http://mql4you.ru"
#property library
extern int  TakeProfit=0;
extern int  StopLoss=0;
//+--------------------------------------------------------------------------------------+
//|                                                                   Ðóòèííûå ïðîâåðêè  |
//+--------------------------------------------------------------------------------------+
bool RutineCheck() {
   bool trade = true;
if(DayOfWeek()==0||DayOfWeek()==6) trade=false;  // â âûõîäíûå
                                                 // íå ðàáîòàåì
if(!IsTradeAllowed()) trade=false;               // ïðîïóñòèì òèê åñëè
                                                 // òåðìèíàë çàíÿò
return(trade);}
//+--------------------------------------------------------------------------------------+
//|                              Ïîëó÷åíèå ìàêñèìàëüíîãî ðàçìåðà ëîòà ïðè çàäàííîì ðèñêå |
//+--------------------------------------------------------------------------------------+
double GetLot(int Risk)
{double Free    =AccountFreeMargin();
 double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
 double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
 double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
 double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
 double Lot     =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
 if(Lot<Min_Lot) Lot=Min_Lot;
 if(Lot>Max_Lot) Lot=Max_Lot;
 if(Lot*One_Lot>Free) return(0.0);
return(Lot);}
//+--------------------------------------------------------------------------------------+
//|                                                               Îòêðûòèå íîâîãî îðäåðà |
//+--------------------------------------------------------------------------------------+
int NewOrder(int Cmd, double Lot, double PR=0, double TP=0, double SL=0, int magic=0)
{
while(!IsTradeAllowed()) Sleep(100);
 if(Cmd==OP_BUY)
   {PR=NormalizeDouble(Ask,Digits);
    if(TP==0 && TakeProfit>0) TP=PR+TakeProfit*Point;
    if(SL==0 && StopLoss>0) SL=PR-StopLoss*Point;}
 if(Cmd==OP_SELL)
   {PR=NormalizeDouble(Bid,Digits);
    if(TP==0 && TakeProfit>0) TP=PR-TakeProfit*Point;
    if(SL==0 && StopLoss>0) SL=PR+StopLoss*Point;}
 int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",magic,0,CLR_NONE);
 if(tic<0) Print("Îøèáêà îòêðûòèÿ îðäåðà: ",GetLastError());
return(tic);}
//+--------------------------------------------------------------------------------------+
//|                                             Óäàëåíèå îðäåðîâ ïî òèïó îðäåðà SELL/BUY |
//+--------------------------------------------------------------------------------------+
void DelOrders(int Cmd)
{for(int i=OrdersTotal()-1;i>=0;i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     if(OrderType()==Cmd) DelOrder(OrderTicket());
return;}
//+--------------------------------------------------------------------------------------+
//|                                                     Óäàëåíèå îðäåðà ïî íîìåðó òèêåòà |
//+--------------------------------------------------------------------------------------+
void DelOrder(int tic)
{while(!IsTradeAllowed()) Sleep(100);
 if(OrderSelect(tic,SELECT_BY_TICKET))
   if(!OrderDelete(OrderTicket(),CLR_NONE))
     Print("Îøèáêà óäàëåíèÿ îðäåðà: ",GetLastError());
return;}
//+--------------------------------------------------------------------------------------+
//|                     Èçìåíåíèå â âûáðàííîì ïî íîìåðó îðäåðå StopLoss è/èëè TakeProfit |
//+--------------------------------------------------------------------------------------+
void EditOrder(int tic,double sl, double tp)
{while(!IsTradeAllowed()) Sleep(100);
 if(OrderSelect(tic,SELECT_BY_TICKET))
   if(sl==0) sl=OrderStopLoss();
   if(tp==0) tp=OrderTakeProfit();
   if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE))
     Print("Îøèáêà ðåäàêòèðîâàíèÿ îðäåðà: ",GetLastError());
return;}
//+--------------------------------------------------------------------------------------+
//|                                                 Çàêðûòèå âûáðàííîãî ïî íîìåðó îðäåðà |
//+--------------------------------------------------------------------------------------+
void CloseOrder(int tic)
{double PR=0;
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==OP_BUY)  PR=NormalizeDouble(Bid,Digits);
 if(OrderType()==OP_SELL) PR=NormalizeDouble(Ask,Digits);
 if(OrderSelect(tic,SELECT_BY_TICKET))
   if(!OrderClose(OrderTicket(),OrderLots(),PR,3,CLR_NONE))
     Print("Îøèáêà çàêðûòèÿ îðäåðà: ",GetLastError());
return;}
//+--------------------------------------------------------------------------------------+
//|                                                            Âûâîä â ñòðîêå n ïðîáåëîâ |
//+--------------------------------------------------------------------------------------+
string Span(int n=0) {
  string s = "\n";
    while (n>0) {s=s+" "; n--;}
    return (s);
    }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int GetMagic(int code)
  {
  string str;   int i=0, magic;
  while (i<=StringLen(Symbol())) {
    str = StringGetChar(Symbol(),i);
    magic = magic+MathPow(code,i)*StrToInteger(str);
  i++;}
return(magic);}
//+--------------------------------------------------------------------------------------+
//|                                                             Ôóíêöèÿ îáðàáîòêè îøèáîê |
//+--------------------------------------------------------------------------------------+
int ErrorFix(int errcode)
{
errcode=GetLastError();
//---- Êîäû îøèáîê, âîçâðàùàåìûå òîðãîâûì ñåðâåðîì:
switch (errcode) {
//--------------------------------------
// 0 - íåò îøèáîê;
// 1 - îøèáêè òðåáóþùèå âûæäàòü;
// 2 - îøèáêè, òðåáóþùèå âìåøàòåëüñòâà;
// 3 - êðèòè÷åñêèå îøèáêè;
//--------------------------------------
   case 0:   errcode=0; break; // "Íåò îøèáîê" - ïðîäîëæèì
   case 1:   errcode=1; Print("Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"); Sleep(500); break;
   case 2:   errcode=1; Print("Îáùàÿ îøèáêà"); Sleep(500); break;
   case 3:   errcode=2; Print("Íåïðàâèëüíûå ïàðàìåòðû");  break;
   case 4:   errcode=1; Print("Òîðãîâûé ñåðâåð çàíÿò"); Sleep(500); break;
   case 5:   errcode=2; Print("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");
   case 6:   errcode=1; Print("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"); Sleep(500); break;
   case 7:   errcode=2; Print("Íåäîñòàòî÷íî ïðàâ"); break;
   case 8:   errcode=1; Print("Ñëèøêîì ÷àñòûå çàïðîñû"); Sleep(5000); break;
   case 9:   errcode=3; Print("Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"); break;
   case 64:  errcode=2; Print("Ñ÷åò çàáëîêèðîâàí"); break;
   case 65:  errcode=2; Print("Íåïðàâèëüíûé íîìåð ñ÷åòà"); break;
   case 128: errcode=1; Print("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"); Sleep(500); break;
   case 129: errcode=2; Print("Íåïðàâèëüíàÿ öåíà"); break;
   case 130: errcode=2; Print("Íåïðàâèëüíûå ñòîïû"); break;
   case 131: errcode=2; Print("Íåïðàâèëüíûé îáúåì"); break;
   case 132: errcode=1; Print(TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES)," Ðûíîê çàêðûò, æä¸ì åù¸ ÷àñ."); Sleep(3600000); break;
   case 133: errcode=1; Print(TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES),"Òîðãîâëÿ çàïðåùåíà, æä¸ì 10 ìèíóò."); Sleep(600000); break;  
   case 134: errcode=2; Print("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"); break;
   case 135: errcode=2; Print("Öåíà èçìåíèëàñü"); break;
   case 136: errcode=1; Print("Íåò öåí"); Sleep(500); break;
   case 137: errcode=1; Print("Áðîêåð çàíÿò"); Sleep(500); break;
   case 138: errcode=2; Print("Íîâûå öåíû"); Sleep(500); break;
   case 139: errcode=1; Print("Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"); Sleep(5000); break;
   case 140: errcode=2; Print("Ðàçðåøåíà òîëüêî ïîêóïêà"); break;
   case 141: errcode=1; Print("Ñëèøêîì ìíîãî çàïðîñîâ");  Sleep(5000); break;
   case 145: errcode=1; Print("Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó");  Sleep(500); break;
   case 146: errcode=1; Print("Ïîäñèñòåìà òîðãîâëè çàíÿòà");  Sleep(500); break;
   case 147: errcode=2; Print("Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"); break;
   case 148: errcode=2; Print("Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ\näîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì."); break;
//---- Êîäû îøèáîê âûïîëíåíèÿ MQL4-ïðîãðàììû:
   case 4000: errcode=0; break;
   case 4001: errcode=1; Print("Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè"); break;
   case 4002: errcode=1; Print("Èíäåêñ ìàññèâà - âíå äèàïàçîíà"); break;
   case 4003: errcode=1; Print("Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé"); break;
   case 4004: errcode=1; Print("Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà"); break;
   case 4005: errcode=1; Print("Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ"); break;
   case 4006: errcode=1; Print("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà"); break;
   case 4007: errcode=1; Print("Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè"); break;
   case 4008: errcode=1; Print("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà"); break;
   case 4009: errcode=1; Print("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå"); break;
   case 4010: errcode=1; Print("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà"); break;
   case 4011: errcode=1; Print("Ñëèøêîì äëèííàÿ ñòðîêà"); break;
   case 4012: errcode=1; Print("Îñòàòîê îò äåëåíèÿ íà íîëü"); break;
   case 4013: errcode=1; Print("Äåëåíèå íà íîëü"); break;
   case 4014: errcode=1; Print("Íåèçâåñòíàÿ êîìàíäà"); break;
   case 4015: errcode=1; Print("Íåïðàâèëüíûé ïåðåõîä"); break;
   case 4016: errcode=1; Print("Íåèíèöèàëèçèðîâàííûé ìàññèâ"); break;
   case 4017: errcode=1; Print("Âûçîâû DLL íå ðàçðåøåíû"); break;
   case 4018: errcode=1; Print("Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó"); break;
   case 4019: errcode=1; Print("Íåâîçìîæíî âûçâàòü ôóíêöèþ"); break;
   case 4020: errcode=1; Print("Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû"); break;
   case 4021: errcode=1; Print("Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè"); break;
   case 4022: errcode=1; Print("Ñèñòåìà çàíÿòà"); break;
   case 4050: errcode=1; Print("Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè"); break;
   case 4051: errcode=1; Print("Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè"); break;
   case 4052: errcode=1; Print("Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè"); break;
   case 4053: errcode=1; Print("Îøèáêà ìàññèâà"); break;
   case 4054: errcode=1; Print("Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè"); break;
   case 4055: errcode=1; Print("Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà"); break;
   case 4056: errcode=1; Print("Ìàññèâû íåñîâìåñòèìû"); break;
   case 4057: errcode=1; Print("Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ"); break;
   case 4058: errcode=1; Print("Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà"); break;
   case 4059: errcode=1; Print("Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå"); break;
   case 4060: errcode=1; Print("Ôóíêöèÿ íå ðàçðåøåíà"); break;
   case 4061: errcode=1; Print("Îøèáêà îòïðàâêè ïî÷òû"); break;
   case 4062: errcode=1; Print("Îæèäàåòñÿ ïàðàìåòð òèïà string"); break;
   case 4063: errcode=1; Print("Îæèäàåòñÿ ïàðàìåòð òèïà integer"); break;
   case 4064: errcode=1; Print("Îæèäàåòñÿ ïàðàìåòð òèïà double"); break;
   case 4065: errcode=1; Print(" êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ"); break;
   case 4066: errcode=1; Print("Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ"); break;
   case 4067: errcode=1; Print("Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè"); break;
   case 4099: errcode=1; Print("Êîíåö ôàéëà"); break;
   case 4100: errcode=1; Print("Îøèáêà ïðè ðàáîòå ñ ôàéëîì"); break;
   case 4101: errcode=1; Print("Íåïðàâèëüíîå èìÿ ôàéëà"); break;
   case 4102: errcode=1; Print("Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ"); break;
   case 4103: errcode=1; Print("Íåâîçìîæíî îòêðûòü ôàéë"); break;
   case 4104: errcode=1; Print("Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó"); break;
   case 4105: errcode=1; Print("Íè îäèí îðäåð íå âûáðàí"); break;
   case 4106: errcode=1; Print("Íåèçâåñòíûé ñèìâîë"); break;
   case 4107: errcode=1; Print("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè"); break;
   case 4108: errcode=1; Print("Íåâåðíûé íîìåð òèêåòà"); break;
   case 4109: errcode=1; Print("Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü â ñâîéñòâàõ ýêñïåðòà."); break;
   case 4110: errcode=1; Print("Äëèííûå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà."); break;
   case 4111: errcode=1; Print("Êîðîòêèå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà."); break;
   case 4200: errcode=1; Print("Îáúåêò óæå ñóùåñòâóåò"); break;
   case 4201: errcode=1; Print("Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà"); break;
   case 4202: errcode=1; Print("Îáúåêò íå ñóùåñòâóåò"); break;
   case 4203: errcode=1; Print("Íåèçâåñòíûé òèï îáúåêòà"); break;
   case 4204: errcode=1; Print("Íåò èìåíè îáúåêòà"); break;
   case 4205: errcode=1; Print("Îøèáêà êîîðäèíàò îáúåêòà"); break;
   case 4206: errcode=1; Print("Íå íàéäåíî óêàçàííîå ïîäîêíî"); break;
   default:   errcode=1; Print("Îøèáêà ïðè ðàáîòå ñ îáúåêòîì"); break;
}return(errcode);}
//+--------------------------------------------------------------------------------------+
//| Ôóíêöèÿ |
//+--------------------------------------------------------------------------------------+
//+--------------------------------------------------------------------------------------+
//||
//+--------------------------------------------------------------------------------------+

//+--------------------------------------------------------------------------------------+
//|             Ê Î Í Å Ö   Á È Á Ë È Î Ò Å Ê È   Ï Î Ä Ï Ð Î Ã Ð À Ì Ì                  |
//+--------------------------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---