Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
RNN_MT4
//+------------------------------------------------------------------+
//| RNN_MT4.mq4 |
//| Copyright © 2012, Yury V. Reshetov |
//| http://www.mql5.com/ru/articles/366 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Yury V. Reshetov"
#property link "http://www.mql5.com/ru/articles/366"
//---- input parameters
extern int x0 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x1 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x2 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x3 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x4 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x5 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x6 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern int x7 = 50; // Íàñòðîéêà îò 0 äî 100 ñ øàãîì 1
extern double sl = 500.0; // Óðîâåðü ñòîïëîññà è òåéêïðîôèòà â ïóíêòàõ
extern double lots = 1.0;
extern int mn = 888; // Ìàãè÷åñêèé íîìåð
static int prevtime = 0; // Âðåìÿ îòêðûòèÿ ïîñëåäíåãî áàðà
int init() {
prevtime = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
// Ïðîâåðêà íà âíîâü ñôîðìèðîâàâøèéñÿ áàð
if (Time[0] == prevtime) {
return(0);
}
prevtime = Time[0];
// Ïðîâåðêà íà ðàçðåøåíèå òîðãîâëè
if(! IsTradeAllowed()) {
Print("Trades not allowed");
again();
return(0);
}
// Ïðîâåðêà îòêðûòûõ ïîçèöèé
// Êîëè÷åñòâî îòêðûòûõ ïîç
int total = OrdersTotal();
// Ïåðåáèðàåì îòêðûòûå ïîçèöèè
for(int i = total - 1; i >= 0; i--) { // Âûäåëÿåì îòêðûòóþ ïîçèöèþ
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
// Ïðîâåðÿåì íà ñîîòâåòñòâèå ñèìâîëó èíñòðóìåíòà è ìàãè÷åñêîìó íîìåðó
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
// Åñòü îòêðûòàÿ ïîçèöèÿ, âûõîäèì
return(0);
}
}
// Âû÷èñëÿåì òîðãîâûé ñèãíàë
double sp = tradesSingal();
double stoploss = 0.0;
double takeprofit = 0.0;
// Çàïðàøèâàåì ñâåæóþ ðûíî÷íóþ èíôîðìàöèþ
RefreshRates();
string s = "";
int ticket = -1;
if (sp < 0.0) {
stoploss = Bid - sl * Point;
takeprofit = Bid + sl * Point;
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 1, stoploss, takeprofit, WindowExpertName(), mn, 0, Blue);
if (ticket < 0) {
Print("OrderSend failed with error #", GetLastError());
again();
} else {
s = "Open " + Symbol() + " #" + DoubleToStr(ticket, 0) + " Buy , Price:" + Ask + ", " + DoubleToStr(lots, 2) + " lots, SL: " + DoubleToStr(stoploss, 5) + ", TP: " + DoubleToStr(takeprofit, 5);
SendMail("Open Buy position of " + Symbol(), s);
}
} else {
stoploss = Ask + sl * Point;
takeprofit = Ask - sl * Point;
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 1, stoploss, takeprofit, WindowExpertName(), mn, 0, Red);
if (ticket < 0) {
Print("OrderSend failed with error #", GetLastError());
again();
} else {
s = "Open " + Symbol() + " #" + DoubleToStr(ticket, 0) + " Sell , Price:" + Bid + ", " + DoubleToStr(lots, 2) + " lots, SL: " + DoubleToStr(stoploss, 5) + ", TP: " + DoubleToStr(takeprofit, 5);
SendMail("Open Sell position of " + Symbol(), s);
}
}
//-- Exit --
return(0);
}
// Ïðåîáðàçóåò âåðîÿòíîñòü â òîðãîâûé ñèãíàë
double tradesSingal() {
// Ñ÷èòûâàåì ïîêàçàíèÿ èíäèêàòîðîâ
double a1 = input(9, 0);
double a2 = input(9, 1);
double a3 = input(9, 2);
// Âû÷èñëÿåì âåðîÿòíîñòü òîðãîâîãî ñèãíàëà äëÿ êîðîòêîé ïîçèöèè
double result = getProbability(a1, a2, a3);
string s = Symbol() + ", Probability for Short (Sell) position: " + DoubleToStr(result, 4);
if (result > 0.5) {
Print(s);
} else {
double r = 1.0 - result;
Print(s);
s = Symbol() + ", Probability for Long (Buy) position: " + DoubleToStr(r, 4);
}
SendMail(s, s);
// Ëèíåéíûé ñèãìîèä, ïåðåâîäèò çíà÷åíèÿ îò 0 äî 1 â çíà÷åíèÿ îò -1 äî +1
result = result * 2.0 - 1.0;
Print("Result = ", result);
return (result);
}
// Ïîâòîðíûé âûçîâ ôóíêöèè start() íà ïåðâîì òèêå ïîñëå 30 ñåêóíäíîé çàäåðæêè
void again() {
prevtime = Time[1];
Sleep(30000);
}
// Âû÷èñëåíèÿ âåðîÿòíîñòè òîðãîâîãî ñèãíàëà äëÿ êîðîòêîé ïîçèöèè
// p1, p2, p3 - ñèãíàëû èíäèêàòîðîâ èëè îñöèëëÿòîðîâ ÒÀ â äèàïàçîíå îò 0 äî 1
double getProbability(double p1, double p2, double p3) {
double y0 = x0;
double y1 = x1;
double y2 = x2;
double y3 = x3;
double y4 = x4;
double y5 = x5;
double y6 = x6;
double y7 = x7;
double pn1 = 1.0 - p1;
double pn2 = 1.0 - p2;
double pn3 = 1.0 - p3;
// Âû÷èñëåíèå âåðîÿòíîñòè â ïðîöåíòàõ
double probability =
pn1 * (pn2 * (pn3 * y0 +
p3 * y1) +
p2 * (pn3 * y2 +
p3 * y3)) +
p1 * (pn2 * (pn3 * y4 +
p3 * y5) +
p2 * (pn3 * y6 +
p3 * y7));
// Ïåðåâîäèì ïðîöåíòû â âåðîÿòíîñòè
probability = probability / 100.0;
return (probability);
}
// Ïîêàçàíèÿ èíäèêàòîðîâ, äîëæíû áûòü â äèàïàçîíå îò 0 äî 1
// p - ïåðèîä èíäèêàòîðà
// shift - ñìåùåíèå âãëóáü èñòîðèè â ïåðèîäàõ èíäèêàòîðà
double input(int p, int shift) {
return (iRSI(Symbol(), 0, p, PRICE_OPEN, p * shift) / 100.0);
}
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
---