Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-CloseByLossOrProfit
//+----------------------------------------------------------------------------+
//| e-CloseByLossOrProfit.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà ------------------------------------------
extern string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
extern double TargetLoss = 30; // Öåëåâîé óáûòîê
extern double TargetProfit = 60; // Öåëåâàÿ ïðèáûëü
extern bool DeleteOrders = True; // Óäàëÿòü îòëîæåííûå îðäåðà
extern bool CloseTerminal = False; // Çàêðûòü òåðìèíàë
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà
extern string _P_Performance= "---------- Ïàðàìåòðû èñïîëíåíèÿ";
extern bool UseSound = False; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string SoundSuccess = "ok.wav"; // Çâóê óñïåõà
extern string SoundError = "timeout.wav"; // Çâóê îøèáêè
extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
extern int NumberOfTry = 5; // Êîëè÷åñòâî ïîïûòîê
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà --------------------------------------
bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
color clCloseBuy = Blue; // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red; // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color clDelete = Yellow; // Öâåò çíà÷êà óäàëåíèÿ îðäåðà
//------- Ïîêëþ÷åíèå âíåøíèõ ìîäóëåé -------------------------------------------
#include <stdlib.mqh>
#import "user32.dll"
int GetParent(int hWnd);
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_CLOSE 0x0010
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init()
{
gbNoInit=False;
if(!IsTradeAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if(!IsLibrariesAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if(!IsTesting())
{
if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if(!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start()
{
string st;
if(gbDisabled)
{
Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
}
if(gbNoInit)
{
Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if(!IsTesting())
{
if(NumberAccount>0 && NumberAccount!=AccountNumber())
{
Message("ÇÀÏÐÅÙÅÍÀ òîðãîâëÿ íà ñ÷¸òå "+AccountNumber());
return;
}
else Comment("");
}
if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit)
{
ClosePosFirstProfit();
if(DeleteOrders) DeleteOrders();
if(CloseTerminal) CloseTerminal();
}
if(ShowComment)
{
st="Öåëåâîé óáûòîê="+DoubleToStr(-TargetLoss,2)+" "+AccountCurrency()+" Òåêóù";
if(AccountProfit()<0) st=st+"èé óáûòîê=";
else st=st+"àÿ ïðèáûëü=";
st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+" Öåëåâàÿ ïðèáûëü="+DoubleToStr(TargetProfit,2)+" "+AccountCurrency();
Comment(st);
}
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.12.2007 |
//| Îïèñàíèå : Çàêðûâàåò òîðãîâûé òåðìèíàë. |
//+----------------------------------------------------------------------------+
void CloseTerminal()
{
Print("Ñðàáîòàëà ôóíêöèÿ CloseTerminal()");
int hwnd=WindowHandle(Symbol(),Period());
int hwnd_parent=0;
while(!IsStopped())
{
hwnd=GetParent(hwnd);
if(hwnd==0) break;
hwnd_parent=hwnd;
}
if(hwnd_parent!=0) PostMessageA(hwnd_parent,WM_CLOSE,0,0);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè |
//+----------------------------------------------------------------------------+
void ClosePosBySelect()
{
bool fc;
color clClose;
double ll,pa,pb,pp;
int err,it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
}
else Print("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûõ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
// Ñíà÷àëà çàêðûâàåì ïðèáûëüíûå ïîçèöèè
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(OrderProfit()+OrderSwap()>0) ClosePosBySelect();
}
}
}
}
}
// Ïîòîì âñå îñòàëüíûå
k=OrdersTotal();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Óäàëåíèå îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="",int op=-1,int mn=-1)
{
bool fd;
int err,i,it,k=OrdersTotal(),ot;
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ot=OrderType();
if(ot>1 && ot<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op))
{
if(mn<0 || OrderMagicNumber()==mn)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(),clDelete);
if(fd)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op)
{
switch(op)
{
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
void Message(string m)
{
Comment(m);
if(StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
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
---