EMA_WMA_RSI

Author: Copyright � 2009-2011, ������� ��������
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Moving average indicatorRelative strength index
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
EMA_WMA_RSI
//+------------------------------------------------------------------+
//|                                                  EMA WMA RSI.mq4 |
//|                          Copyright © 2009-2011, Õëûñòîâ Âëàäèìèð |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009-2011, Õëûñòîâ Âëàäèìèð"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int     period_EMA           = 28,
               period_WMA           = 8 ,
               period_RSI           = 14,
               stoploss             = 0,
               takeprofit           = 0,
               risk                 = 10;
//--------------------------------------------------------------------
double  LOT,SL,TP;
int TimeBar;
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time[0]) return(0);
   if (TimeBar==0) {TimeBar=Time[0];return(0);}//ïåðâûé çàïóñê ïðîãðàììû
   double EMA0 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,0);
   double WMA0 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,0);
   double EMA1 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,1);
   double WMA1 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,1);
   double RSI  = iRSI(NULL,0,period_RSI,PRICE_OPEN,0);
   if (EMA0<WMA0&&EMA1>WMA1&&RSI>50) //Buy
   {
      TimeBar=Time[0];                            
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
      if (stoploss!=0)   SL  = NormalizeDouble(Bid - stoploss*Point,Digits);   else SL = 0;   
      LOT = LOT(risk,1);
      CLOSEORDER("Sell");
      OPENORDER ("Buy");
   }
   if (EMA0>WMA0&&EMA1<WMA1&&RSI<50) //Sell
   {
      TimeBar=Time[0];                            
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
      if (stoploss!=0)   SL = NormalizeDouble(Ask + stoploss*Point,Digits);   else SL = 0;          
      LOT = LOT(risk,1);
      CLOSEORDER("Buy");
      OPENORDER ("Sell");
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);// Çàêðûâàåì Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);// Çàêðûâàåì Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"",-1,3);
   if (error==-1) //íåóäà÷íàÿ ïîêóïêà OK
   {  
      ShowERROR(error,0,0);
   }
return;
}                  
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:                                                                               return;
      case 2:   Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì   "              ,Ticket," ",Symbol());return;
      case 3:   Alert("Error  íåïðàâèëüíûå ïàðàìåòðû   Ticket ",       Ticket," ",Symbol());return;
      case 130: Alert("Error áëèçêèå ñòîïû   Ticket ",                 Ticket," ",Symbol());return;
      case 134: Alert("Íåäîñòàòî÷íî äåíåã   ",                         Ticket," ",Symbol());return;
      case 146: Alert("Error Ïîäñèñòåìà òîðãîâëè çàíÿòà ",             Ticket," ",Symbol());return;
      case 129: Alert("Error Íåïðàâèëüíàÿ öåíà ",                      Ticket," ",Symbol());return;
      case 131: Alert("Error Íåïðàâèëüíûé îáúåì ",                     Ticket," ",Symbol());return;
      case 4051:Alert("Error Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè ",Ticket," ",Symbol());return;
      case 4105:Alert("Error Íè îäèí îðäåð íå âûáðàí ",                Ticket," ",Symbol());return;
      case 4063:Alert("Error Îæèäàåòñÿ ïàðàìåòð òèïà integer ",        Ticket," ",Symbol());return;
      case 4200:Alert("Error Îáúåêò óæå ñóùåñòâóåò ",                  Ticket," ",Symbol());return;
      default:  Alert("Error  " ,err,"   Ticket ",                     Ticket," ",Symbol());return;
   }
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//--------------------------------------------------------------------

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 ---