Author: Copyright � 2012, Yury V. Reshetov
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
Relative strength index
Miscellaneous
It sends emails
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---