Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-CloseByLossPosInCurrency
//+----------------------------------------------------------------------------+
//| e-CloseByLossPosInCurrency.mq4 |
//| |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà
extern string symbol = ""; // Òîðãîâûé èíñòðóìåíò
// "" - ëþáîé
// "0" - òåêóùèé
extern int Operation = -1; // Òîðãîâàÿ îïåðàöèÿ:
// -1 - ëþáàÿ
// 0 - OP_BUY
// 1 - OP_SELL
extern double TargetLoss = 50; // Óáûòîê â âàëþòå äåïîçèòà
extern int MagicNumber = 0; // MagicNumber
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
int NumberOfTry = 5; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color clCloseBuy = Blue; // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red; // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init()
{
gbNoInit=False;
if(!IsTradeAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if(!IsLibrariesAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if(Operation<-1 || Operation>1)
{
Message("Íåäîïóñòèìîå çíà÷åíèå âíåøíåãî ïàðàìåòðà Operation");
gbNoInit=True; return;
}
if(symbol!="0" && symbol!="")
{
if(MarketInfo(StringUpper(symbol),MODE_BID)==0)
{
Message("Â îáçîðå ðûíêà îòñóòñòâóåò ñèìâîë "+symbol);
gbNoInit=True; return;
}
}
if(!IsTesting())
{
if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
start();
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if(!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start()
{
if(gbNoInit)
{
Comment("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if(!IsTesting())
{
if(NumberAccount>0 && NumberAccount!=AccountNumber())
{
Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
return;
}
else Comment("");
if(ShowComment)
{
string st="NumberAccount="+DoubleToStr(NumberAccount,0)
+" Symbol="+IIFs(symbol=="","All",IIFs(symbol=="0",Symbol(),StringUpper(symbol)))
+" Operation="+IIFs(Operation<0,"All",GetNameOP(Operation))
+" TargetLoss="+DoubleToStr(TargetLoss,2)+" "+AccountCurrency()
+" MagicNumber="+DoubleToStr(MagicNumber,0)
;
Comment(st);
}
else Comment("");
}
ClosePosBySizeLossInCurrency(StringUpper(symbol),Operation,MagicNumber,TargetLoss);
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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(NameFileSound); break;
} else {
err=GetLastError();
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 |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 25.04.2008 |
//| Îïèñàíèå : Çàêðûòèå òåõ ïîçèöèé, ó êîòîðûõ óáûòîê â âàëþòå äåïîçèòà |
//| ïðåâûñèë íåêîòîðîå çíà÷åíèå |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| pr - ïðîôèò/óáûòîê |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="",int op=-1,int mn=-1,double pr=0)
{
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()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| m - òåêñò ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Message(string m)
{
Comment(m);
if(StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò ñòðîêó â ÂÅÐÕÍÅÌ ðåãèñòðå |
//+----------------------------------------------------------------------------+
string StringUpper(string s)
{
int c,i,k=StringLen(s),n;
for(i=0; i<k; i++)
{
n=0;
c=StringGetChar(s, i);
if(c>96 && c<123) n=c-32; // a-z -> A-Z
if(c>223 && c<256) n=c-32; // à-ÿ -> À-ß
if(c==184) n=168; // ¸ -> ¨
if(n>0) s=StringSetChar(s,i,n);
}
return(s);
}
//+----------------------------------------------------------------------------+
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
---