Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Netgatom
//+---------------------------------------------------------------------------------+
//| Net^atom.mq4 |
//| Verdi |
//| nemo811@mail.ru |
//|Ñåòêà îòëîæåííûõ limit-îðäåðîâ ñ ó÷¸òîì òåêóùåé óáûòî÷íîé ïîçèöèè. |
//|Âûñòàâëåíèå ïàðàìåòðà Lot èä¸ò ïî àðèôìåòè÷åñêîé ïðîãðåññèè; çà åãî áàçîâîå |
//|çíà÷åíèå áåð¸òñÿ ðàçíîñòü îáú¸ìîâ ðûíî÷íûõ buy è sell îðäåðîâ; ïðè îòñóòñòâèè |
//|ðûíî÷íûõ îðäåðîâ çíà÷åíèå Lot ðàâíî ñîîòâåòñòâóþùåé ïåðåìåííîé. TP ðàññ÷èòûâàåòñÿ|
//|ñ ïîïðàâêîé äëÿ âûõîäà ñåòêè â îáùèé 0. Â êîíöå Limit-ñåòêè ñòàâèòñÿ Stop-îðäåð |
//|(TP, SL, Magic = 0) äëÿ ëîêèðîâàíèÿ âñåõ ïîçèöèé. |
//|Ñêðèïò äà¸ò ïðåäóïðåæäåíèå è ïðåêðàùàåò ðàáîòó åñëè ïî òåêóùåìó èíñòðóìåíòó: |
//| - óæå ñòîèò îòëîæåííûé îðäåð; |
//| - ðûíî÷êûå ïîçèöèè â ñîñòîÿíèè "çàìêà"; |
//| - îáú¸ì ðûíî÷íûõ îðäåðîâ Buy áîëüøå ÷åì Sell è äàíà êîìàíäà íà Sell; |
//| - îáú¸ì ðûíî÷íûõ îðäåðîâ Sell áîëüøå ÷åì Buy è äàíà êîìàíäà íà Buy; |
//| - ðûíî÷êûå ïîçèöèè â îáùåì ïðîôèòå, âñëåäñòâèå ÷åãî TP ðàññ÷èòûâàåòñÿ |
//| íåêîððåêòíî. |
//+---------------------------------------------------------------------------------+
#property copyright "Verdi"
#property link "nemo811@mail.ru"
#property show_inputs
//-----------------------------------------------------------------------------------
extern int Magic = 0; //óíèêàëüíûé íîìåð îðäåðîâ ñåòêè (êðîìå Stop-îðäåðà)
extern bool BUY = false; //îòêðûòü ñäåëêó BUY è ïîñòàâèòü ñåòêó BUY LIMIT
extern bool SELL = false; //îòêðûòü ñäåëêó SELL è ïîñòàâèòü ñåòêó SELL LIMIT
extern double Lot = 0.01; //îáú¸ì îòêðûâàåìîãî ðûíî÷íîãî îðäåðà è ïåðâîãî limit-îðäåðà
extern int delta = 37; //øàã ñåòêè
extern int MaxOrders = 2; //êîë-âî limit-îðäåðîâ ñåòêè
extern int takeprofit = 52; //óðîâåíü âûñòàâëåíèÿ TP; åñëè 0, òî TP íå âûñòàâëÿåòñÿ
extern int zero_tp = 1; //êîýôôèöèåíò ïîïðàâêè takeprofit äëÿ âûõîäà ñåòêè â îáùèé 0; åñëè 0,
//òî takeprofit ïðèìåò ñòàíäàðòíîå çíà÷åíèå, (!)ñòàâèòü 1 èëè 0(!)
extern int stoploss = 0; //óðîâåíü âûñòàâëåíèÿ SL; åñëè 0, òî SL íå âûñòàâëÿåòñÿ
extern int Proskalz = 3; //ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû
//------------------------------------------------------------------------------------
double SL,TP,Price,DeltaProfitR,DeltaProfitL,LotR,LotL,LotS;
//------------------------------------------------------------------------------------
int start()
{
string SMB=Symbol();
int SchBS=SchBS_b();
int SchSS=SchSS_b();
int SchBL=SchBL_b();
int SchSL=SchSL_b();
if (SchBS+SchSS+SchBL+SchSL>0)
{
Alert ("Oòìåíà! ",SMB,": óäàëèòå îòëîæåííûå îðäåðà.");
return (0);
}
double SchBuyLs=SchBuyLs_b();
double SchSellLs=SchSellLs_b();
if (SchBuyLs>0 || SchSellLs>0)
{
if (SchBuyLs-SchSellLs==0)
{
Alert ("Oòìåíà! ",SMB,": ïîçèöèÿ Lock.");
return (0);
}
}
if (BUY == true)
{
if (SchBuyLs<SchSellLs)
{
Alert ("Oòìåíà Buy! ",SMB,": îáú¸ì Sell áîëüøå.");
return (0);
}
}
if (SELL == true)
{
if (SchBuyLs>SchSellLs)
{
Alert ("Oòìåíà Sell! ",SMB,": îáú¸ì Buy áîëüøå.");
return (0);
}
}
int SchB=SchB_b();
int SchS=SchS_b();
if (SchB+SchS>0)
{
int f=OrdersTotal();
if (!OrderSelect(f, SELECT_BY_POS, MODE_TRADES)==true)
{
if(OrderSymbol()!=SMB)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
double rezultSymb=SymbolOrdersProfit_b();
double dx=SchBuyLs-SchSellLs, dy;
dy=MathAbs(dx);
double ad.QuotePoint = MarketInfo(Symbol(), MODE_POINT);
double ad.QuoteTick = MarketInfo(Symbol(), MODE_TICKSIZE);
double ad.NominalTick = MarketInfo(Symbol(), MODE_TICKVALUE);
double ad.NominalPoint = ad.NominalTick * ad.QuotePoint / ad.QuoteTick;
double n=rezultSymb*(-1)/ad.NominalPoint;
for (int xxx=1; xxx<=1; xxx++)
{
LotR=dy;
DeltaProfitR = n/(dy+dy);
if (takeprofit+DeltaProfitR<=0)
{
Alert ("Oòìåíà! ",SMB,": íåêîððåêòíûé TP.");
return (0);
}
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + (takeprofit+DeltaProfitR*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy",Price,SL,TP,xxx);
}
if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - (takeprofit+DeltaProfitR*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell",Price,SL,TP,xxx);
}
}
double Sumii=0;
for (int iii=1; iii<=MaxOrders; iii++)
{
LotL=dy*iii;
Sumii=Sumii+delta*(2*dy+dy*(iii-2))*(iii-1)/2;
DeltaProfitL = (Sumii+n+2*dy*delta*iii)/((2*dy+dy*(iii-1))*iii/2+2*dy);
if (takeprofit+DeltaProfitL<=0)
{
Alert ("Oòìåíà! ",SMB,": íåêîððåêòíûé TP.");
return (0);
}
if (BUY)
{
Price = NormalizeDouble(Ask-delta*iii*Point,Digits);
if (takeprofit!=0) TP = NormalizeDouble(Price + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit",Price,SL,TP,iii);
}
if (SELL)
{
Price = NormalizeDouble(Bid+delta*iii*Point,Digits);
if (takeprofit!=0) TP = NormalizeDouble(Price - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit",Price,SL,TP,iii);
}
}
for (int vvv=1; vvv<=1; vvv++)
{
LotS=(2*dy+dy*(MaxOrders-1))*MaxOrders/2+2*dy;
if (BUY)
{
OPENORDER ("Sell Stop",Price,SL,TP,vvv);
}
if (SELL)
{
OPENORDER ("Buy Stop",Price,SL,TP,vvv);
}
}
}
}
}
}
else
{
for (int xx=1; xx<=1; xx++)
{
LotR=Lot;
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy",Price,SL,TP,xx);
}
if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell",Price,SL,TP,xx);
}
}
double Sumi=0;
for (int ii=1; ii<=MaxOrders; ii++)
{
LotL=Lot*ii;
Sumi=Sumi+delta*(2*Lot+Lot*(ii-2))*(ii-1)/2;
DeltaProfitL = (Sumi+ii*delta*Lot)/((2*Lot+Lot*(ii-1))*ii/2+Lot);
if (BUY)
{
Price = NormalizeDouble(Ask-delta*ii*Point,Digits);
if (takeprofit!=0) TP = NormalizeDouble(Price + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit",Price,SL,TP,ii);
}
if (SELL)
{
Price = NormalizeDouble(Bid+delta*ii*Point,Digits);
if (takeprofit!=0) TP = NormalizeDouble(Price - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit",Price,SL,TP,ii);
}
}
for (int vv=1; vv<=1; vv++)
{
LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot;
if (BUY)
{
OPENORDER ("Sell Stop",Price,SL,TP,vv);
}
if (SELL)
{
OPENORDER ("Buy Stop",Price,SL,TP,vv);
}
}
}
return(0);
}
//-------------------------------------------------------------------------------
int SchB_b()
{
string SMB=Symbol();
int SchB=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUY) SchB++;
}
}
return(SchB);
}
//-----------------------------------------------------------------------------
int SchS_b()
{
string SMB=Symbol();
int SchS=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!=SMB) continue;
if(OrderType()==OP_SELL) SchS++;
}
}
return(SchS);
}
//-------------------------------------------------------------------------------
int SchBS_b()
{
string SMB=Symbol();
int SchBS=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUYSTOP) SchBS++;
}
}
return(SchBS);
}
//-----------------------------------------------------------------------------
int SchSS_b()
{
string SMB=Symbol();
int SchSS=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!=SMB) continue;
if(OrderType()==OP_SELLSTOP) SchSS++;
}
}
return(SchSS);
}
//-------------------------------------------------------------------------------
int SchBL_b()
{
string SMB=Symbol();
int SchBL=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUYLIMIT) SchBL++;
}
}
return(SchBL);
}
//-----------------------------------------------------------------------------
int SchSL_b()
{
string SMB=Symbol();
int SchSL=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!=SMB) continue;
if(OrderType()==OP_SELLLIMIT) SchSL++;
}
}
return(SchSL);
}
//-----------------------------------------------------------------------------
double SchBuyLs_b()
{
double SchBuyLs=0;
int w;
string SMB=Symbol();
for (w=OrdersTotal()-1;w>=0;w--)
{
if (!OrderSelect(w, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUY)
{
SchBuyLs=SchBuyLs+OrderLots();
}
}
}
return(SchBuyLs);
}
//-----------------------------------------------------------------------------
double SchSellLs_b()
{
double SchSellLs=0;
int d;
string SMB=Symbol();
for (d=OrdersTotal()-1;d>=0;d--)
{
if (!OrderSelect(d, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_SELL)
{
SchSellLs=SchSellLs+OrderLots();
}
}
}
return(SchSellLs);
}
//-------------------------------------------------------------------------------
double SymbolOrdersProfit_b()
{
double rezultSymb=0;
string SMB=Symbol();
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
rezultSymb+=OrderProfit();
}
}
}
return(rezultSymb);
}
//-------------------------------------------------------------------------------
void OPENORDER(string ord,double Price,double SL,double TP,int i)
{
int ticket = -1;
int err;
while (ticket<0)
{
if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY,LotR,NormalizeDouble(Ask,Digits),Proskalz,SL,TP,"R Magic_" + Magic,Magic,0);
if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,LotR,NormalizeDouble(Bid,Digits),Proskalz,SL,TP,"R Magic_" + Magic,Magic,0);
if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT,LotL,Price,Proskalz,SL,TP,StringConcatenate("¹"+i," Magic_" + Magic),Magic,0);
if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,LotL,Price,Proskalz,SL,TP,StringConcatenate("¹"+i," Magic_" + Magic),Magic,0);
if (ord=="Buy Stop") ticket=OrderSend(Symbol(),OP_BUYSTOP,LotS,NormalizeDouble(Ask+delta*(MaxOrders+1)*Point,Digits),Proskalz,0,0,"Lock Magic_0",0,0);
if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,LotS,NormalizeDouble(Bid-delta*(MaxOrders+1)*Point,Digits),Proskalz,0,0,"Lock Magic_0",0,0);
Message(Magic);
if (ticket==-1)
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (ticket!=-1 || err >10) return;
}
return;
}
//----------------------------------------------------------------------
void Message(string Magic)
{
Comment("Magic_" + Magic);
Print("Magic_" + Magic);
}
//----------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
case 0: Alert("Íåò îøèáêè");return;
case 1: Alert("Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí");return;
case 2: Alert("Îáùàÿ îøèáêà");return;
case 3: Alert("Íåïðàâèëüíûå ïàðàìåòðû ",Symbol());return;
case 4: Alert("Òîðãîâûé ñåðâåð çàíÿò");return;
case 5: Alert("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");return;
case 6: Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");return;
case 7: Alert("Íåäîñòàòî÷íî ïðàâ");return;
case 64: Alert("Ñ÷åò çàáëîêèðîâàí");return;
case 128: Alert("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè ",Symbol());return;
case 129: Alert("Íåïðàâèëüíàÿ öåíà ",Symbol());return;
case 131: Alert("Íåïðàâèëüíûé îáúåì ",Symbol());return;
case 130: Alert("Íåïðàâèëüíûå ñòîïû ",Symbol());return;
case 134: Alert("Íåäîñòàòî÷íî äåíåã ",Symbol());return;
case 146: Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà");return;
default: Alert("Error " ,err," ",Symbol());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
---