Orders Execution
Indicators Used
Miscellaneous
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 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
---