Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
PositionManager
//+------------------------------------------------------------------+
//| PositionManager.mq4 |
//| Verdi |
//| nemo811@mail.ru |
//+------------------------------------------------------------------+
/*
Ñîâåòíèê çàòî÷åí ïîä ñêàëüïèíã.
Ïîëóàâòîìàò: îñíîâíîå ïðåäíàçíà÷åíèå - âåäåíèå óæå îòêðûòûõ ïîçèöèé.
Ôóíêöèè:
- îòëîâ ïðèáûëè (ProfitPoint, âèðòóàëüíûé óðîâåíü);
- ëîêèðîâàíèå ïîçèöèè (LossPoint, âèðòóàëüíûé óðîâåíü).
Îòñëåæèâàåò ïîçèöèè, îòêðûòûå â îäíîì íàïðàâëåíèè (èëè Buy, èëè Sell), ïî èíñòðóìåíòó, íà êîòîðîì áûë èíèöèàëèçèðîâàí.
Åñëè îòêðûòû îðäåðà è Buy, è Sell - âñå ôóíêöèè ñîâåòíèêà áëîêèðóþòñÿ (äà¸òñÿ ñîîòâåòñòâóþùåå ïðåäóïðåæäåíèå).
Ïðèâåä¸ííûå íàñòðîéêè ðàññ÷èòàíû íà ðàáîòó â ñðåäíåì äâóìÿ market-îðäåðàìè îäèíàêîâîãî îáú¸ìà ïî ÒÑ ñ ïîëîæèòåëüíûì ìàòîæèäàíèåì.
*/
#property copyright "Verdi"
#property link "nemo811@mail.ru"
extern int ProfitPoint = 12; //ïðèáûëü ïî êàæäîìó îðäåðó, ïï; åñëè 0 - Âûêë.
//ïðè äîñòèæåíèè óðîâíÿ ProfitPoint çàêðûâàåòñÿ ñîîòâåòñòâóþùèé îðäåð è óäàëÿþòñÿ âñå îòëîæåííèêè
extern int LossPoint = 15; //ëîññ ïî ïåðâîìó market-îðäåðó, êîòîðûì áûë ïðîèçâåä¸í âõîä, ïï.; åñëè 0 - Âûêë.
//åñëè áûë äîñòèãíóò óðîâåíü LossPoint - îòêðûâàåòñÿ ëîêèðóþùèé îðäåð íà âñþ òåêóùóþ ïîçèöèþ è óäàëÿþòñÿ âñå îòëîæåííèêè
string Comm1,Comm2;
int init()
{
if (!IsTesting())
{
if(!IsExpertEnabled())
{
Alert("ÒÎÐÃÎÂËß ÑÎÂÅÒÍÈÊÀÌÈ ÇÀÏÐÅÙÅÍÀ !");
Comment("ÒÎÐÃÎÂËß ÑÎÂÅÒÍÈÊÀÌÈ ÇÀÏÐÅÙÅÍÀ !");
return(0);
}
else
{
Comment("Èíèöèàëèçàöèÿ ïðîøëà óñïåøíî. Æä¸ì ñâåæóþ êîòèðîâêó.");
Print("Èíèöèàëèçàöèÿ ïðîøëà óñïåøíî. Æä¸ì ñâåæóþ êîòèðîâêó.");
}
}
return(0);
}
int deinit()
{
if (!IsTesting())
{
Print("Ñîâåòíèê äåèíèöèàëèçèðîâàí (âûêëþ÷åí).");
}
return(0);
}
int start()
{
if(!IsTradeAllowed())
{
Comment("Òîðãîâëÿ çàïðåùåíà â íàñòðîéêàõ òåðìèíàëà, ëèáî òîðãîâûé ïîòîê çàíÿò.");
return(0);
}
RefreshRates();
if(ProfitPoint>0)
{
CloseTicketProfit_b();
}
double SchBuyLots=NormalizeDouble(SchBuyLots_b(),8);
double SchSellLots=NormalizeDouble(SchSellLots_b(),8);
double Zero=NormalizeDouble(0,8);
if(LossPoint>0)
{
double FirstBuyOpenPrice=FirstBuyOpenPrice_b();
double FirstSellOpenPrice=FirstSellOpenPrice_b();
if (SchBuyLots>Zero && SchSellLots==Zero && FirstBuyOpenPrice-NormalizeDouble(LossPoint*Point,Digits)>=Ask)
{
DeleteOtlozh();
OPENORDER ("Sell");
}
if (SchBuyLots==Zero && SchSellLots>Zero && FirstSellOpenPrice+NormalizeDouble(LossPoint*Point,Digits)<=Bid)
{
DeleteOtlozh();
OPENORDER ("Buy");
}
}
if (SchBuyLots>Zero && SchSellLots>Zero)
{
if (SchBuyLots!=SchSellLots)
{
Comment("ÂÎÇÍÈÊØÀß ÒÎÐÎÃÎÂÀß ÑÈÒÓÀÖÈß\nÑÎÂÅÒÍÈÊÎÌ ÍÅ ÎÒÑËÅÆÈÂÀÅÒÑß !");
}
else
{
Comment("Ñèòóàöèÿ LOCK");
}
}
else
{
if (ProfitPoint>0)
{
Comm1=StringConcatenate(DoubleToStr(ProfitPoint,0)," ïï.");
}
else
{
Comm1="Îòêë.";
}
if (LossPoint>0)
{
Comm2=StringConcatenate(DoubleToStr(LossPoint,0)," ïï.");
}
else
{
Comm2="Îòêë.";
}
Comment("ProfitPoint - ",Comm1,
"\nLossPoint - ",Comm2,
"\nwww.mt4.ucoz.com");
}
return(0);
}
//+------------------------------------------------------------------+
double SchBuyLots_b()
{
double SchBuyLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB && OrderType()==OP_BUY)
{
SchBuyLots=SchBuyLots+OrderLots();
}
}
}
return(SchBuyLots);
}
double SchSellLots_b()
{
double SchSellLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB && OrderType()==OP_SELL)
{
SchSellLots=SchSellLots+OrderLots();
}
}
}
return(SchSellLots);
}
int TicketProfit_b(int ProfitPoint)
{
int i;
int TicketProfit=0;
double OpenPrice=0;
string SMB=Symbol();
double SchBuyLots=NormalizeDouble(SchBuyLots_b(),8);
double SchSellLots=NormalizeDouble(SchSellLots_b(),8);
double Zero=NormalizeDouble(0,8);
for(i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB)
{
if (SchBuyLots>Zero && SchSellLots>Zero)
{
TicketProfit=0;
}
else
{
if(OrderType()==OP_BUY)
{
OpenPrice=OrderOpenPrice();
if (OpenPrice+NormalizeDouble(ProfitPoint*Point,Digits)<=Bid) TicketProfit=OrderTicket();
}
if(OrderType()==OP_SELL)
{
OpenPrice=OrderOpenPrice();
if (OpenPrice-NormalizeDouble(ProfitPoint*Point,Digits)>=Ask) TicketProfit=OrderTicket();
}
}
}
}
}
return(TicketProfit);
}
double FirstBuyOpenPrice_b()
{
int i;
double FirstBuyOpenPrice=0;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB && OrderType()==OP_BUY)
{
FirstBuyOpenPrice=OrderOpenPrice();
}
}
}
return(FirstBuyOpenPrice);
}
double FirstSellOpenPrice_b()
{
int i;
double FirstSellOpenPrice=0;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB && OrderType()==OP_SELL)
{
FirstSellOpenPrice=OrderOpenPrice();
}
}
}
return(FirstSellOpenPrice);
}
void OPENORDER(string ord)
{
int ticket = -1;
double Lot;
double SchBuyLots = SchBuyLots_b();
double SchSellLots = SchSellLots_b();
Lot=MathAbs(SchBuyLots-SchSellLots);
while (ticket<0)
{
if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,Ask,3,0,0,"Óñòàíîâëåí çàìîê",0,0);
if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"Óñòàíîâëåí çàìîê",0,0);
if (ticket==-1)
{
Alert ("Îøèáêà ",GetLastError()," óñòàíîâêè ëîêîâîãî îðäåðà!");
Print ("Îøèáêà ",GetLastError()," óñòàíîâêè ëîêîâîãî îðäåðà!");
}
else
{
Alert ("Óñòàíîâëåí çàìîê ñîãëàñíî LossPoint ",LossPoint," ïï.\nwww.mt4.ucoz.com");
Print ("Óñòàíîâëåí çàìîê ñîãëàñíî LossPoint ",LossPoint," ïï.");
return (0);
}
}
return;
}
void DeleteOtlozh()
{
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB)
{
if(OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
{
if(!OrderDelete(OrderTicket(),CLR_NONE))
{
Alert("Îøèáêà ",GetLastError()," ïðè óäàëåíèè îòëîæåííîãî îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
}
}
}
}
}
}
void CloseTicketProfit_b()
{
int i;
string SMB=Symbol();
int TicketProfit=TicketProfit_b(ProfitPoint);
if (TicketProfit<=0) return;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
}
else
{
if(OrderSymbol()==SMB)
{
if(OrderType()==OP_BUY && OrderTicket()==TicketProfit)
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),3,CLR_NONE))
{
Alert("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Buy-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
Print("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Buy-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
}
else
{
Alert("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.\nwww.mt4.ucoz.com");
Print("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.");
}
}
if(OrderType()==OP_SELL && OrderTicket()==TicketProfit)
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),3,CLR_NONE))
{
Alert("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Sell-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
Print("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Sell-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
}
else
{
Alert("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.\nwww.mt4.ucoz.com");
Print("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.");
}
}
}
}
}
DeleteOtlozh();
}
//+------------------------------------------------------------------+
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
---