Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
i-SignalOfTrade_v1
//+----------------------------------------------------------------------------+
//| i-SignalOfTrade.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
#property indicator_chart_window
//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà ----------------------------------------+
extern string _P_WhatOutput = "---------- ×òî âûâîäèòü";
extern bool OutAccountNumber = True; // Âûâîäèòü íîìåð ñ÷¸òà
extern bool OutAccountServer = True; // Âûâîäèòü èìÿ àêòèâíîãî ñåðâåðà
extern bool OutNameExpert = True; // Âûâîäèòü èìÿ ýêñïåðòà
extern bool OutDateTime = True; // Âûâîäèòü äàòó è âðåìÿ
extern bool UseTimeLocal = True; // Èñïîëüçîâàòü ëîêàëüíîå âðåìÿ
extern bool OutTicket = False; // Âûâîäèòü òèêåò
extern bool OutMagic = True; // Âûâîäèòü ìàãèê
extern bool OutComment = True; // Âûâîäèòü êîììåíòàðèé
extern string _P_WhereOutput="---------- Êóäà âûâîäèòü";
extern bool UseAlert = True; // Èñïîëüçîâàòü äèàëîãîâîå îêíî
extern bool UseComment = True; // Âûâîäèòü êîììåíòàðèé
extern bool UsePrint = False; // Çàïèñûâàòü â æóðíàë
extern bool UseSendMail = False; // Ïîñûëàòü ýëåêòðîííîå ïèñüìî
extern bool UseSendPush = False; // Ïîñûëàòü Push-óâåäîìëåíèå íà ìîáèëüíûå òåðìèíàëû
extern bool UseSound = True; // Èñïîëüçîâàòü çâóê
extern string sotFileName = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
//------- Ãëîáàëüíûå ïåðåìåííûå èíäèêàòîðà ------------------------------------+
int sotOTI[]; // òèêåò OrderTicket()
int sotOTY[]; // òèï OrderType()
double sotOOP[]; // öåíà OrderOpenPrice()
double sotOSL[]; // ñòîï OrderStopLoss()
double sotOTP[]; // òåéê OrderTakeProfit()
bool sotFirstRun=True; // Ôëàã ïåðâîãî ïðîãîíà
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init()
{
sotFirstRun=True; // Ôëàã ïåðâîãî ïðîãîíà
Comment("");
}
//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { Comment(""); }
//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start()
{
double p; // Ðàçìåð ïóíêòà â âàëþòå êîòèðîâêè
int d; // Êîëè÷åñòâî öèôð ïîñëå äåñÿòè÷íîé òî÷êè â öåíå
int i; // Ñ÷¸ò÷èê îïåðàöèé
int in; // Èíäåêñ ýëåìåíòà ìàññèâà îïåðàöèé
int k=OrdersTotal(); // Êîëè÷åñòâî òåêóùèõ îïåðàöèé
int ot; // Òèï îïåðàöèè OrderType()
int oti[]; // Ìàññèâ íîâûõ òèêåòîâ
string sh=""; // Ñòðîêà çàãîëîâêà ïî÷òîâîãî ñîîáùåíèÿ
string st; // Ñòðîêà òåëà ïî÷òîâîãî ñîîáùåíèÿ
if(sotFirstRun) { MemCurrOP(); sotFirstRun=False; }
if(OutAccountNumber) sh=DoubleToStr(AccountNumber(), 0)+" ";
if(OutAccountServer) sh=sh+AccountServer();
if(StringLen(sh)>0) sh=sh+"\n";
if(OutDateTime)
{
if(UseTimeLocal) sh=sh+TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES)+" ";
else sh=sh+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" ";
}
if(OutNameExpert) sh=sh+WindowExpertName()+" ";
if(StringLen(sh)>0) sh=sh+"\n";
// Îòêðûòèå/Óñòàíîâêà íîâûõ, ìîäèôèêàöèÿ ñóùåñòâóþùèõ
ArrayResize(oti,k);
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
oti[i]=OrderTicket();
d=MarketInfo(OrderSymbol(), MODE_DIGITS);
p=MarketInfo(OrderSymbol(), MODE_POINT);
in=ArraySearchInt(sotOTI,oti[i]);
// îïåðàöèÿ ÍÅ íàéäåíà, çíà÷èò íîâàÿ
if(in<0)
{
ot=OrderType();
if(ot==OP_BUY || ot==OP_SELL) st="Open ";
if(ot==OP_BUYLIMIT || ot==OP_BUYSTOP
|| ot==OP_SELLLIMIT || ot==OP_SELLSTOP) st="Set ";
if(OutTicket) st=st+DoubleToStr(OrderTicket(),0)+" ";
st=st+GetNameOP(ot)+" "
+DoubleToStr(OrderLots(),2)+" "
+OrderSymbol()
+" PR="+DoubleToStr(OrderOpenPrice(),d)
+" SL="+DoubleToStr(OrderStopLoss(),d)
+" TP="+DoubleToStr(OrderTakeProfit(),d)
+"\n"
+IIFs(OutMagic,"Magic="+DoubleToStr(OrderMagicNumber(),0),"")
+IIFs(OutMagic && OutComment," ","")
+IIFs(OutComment,"Comment=\""+OrderComment()+"\"","")
+IIFs(OutMagic || OutComment,"\n","");
if(ot==OP_BUY || ot==OP_SELL)
{
st=st+"Balance="+DoubleToStr(AccountBalance(),2)
+" FreeMargin="+DoubleToStr(AccountFreeMargin(),2);
}
if(StringLen(sh)>0) st=sh+st;
Signal(st);
// îïåðàöèÿ íàéäåíà, çíà÷èò ñóùåñòâîâàëà ðàíåå è âîçìîæíî èçìåíåíà
} else {
// ñðàáàòûâàíèå îòëîæåííîãî îðäåðà
ot=OrderType();
if(ot!=sotOTY[in] && (ot==OP_BUY || ot==OP_SELL))
{
st="Open ";
if(OutTicket) st=st+DoubleToStr(OrderTicket(),0)+" ";
st=st+GetNameOP(ot)+" by "+GetNameOP(sotOTY[in])+" "
+DoubleToStr(OrderLots(),2)+" "
+OrderSymbol()
+" PR="+DoubleToStr(OrderOpenPrice(),d)
+" SL="+DoubleToStr(OrderStopLoss(),d)
+" TP="+DoubleToStr(OrderTakeProfit(),d)
+"\n"
+IIFs(OutMagic,"Magic="+DoubleToStr(OrderMagicNumber(),0),"")
+IIFs(OutMagic && OutComment," ","")
+IIFs(OutComment,"Comment=\""+OrderComment()+"\"","")
+IIFs(OutMagic || OutComment,"\n","");
if(ot==OP_BUY || ot==OP_SELL)
{
st=st+"Balance="+DoubleToStr(AccountBalance(),2)
+" FreeMargin="+DoubleToStr(AccountFreeMargin(),2);
}
if(StringLen(sh)>0) st=sh+st;
Signal(st);
}
// ìîäèôèêàöèÿ îðäåðà èëè ïîçèöèè
if((MathAbs(OrderOpenPrice()-sotOOP[in])>=p)
|| (MathAbs(OrderStopLoss()-sotOSL[in])>=p)
|| (MathAbs(OrderTakeProfit()-sotOTP[in])>=p))
{
st="Modify ";
if(OutTicket) st=st+DoubleToStr(OrderTicket(),0)+" ";
st=st+GetNameOP(OrderType())+" "
+DoubleToStr(OrderLots(),2)+" "
+OrderSymbol();
// èçìåíèëàñü öåíà îòêðûòèÿ
if(MathAbs(OrderOpenPrice()-sotOOP[in])>=p)
{
st=st+" PR="+DoubleToStr(sotOOP[in],d)+"->"+DoubleToStr(OrderOpenPrice(),d);
}
// èçìåíèëñÿ óðîâåíü ñòîïà
if(MathAbs(OrderStopLoss()-sotOSL[in])>=p)
{
st=st+" SL="+DoubleToStr(sotOSL[in],d)+"->"+DoubleToStr(OrderStopLoss(),d);
}
// èçìåíèëñÿ óðîâåíü òåéêà
if(MathAbs(OrderTakeProfit()-sotOTP[in])>=p)
{
st=st+" TP="+DoubleToStr(sotOTP[in],d)+"->"+DoubleToStr(OrderTakeProfit(),d);
}
st=st+IIFs(OutMagic || OutComment,"\n","")
+IIFs(OutMagic,"Magic="+DoubleToStr(OrderMagicNumber(),0),"")
+IIFs(OutMagic && OutComment," ","")
+IIFs(OutComment,"Comment=\""+OrderComment()+"\"","")
+IIFs(OutMagic || OutComment,"\n","");
if(StringLen(sh)>0) st=sh+st;
Signal(st);
}
}
}
}
// Çàêðûòèå ïîçèöèé / Óäàëåíèå îðäåðîâ
k=ArraySize(sotOTI);
for(i=0; i<k; i++)
{
if(ArraySearchInt(oti,sotOTI[i])<0)
{
ot=sotOTY[i];
if(ot==OP_BUY || ot==OP_SELL) st="Close ";
if(ot==OP_BUYLIMIT || ot==OP_BUYSTOP
|| ot==OP_SELLLIMIT || ot==OP_SELLSTOP) st="Delete ";
if(OutTicket) st=st+DoubleToStr(sotOTI[i],0)+" ";
if(OrderSelect(sotOTI[i],SELECT_BY_TICKET))
{
d=MarketInfo(OrderSymbol(),MODE_DIGITS);
st=st+GetNameOP(ot)+" "
+DoubleToStr(OrderLots(),2)+" "
+OrderSymbol()
+" PR="+DoubleToStr(OrderClosePrice(),d)
;
if(ot==OP_BUY || ot==OP_SELL)
{
st=st+" Profit="+DoubleToStr(OrderProfit()+OrderSwap(),2)
+"\n"
+IIFs(OutMagic,"Magic="+DoubleToStr(OrderMagicNumber(),0),"")
+IIFs(OutMagic && OutComment," ","")
+IIFs(OutComment,"Comment=\""+OrderComment()+"\"","")
+IIFs(OutMagic || OutComment,"\n","")
+"Balance="+DoubleToStr(AccountBalance(),2)
+" FreeMargin="+DoubleToStr(AccountFreeMargin(),2);
}
if(StringLen(sh)>0) st=sh+st;
Signal(st);
}
}
}
MemCurrOP();
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Âûïîëíÿåò ïîèñê ýëåìåíòà ìàññèâà ïî çíà÷åíèþ |
//| è âîçâðàùàåò èíäåêñ íàéäåííîãî ýëåìåíòà èëè -1 |
//| Ïàðàìåòðû: |
//| m - ìàññèâ ýëåìåíòîâ |
//| e - çíà÷åíèå ýëåìåíòà |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e)
{
for(int i=0; i<ArraySize(m); i++)
{
if(m[i]==e) return(i);
}
return(-1);
}
//+----------------------------------------------------------------------------+
//| Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//| Ïàðàìåòðû: |
//| 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");
}
}
//+----------------------------------------------------------------------------+
//| Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Çàïîìèíàåò òåêóùèå îïåðàöèè â ìàññèâå. |
//+----------------------------------------------------------------------------+
void MemCurrOP()
{
int i,k=OrdersTotal();
ArrayResize(sotOTI,k);
ArrayResize(sotOTY,k);
ArrayResize(sotOOP,k);
ArrayResize(sotOSL,k);
ArrayResize(sotOTP,k);
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
sotOTI[i]=OrderTicket();
sotOTY[i]=OrderType();
sotOOP[i]=OrderOpenPrice();
sotOSL[i]=OrderStopLoss();
sotOTP[i]=OrderTakeProfit();
}
}
}
//+----------------------------------------------------------------------------+
//| Ïîäà÷à ñèãíàëà. |
//| Ïàðàìåòðû: |
//| st - ñòðîêà ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Signal(string st)
{
if(UseAlert) Alert(st);
if(UseComment) Comment(st);
if(UseSendMail) SendMail(WindowExpertName(),st);
if(UseSendPush) SendNotification(st);
if(UsePrint) Print(st);
if(UseSound) PlaySound(sotFileName);
}
//+----------------------------------------------------------------------------+
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
---