Orders Execution
0
Views
0
Downloads
0
Favorites
informer_v4
//+----------------------------------------------------------------------------+
//| èíôîðìåð.mq4 |
//| Copyright © 2009, Maxim `ax` Sviridov |
//| http://ax.tm3912.ru/trade/ |
//| |
//| 13.11.2009 Ïîôèêñåíà îøèáêà "zero divide", íåáîëüøàÿ îïòèìèçàöèÿ |
//| 30.12.2009 Ìåòêè äëÿ íåçàêðûòûõ ïîçèöèé, ìàãèê-ôèëüòð, óðîâíè TP&SL |
//| êîððåêòíîå óäàëåíèå îáúåêòîâ èíäèêàòîðà |
//| 07.01.2010 ßçûê Englesh or not (Russian) |
//+----------------------------------------------------------------------------+
#property copyright "Copyright © 2009, Maxim `ax` Sviridov"
#property link "http://ax.tm3912.ru/trade/"
extern bool Lang_Eng = True; // Englesh or not (Russian)
extern bool DealMarkers = True; // Ðàçìå÷àòü ñäåëêè íà ãðàôèêå èëè íåò
extern bool DepoStats = True; // Îòîáðàæàòü ñòàòèñòèêó ñ÷¸òà
extern bool ShowLive = True; // Ïîêàçûâàòü öåíîâûå ìåòêè íà íåçàêðûòûå ïîçèöèè èëè íåò
extern string MagicFilter = ""; // Åñëè çäåñü ïåðå÷èñëèòü MagicNumber (÷åðåç çàïÿòóþ, áåç ïðîáåëîâ)
// òî áóäóò îòîáðàæàòüñÿ òîëüêî ñäåëêè ñ ýòèìè ìýäæèêàìè
extern color clAccName = Silver; // Öâåò ïîäïèñè èìåíè âëàäàëüöà àêêàóíòà
extern color clInfData = Gray; // Öâåò ïîäïèñåé ðàçíûõ äàííûõ î ñ÷¸òå
extern int FontSize = 8; // Ðàçìåð øðèôòà
extern int DigitsLength = 9; // Äëèííà äåíåæíûõ öûôð (äëÿ âûðàâíèâàíèÿ)
extern int PercentLength = 5; // Äëèííà ïðîöåíòíûõ öûôð (äëÿ âûðàâíèâàíèÿ)
extern color clLineProfit = Lime; // Öâåò ïðèáûëüíûõ ëèíèé
extern color clLineLoss = Red; // Öâåò óáûòî÷íûõ ëèíèé
extern color clMarkerBuy = Lime; // Öâåò ìåòêè ïîêóïêè
extern color clMarkerSell = Red; // Öâåò ìåòêè ïðîäàæè
extern color clMarkerClose = Silver; // Öâåò ìåòêè çàêðûòèÿ îðäåðà
//------- Ãëîáàëüíûå ïåðåìåííûå -----------------------------------------------+
int X,Y; // íà÷àëüíûå êîîðäèíàòû
int i; // ñ÷¸ò÷èê
int inf_count; // êîëè÷åñòâî èíôî-áëîêîâ
string inf_name[10]; // Ìàññèâ èì¸í èíôî-áëîêîâ
string inf_data[10]; // Ìàññèâ çíà÷åíèé èíôî-áëîêîâ
int maxLengthN, maxLengthD; // Ìàêñèìàëüíàÿ äëèííà (äëÿ âûðàâíèâàíèÿ òåêñòà)
string accName; // Èìÿ àêêàóíòà
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
X = 10;
Y = 35;
inf_count = 8; // Ñ÷¸ò, Äåïî, Áàëàíñ, Ïðèáûëü, Ñíÿòèå, Çàëîã, Ïîçèöèÿ, Ñðåäñòâà
maxLengthN = 13;
maxLengthD = 18+(DigitsLength-6);
for(i=0; i<=inf_count-1; i++) {inf_name[i]="";inf_data[i]="";}
if (Lang_Eng){
inf_name[0] = "Account ¹: ";
inf_name[1] = "Deposit: ";
inf_name[2] = "Balance: ";
inf_name[3] = "Profit: ";
inf_name[4] = "Withdraw: ";
inf_name[5] = "Margin: ";
inf_name[6] = "Equity-Balance: ";
inf_name[7] = "Equity: ";
}else{
inf_name[0] = "Ñ÷¸ò ¹: ";
inf_name[1] = "Äåïîçèò: ";
inf_name[2] = "Áàëàíñ: ";
inf_name[3] = "Ïðèáûëü: ";
inf_name[4] = "Ñíÿòèå: ";
inf_name[5] = "Çàëîã: ";
inf_name[6] = "Ïîçèöèÿ: ";
inf_name[7] = "Ñðåäñòâà: ";
}
if(MagicFilter != "") MagicFilter = "," + MagicFilter + ",";
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
// óäàëèì âñå îáúåêòû ñîçäàííûå èíäèêàòîðîì
DeleteIndObjects();
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if(DepoStats) // Ïîêàçàòü ñòàòèñòèêó ñ÷¸òà
{
string accName = AccountName();
string accNumber = AccountNumber();
string accCurrency = AccountCurrency();
double accBalance = AccountBalance();
double accMargin = AccountMargin();
double accEquity = AccountEquity();
double accDepo = Depo();
double accProfit = Profit();
double accWidch = Widch();
int md = ((maxLengthN + maxLengthD - StringLen(accName))/2) + StringLen(accName);
while(StringLen(accName) < md ) accName = accName + " ";
string sign=""; // çíàê äëÿ èçìåíåíèÿ â ïðîöåíòàõ
if (accBalance>accDepo) sign = "+";
if(ObjectFind("AccountName")<0)ObjectCreate("AccountName", OBJ_LABEL, 0, 0, 0);
ObjectSet("AccountName", OBJPROP_CORNER, 1);
ObjectSetText("AccountName", accName, FontSize, "Lucida Console", clAccName);
ObjectSet("AccountName", OBJPROP_XDISTANCE, X);
ObjectSet("AccountName", OBJPROP_YDISTANCE, Y - 15);
inf_data[0] = RAlignD(accNumber) + " (" + accCurrency + ") 1:" + AccountLeverage(); // Ñ÷¸ò ¹
inf_data[1] = RAlignD(DoubleToStr(accDepo,2));
inf_data[2] = RAlignD(DoubleToStr(accBalance, 2)); // Áàëàíñ
inf_data[3] = RAlignD(DoubleToStr(accProfit,2));
inf_data[4] = RAlignD(DoubleToStr(accWidch,2)); // Ñíÿòèå
inf_data[5] = RAlignD(DoubleToStr(accMargin,2)); // Çàëîã
inf_data[6] = RAlignD(DoubleToStr(accEquity-accBalance,2)) + " | " + RAlignP(DoubleToStr((accEquity/accBalance-1)*100,2)) + "%"; //
inf_data[7] = RAlignD(DoubleToStr(accEquity, 2)); // Ýêâèòè
if(accDepo>0){
inf_data[2] = inf_data[2] + " | " + RAlignP(sign + DoubleToStr(accProfit/accDepo*100,2)) + "%" ;
inf_data[7] = inf_data[7] + " | " + RAlignP(DoubleToStr((accEquity/accDepo-1)*100,2)) + "%";
}
for(i=0; i<=inf_count-1; i++) // Äëÿ âñåõ èíôî-áëîêîâ îáíîâèì çíà÷åíèÿ
{
//if (inf_name[i]=="") continue; // Ïðîïóñòèì ïóñòûå
while(StringLen(inf_data[i]) < maxLengthD) inf_data[i] = inf_data[i] + " ";
if(ObjectFind(inf_name[i])<0) ObjectCreate(inf_name[i], OBJ_LABEL, 0, 0, 0);
ObjectSet(inf_name[i], OBJPROP_CORNER, 1);
ObjectSetText(inf_name[i], inf_name[i] + inf_data[i], FontSize, "Lucida Console", clInfData);
ObjectSet(inf_name[i], OBJPROP_XDISTANCE, X);
ObjectSet(inf_name[i], OBJPROP_YDISTANCE, Y + i*11);
}
}
// Âèçóàëèçàöèÿ ñäåëîê íà ãðàôèêå
if (DealMarkers || ShowLive){
datetime ot, ct;
double op, cp, tp, sl;
int i, ty, k, iMagicNum;
if (DealMarkers){
k=OrdersHistoryTotal();
for (i=0; i<k; i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
if(MagicFilter != "") {
iMagicNum = OrderMagicNumber();
iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
}
else iMagicNum = 1;
ty=OrderType();
if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
ot=OrderOpenTime();
op=OrderOpenPrice();
ct=OrderCloseTime();
cp=OrderClosePrice();
SetObj(OrderTicket(), ty, ot, op, ct, cp);
}
}
}
}
if (ShowLive) {
k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(MagicFilter != "") {
iMagicNum = OrderMagicNumber();
iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
}
else iMagicNum = 1;
ty=OrderType();
if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
ot=OrderOpenTime();
op=OrderOpenPrice();
tp=OrderTakeProfit();
sl=OrderStopLoss();
SetObj(OrderTicket(), ty, ot, op, 0, 0, tp, sl);
}
}
}
}
}
return(0);
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
string RAlignD(string s="") {
while(StringLen(s) < DigitsLength) s = StringConcatenate(" ", s);
return(s);}
//+----------------------------------------------------------------------------+
string RAlignP(string s="") {
while(StringLen(s) < PercentLength+3) s = StringConcatenate(" ", s);
return(s);}
//+----------------------------------------------------------------------------+
double Depo(){int y=0; double d=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==6 && OrderProfit()>0) d+=OrderProfit();}
return(d);}
//+----------------------------------------------------------------------------+
double Widch(){int y=0; double w=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==6 && OrderProfit()<0) w+=OrderProfit();}
return(w);}
//+----------------------------------------------------------------------------+
double Profit(){int y=0; double p=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()<2) p+=OrderProfit()+OrderSwap()+OrderCommission();}
return(p);}
//+----------------------------------------------------------------------------+
//| SetObj: óñòàíîâêà îáúåêòîâ |
//| Ïàðàìåòðû: |
//| or - íîìåð îáúåêòà |
//| ty - îïåðàöèÿ |
//| ot - äàòà, âðåìÿ îòêðûòèÿ |
//| op - öåíà îòêðûòèÿ |
//| ct - äàòà, âðåìÿ çàêðûòèÿ |
//| cp - öåíà çàêðûòèÿ |
//| tp - öåíà òåéê-ïðîôèòà |
//| sl - öåíà ñòîï-ëîñà |
//+----------------------------------------------------------------------------+
void SetObj(int or, int ty, datetime ot, double op, datetime ct=0, double cp=0, double tp=0, double sl=0)
{
datetime tc = TimeCurrent()-(240*Period());
datetime tf = TimeCurrent()+(600*Period());
// Ëèíèÿ îò îòêðûòèÿ äî çàêðûòèÿ ñäåëêè
if (ct!=0)
{
string no="Deal";
if(ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_TREND, 0, 0, 0, 0, 0);
ObjectSet(no+or, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(no+or, OBJPROP_TIME1 , ot);
ObjectSet(no+or, OBJPROP_PRICE1, op);
ObjectSet(no+or, OBJPROP_TIME2 , ct);
ObjectSet(no+or, OBJPROP_PRICE2, cp);
if(ty==OP_BUY){
if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clLineProfit);
if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clLineLoss);
}
if(ty==OP_SELL){
if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clLineProfit);
if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clLineLoss);
}
ObjectSet(no+or, OBJPROP_RAY , False);
// óäàëÿåì óæå íå íóæíîå
if (ObjectFind("ADealTP"+or)!=-1) ObjectDelete("ADealTP"+or);
if (ObjectFind("ADealTP-l-"+or)!=-1) ObjectDelete("ADealTP-l-"+or);
if (ObjectFind("ADealSL"+or)!=-1) ObjectDelete("ADealSL"+or);
if (ObjectFind("ADealSL-l-"+or)!=-1) ObjectDelete("ADealSL-l-"+or);
}
// Ìåòêè îòêðûòèÿ ñäåëîê
no="ADealOp";
if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, ot);
if (ty==OP_BUY){
ObjectSet(no+or, OBJPROP_PRICE1 , op);
ObjectSet(no+or, OBJPROP_COLOR , clMarkerBuy);
ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE);
}
if (ty==OP_SELL){
ObjectSet(no+or, OBJPROP_PRICE1 , op);
ObjectSet(no+or, OBJPROP_COLOR , clMarkerSell);
ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE);
}
// Ìåòêè çàêðûòèÿ ñäåëîê
if (cp!=0){
no="ADealCl";
if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, ct);
ObjectSet(no+or, OBJPROP_PRICE1 , cp);
ObjectSet(no+or, OBJPROP_COLOR , clMarkerClose);
ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
}
// Ìåòêè òåéê-ïðîôèòà
if (tp!=0)
{
no="ADealTP";
if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, tf);
ObjectSet(no+or, OBJPROP_PRICE1 , tp);
ObjectSet(no+or, OBJPROP_COLOR , clLineProfit);
ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
if(ObjectFind(no+"-l-"+or)<0) ObjectCreate(no+"-l-"+or, OBJ_TREND, 0, 0, 0, 0, 0);
ObjectSet(no+"-l-"+or, OBJPROP_RAY , False);
ObjectSet(no+"-l-"+or, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no+"-l-"+or, OBJPROP_TIME1 , tc);
ObjectSet(no+"-l-"+or, OBJPROP_PRICE1, tp);
ObjectSet(no+"-l-"+or, OBJPROP_TIME2 , tf+60*Period());
ObjectSet(no+"-l-"+or, OBJPROP_PRICE2, tp);
ObjectSet(no+"-l-"+or, OBJPROP_COLOR, clLineProfit);
}
// Ìåòêè ñòîï-ëîñà
if (sl!=0)
{
no="ADealSL";
if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, tf);
ObjectSet(no+or, OBJPROP_PRICE1 , sl);
ObjectSet(no+or, OBJPROP_COLOR , clLineLoss);
ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
if(ObjectFind(no+"-l-"+or)<0) ObjectCreate(no+"-l-"+or, OBJ_TREND, 0, 0, 0, 0, 0);
ObjectSet(no+"-l-"+or, OBJPROP_RAY , False);
ObjectSet(no+"-l-"+or, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no+"-l-"+or, OBJPROP_TIME1 , tc);
ObjectSet(no+"-l-"+or, OBJPROP_PRICE1, sl);
ObjectSet(no+"-l-"+or, OBJPROP_TIME2 , tf+60*Period());
ObjectSet(no+"-l-"+or, OBJPROP_PRICE2, sl);
ObjectSet(no+"-l-"+or, OBJPROP_COLOR, clLineLoss);
}
}
//+----------------------------------------------------------------------------+
void DeleteIndObjects()
{
int ot, iMagicNum;
// Óäàëèòü ñòàò-äàííûå
ObjectDelete("AccountName");
for(i=0; i<=inf_count-1; i++) ObjectDelete(inf_name[i]);
// Óäàëèòü ìàðêåðû ïîçèöèé
if (DealMarkers){
int i, ty, k=OrdersHistoryTotal();
for (i=0; i<k; i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
ty=OrderType();
ot=OrderTicket();
if (OrderSymbol()==Symbol() && ty<2){
ObjectDelete("ADealOp"+ot);
ObjectDelete("ADealCl"+ot);
ObjectDelete("Deal"+ot);
}
}
}
}
if (ShowLive){
if (OrdersTotal()>0){
k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(MagicFilter != "") {
iMagicNum = OrderMagicNumber();
iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
}
else iMagicNum = 1;
ty=OrderType();
ot=OrderTicket();
if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
ObjectDelete("ADealOp"+ot);
ObjectDelete("ADealTP"+ot);
ObjectDelete("ADealTP-l-"+ot);
ObjectDelete("ADealSL"+ot);
ObjectDelete("ADealSL-l-"+ot);
}
}
}
}
}
}
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
---