Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
LimitNet_Stop_atom
//+---------------------------------------------------------------------------------+
//| LimitNet+Stop^atom.mq4 |
//| Verdi |
//| nemo811@mail.ru |
//|Ñêðèïò äëÿ èñïîëüçîâàíèÿ ñåòêè îòëîæåííûõ limit-îðäåðîâ ïîñëå ðàñêðûòèÿ çàìêà. |
//|Äâà ðåæèìà: àâòîìàò è ïîëóàâòîìàò (ïåðåêëþ÷àòåëü atom).  àâòîìàòè÷åñêîì ðåæèìå |
//|ïàðàìåòð Lot ðàññ÷èòûâàåòñÿ êàê ðàçíîñòü ìåæäó îáú¸ìàìè óæå îòêðûòûõ buy è sell |
//|îðäåðîâ; òàêæå ó÷èòûâàåòñÿ òåêóùèé áàëàíñ. Ïåðåìåííûå Lot, R_Lot è R_point |
//|àêòèâíû ëèøü â ïîëóàâòîìàòè÷åñêîì ðåæèìå. Âûñòàâëåíèå ïàðàìåòðà Lot limit-îðäåðîâ|
//|èä¸ò ïî àðèôìåòè÷åñêîé ïðîãðåññèè. takeprofit ðàññ÷èòûâàåòñÿ ñ ïîïðàâêîé äëÿ |
//|âûõîäà ñåòêè â îáùèé 0. Åñëè òåêóùàÿ ïîçèöèÿ â ïðîôèòå - ïîïûòêà èñïîëüçîâàíèÿ |
//|ñêðèïòà â àâòîìàòè÷åñêîì ðåæèìå ìîæåò ïðèâåñòè ê îøèáêå ðàññ÷¸òà ïîïðàâêè äëÿ |
//|takeprofit! Â êîíöå Limit-ñåòêè âûñòàâëÿåòñÿ Stop-îðäåð (TP,SL,Magic = 0) äëÿ |
//|ëîêèðîâàíèÿ âñåõ ïîçèöèé.Ïàðàìåòðû R_Lot è R_point ïîçâîëÿþò ó÷åñòü óæå îòêðûòûé |
//|(!)óáûòî÷íûé(!) ðûíî÷íûé îðäåð. |
//|Ïîñëå çàêðûòèÿ ëþáîãî îðäåðà ñåòêè ðåêîìåíäóþ çàâåðøèòü îñòàâøèåñÿ ñäåëêè |
//|è ïåðåóñòàíîâèòü âñþ ñåòü. |
//| èñõîäíèêå âûñòàâëåíû ïåðåìåííûå ñ ó÷¸òîì êðèòåðèåâ: |
//| - íà÷àëüíûé ðèñê 1 ïóíêòà = 1 : 10 000 |
//| - îáùèé ðèñê äåïî = 4% |
//| - óáûòîê ïî 1 óæå îòêðûòîìó îðäåðó îáú¸ìîì 0.1 ëîò = 37 ïï. |
//| - äîïóñòèìàÿ îáùàÿ ïðîñàäêà = 150 ïï. |
//+---------------------------------------------------------------------------------+
#property copyright "Verdi"
#property link "nemo811@mail.ru"
#property show_inputs
//--------------------------------------------------------------------
extern bool atom = true; //âêë./âûêë. àâòîìàòè÷åñêèé ðåæèì
extern int Magic = 0; //óíèêàëüíûé íîìåð îðäåðîâ ñåòêè (êðîìå Stop-îðäåðà)
extern bool BUY = false; //îòêðûòü ñäåëêó BUY è ïîñòàâèòü ñåòêó BUY LIMIT
extern bool SELL = false; //îòêðûòü ñäåëêó SELL è ïîñòàâèòü ñåòêó SELL LIMIT
extern double Lot = 0.1; //îáú¸ì îòêðûâàåìîé ñäåëêè è ïåðâîãî limit-îðäåðà (â ïîëóàâòîìàòè÷åñêîì ðåæèìå)
extern int delta = 37; //øàã ñåòêè
extern int MaxOrders = 2; //êîë-âî limit-îðäåðîâ ñåòêè
extern int takeprofit = 50; //óðîâåíü âûñòàâëåíèÿ TP, åñëè 0, òî TP âû÷èñëÿåòñÿ ïî zero_tp
extern int stoploss = 0; //óðîâåíü âûñòàâëåíèÿ SL, åñëè 0, òî SL íå âûñòàâëÿåòñÿ
extern string corr="Êîýôôèöèåíòû ïîïðàâîê";
extern int zero_tp = 1; //êîýôôèöèåíò ïîïðàâêè takeprofit äëÿ âûõîäà ñåòêè â îáùèé 0, åñëè 0,
//òî takeprofit ïðèìåò ñòàíäàðòíîå çíà÷åíèå (!)Ñòàâèòü 1 èëè 0(!)
extern int R_Lot = 1; //êîýôôèöèåíò ïîïðàâêè Lot äëÿ ó÷¸òà îòêðûòîãî (!)óáûòî÷íîãî(!) ðûíî÷íîãî îðäåðà, åñëè 0 -
//íå ó÷èòûâàåòñÿ + âûêëþ÷àåò R_point, êðàòåí ïàðàìåòðó Lot: R_Lot*Lot=ëîò ðûíî÷íîãî îðäåðà
extern int R_point = 37; //òåêóùèé Loss ðûíî÷íîãî óáûòî÷íîãî îðäåðà â (!)ïóíêòàõ(!), åñëè 0 - íå ó÷èòûâàåòñÿ
//--------------------------------------------------------------------
double SL,TP,Price,Price_U,Sum,DeltaProfitR,DeltaProfitL,LotR,LotL,LotS,Balans,Free;
//--------------------------------------------------------------------
int start()
{
if (atom)
{
int f=OrdersTotal();
if (f<1)
{
for (int xx=1; xx<=1; xx++)
{
if (BUY)
{
LotR=Lot;
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 ("Buy",Price,SL,TP,xx);
}
if (SELL)
{
LotR=Lot;
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 ("Sell",Price,SL,TP,xx);
}
}
double Sumi=0;
for (int ii=1; ii<=MaxOrders; ii++)
{
if (BUY)
{
LotL=Lot*ii;
Price = NormalizeDouble(Ask-delta*ii*Point,Digits);
Price_U = NormalizeDouble(Bid-delta*ii*Point,Digits);
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 (takeprofit!=0) TP = NormalizeDouble(Price_U + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit",Price,SL,TP,ii);
}
if (SELL)
{
LotL=Lot*ii;
Price = NormalizeDouble(Bid+delta*ii*Point,Digits);
Price_U = NormalizeDouble(Ask+delta*ii*Point,Digits);
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 (takeprofit!=0) TP = NormalizeDouble(Price_U - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit",Price,SL,TP,ii);
}
}
for (int vv=1; vv<=1; vv++)
{
if (BUY)
{
LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot;
OPENORDER ("Sell Stop",Price,SL,TP,vv);
}
if (SELL)
{
LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot;
OPENORDER ("Buy Stop",Price,SL,TP,vv);
}
}
}
else
{
Balans=AccountBalance();
Free=AccountEquity();
double SchBuyLs=SchBuyLs_b();
double SchSellLs=SchSellLs_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=(Balans-Free)/ad.NominalPoint;
for (int xxx=1; xxx<=1; xxx++)
{
DeltaProfitR = n/(dy+dy);
if (BUY)
{
LotR=dy;
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 ("Buy",Price,SL,TP,xxx);
}
if (SELL)
{
LotR=dy;
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 ("Sell",Price,SL,TP,xxx);
}
}
double Sumii=0;
for (int iii=1; iii<=MaxOrders; iii++)
{
if (BUY)
{
LotL=dy*iii;
Price = NormalizeDouble(Ask-delta*iii*Point,Digits);
Price_U = NormalizeDouble(Bid-delta*iii*Point,Digits);
Sumii=Sumii+delta*(2*dy+dy*(iii-2))*(iii-1)/2;
DeltaProfitL = (Sumii+iii*delta*dy+dy*n+dy*delta*iii)/((2*dy+dy*(iii-1))*iii/2+dy+dy);
if (takeprofit!=0) TP = NormalizeDouble(Price_U + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit",Price,SL,TP,iii);
}
if (SELL)
{
LotL=dy*iii;
Price = NormalizeDouble(Bid+delta*iii*Point,Digits);
Price_U = NormalizeDouble(Ask+delta*iii*Point,Digits);
Sumii=Sumii+delta*(2*dy+dy*(iii-2))*(iii-1)/2;
DeltaProfitL = (Sumii+iii*delta*dy+dy*n+dy*delta*iii)/((2*dy+dy*(iii-1))*iii/2+dy+dy);
if (takeprofit!=0) TP = NormalizeDouble(Price_U - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit",Price,SL,TP,iii);
}
}
for (int vvv=1; vvv<=1; vvv++)
{
if (BUY)
{
LotS=(2*dy+dy*(MaxOrders-1))*MaxOrders/2+dy+dy;
OPENORDER ("Sell Stop",Price,SL,TP,vvv);
}
if (SELL)
{
LotS=(2*dy+dy*(MaxOrders-1))*MaxOrders/2+dy+dy;
OPENORDER ("Buy Stop",Price,SL,TP,vvv);
}
}
}
}
else
{
for (int x=1; x<=1; x++)
{
DeltaProfitR = (Lot*R_Lot*R_point)/(Lot+Lot*R_Lot);
if (BUY)
{
LotR=Lot;
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 ("Buy",Price,SL,TP,x);
}
if (SELL)
{
LotR=Lot;
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 ("Sell",Price,SL,TP,x);
}
}
double Sum=0;
for (int i=1; i<=MaxOrders; i++)
{
if (BUY)
{
LotL=Lot*i;
Price = NormalizeDouble(Ask-delta*i*Point,Digits);
Price_U = NormalizeDouble(Bid-delta*i*Point,Digits);
Sum=Sum+delta*(2*Lot+Lot*(i-2))*(i-1)/2;
DeltaProfitL = (Sum+i*delta*Lot+Lot*R_Lot*R_point+Lot*R_Lot*delta*i)/((2*Lot+Lot*(i-1))*i/2+Lot+Lot*R_Lot);
if (takeprofit!=0) TP = NormalizeDouble(Price_U + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit",Price,SL,TP,i);
}
if (SELL)
{
LotL=Lot*i;
Price = NormalizeDouble(Bid+delta*i*Point,Digits);
Price_U = NormalizeDouble(Ask+delta*i*Point,Digits);
Sum=Sum+delta*(2*Lot+Lot*(i-2))*(i-1)/2;
DeltaProfitL = (Sum+i*delta*Lot+Lot*R_Lot*R_point+Lot*R_Lot*delta*i)/((2*Lot+Lot*(i-1))*i/2+Lot+Lot*R_Lot);
if (takeprofit!=0) TP = NormalizeDouble(Price_U - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price_U + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit",Price,SL,TP,i);
}
}
for (int v=1; v<=1; v++)
{
if (BUY)
{
LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot+Lot*R_Lot;
OPENORDER ("Sell Stop",Price,SL,TP,v);
}
if (SELL)
{
LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot+Lot*R_Lot;
OPENORDER ("Buy Stop",Price,SL,TP,v);
}
}
}
return(0);
}
//---------------------------------------------------------------------------
double SchBuyLs_b() {
double SchBuyLs=0;
int w;
string SMBB=Symbol();
for (w=OrdersTotal()-1;w>=0;w--) {
if (!OrderSelect(w, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else{
if(OrderSymbol()!= SMBB) continue;
if(OrderType()==OP_BUY) {
SchBuyLs=SchBuyLs+OrderLots();
}
}
}
return(SchBuyLs);
}
//---------------------------------------------------------------------------
double SchSellLs_b() {
double SchSellLs=0;
int d;
string SMBL=Symbol();
for (d=OrdersTotal()-1;d>=0;d--) {
if (!OrderSelect(d, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
else{
if(OrderSymbol()!= SMBL) continue;
if(OrderType()==OP_SELL) {
SchSellLs=SchSellLs+OrderLots();
}
}
}
return(SchSellLs);
}
//-----------------------------------------------------------------------------
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),3,SL,TP,"Magic_" + Magic,Magic,0);
if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,LotR,NormalizeDouble(Bid,Digits),3,SL,TP,"Magic_" + Magic,Magic,0);
if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT,LotL,Price,3,SL,TP,StringConcatenate("¹"+i," Magic_" + Magic),Magic,0);
if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,LotL,Price,3,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),3,0,0,"Lock, Magic_0",0,0);
if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,LotS,NormalizeDouble(Bid-delta*(MaxOrders+1)*Point,Digits),3,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 1: return;
case 2: Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì ",Symbol());return;
case 3: Alert("Error íåïðàâèëüíûå ïàðàìåòðû ",Symbol());return;
case 130: Alert("Error áëèçêèå ñòîïû Ticket ",Symbol());return;
case 134: Alert("Íåäîñòàòî÷íî äåíåã ",Symbol());return;
case 146: Alert("Error Ïîäñèñòåìà òîðãîâëè çàíÿòà ",Symbol());return;
case 129: Alert("Error Íåïðàâèëüíàÿ öåíà ",Symbol());return;
case 131: Alert("Error Íåïðàâèëüíûé îáúåì ",Symbol());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
---