Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
RSI R2 EA multi pair
//+------------------------------------------------------------------+
//| |
//| RSI-R2.mq4 - Ver 1.0 @ 03/22/2007 by Bluto |
//| |
//+------------------------------------------------------------------+
#property copyright "Bluto"
#property link "None"
#include <stderror.mqh>
#include <stdlib.mqh>
extern double LotSize=0.5;
extern int Slippage=3;
extern double StopLoss=0;
extern double TakeProfit=700;
extern double RiskPercent=2.0;
extern bool UseMoneyMgmt=false;
extern double RSI_Overbought_Value = 75.0;
extern double RSI_Oversold_Value = 25.0;
int MagicNumber=0;
int ticket;
int OpenBuyOrders=0;
int OpenSellOrders=0;
int BuyCount=0,SellCount=0;
int i;
bool Buy_Mode=false, Sell_Mode=false;
double RSI_Day_1=0, RSI_Day_2=0, RSI_Day_3=0, SMA200_Day3=0;
double MM_MinLotSize=0;
double MM_MaxLotSize=0;
double MM_LotStep=0;
double MM_Decimals=0;
double MM_OrderLotSize=0;
int MM_AcctLeverage=0;
int MM_CurrencyLotSize=0;
//pair array ( IBFX mini )
string pairs[] = { "EURUSDm","USDJPYm","GBPUSDm","USDCHFm","EURCHFm","AUDUSDm","USDCADm",
"NZDUSDm","EURGBPm","EURJPYm","GBPJPYm","CHFJPYm","GBPCHFm","EURAUDm",
"EURCADm","AUDCADm","AUDJPYm","NZDJPYm","AUDNZDm" };
string TradeSymbol,CommentsPairs[];
int Pair = -1;
int init()
{
if (TradeSymbol=="AUDCADm" || TradeSymbol=="AUDCAD") {MagicNumber=200001;}
if (TradeSymbol=="AUDJPYm" || TradeSymbol=="AUDJPY") {MagicNumber=200002;}
if (TradeSymbol=="AUDNZDm" || TradeSymbol=="AUDNZD") {MagicNumber=200003;}
if (TradeSymbol=="AUDUSDm" || TradeSymbol=="AUDUSD") {MagicNumber=200004;}
if (TradeSymbol=="CHFJPYm" || TradeSymbol=="CHFJPY") {MagicNumber=200005;}
if (TradeSymbol=="EURAUDm" || TradeSymbol=="EURAUD") {MagicNumber=200006;}
if (TradeSymbol=="EURCADm" || TradeSymbol=="EURCAD") {MagicNumber=200007;}
if (TradeSymbol=="EURCHFm" || TradeSymbol=="EURCHF") {MagicNumber=200008;}
if (TradeSymbol=="EURGBPm" || TradeSymbol=="EURGBP") {MagicNumber=200009;}
if (TradeSymbol=="EURJPYm" || TradeSymbol=="EURJPY") {MagicNumber=200010;}
if (TradeSymbol=="EURUSDm" || TradeSymbol=="EURUSD") {MagicNumber=200011;}
if (TradeSymbol=="GBPCHFm" || TradeSymbol=="GBPCHF") {MagicNumber=200012;}
if (TradeSymbol=="GBPJPYm" || TradeSymbol=="GBPJPY") {MagicNumber=200013;}
if (TradeSymbol=="GBPUSDm" || TradeSymbol=="GBPUSD") {MagicNumber=200014;}
if (TradeSymbol=="NZDJPYm" || TradeSymbol=="NZDJPY") {MagicNumber=200015;}
if (TradeSymbol=="NZDUSDm" || TradeSymbol=="NZDUSD") {MagicNumber=200016;}
if (TradeSymbol=="USDCHFm" || TradeSymbol=="USDCHF") {MagicNumber=200017;}
if (TradeSymbol=="USDJPYm" || TradeSymbol=="USDJPY") {MagicNumber=200018;}
if (TradeSymbol=="USDCADm" || TradeSymbol=="USDCAD") {MagicNumber=200019;}
if (MagicNumber==0) {MagicNumber = 200999;}
if ( IsTesting() ) { if ( ArrayResize(pairs,1) != 0 ) pairs[0] = Symbol(); }
ArrayCopy (CommentsPairs, pairs);
return(0); }
int deinit() { return(0); }
int start() {
//Select Pair from Array
Pair = (Pair+1) % ArraySize(pairs);
TradeSymbol = pairs[Pair];
//Assign Symbol Bid/Ask & Point values
double bid=MarketInfo(TradeSymbol,MODE_BID);
double ask=MarketInfo(TradeSymbol,MODE_ASK);
double point=MarketInfo(TradeSymbol,MODE_POINT);
//----- Money Management & Lot Sizing Stuff.
MM_AcctLeverage = AccountLeverage();
MM_MinLotSize = MarketInfo(TradeSymbol,MODE_MINLOT);
MM_MaxLotSize = MarketInfo(TradeSymbol,MODE_MAXLOT);
MM_LotStep = MarketInfo(TradeSymbol,MODE_LOTSTEP);
MM_CurrencyLotSize = MarketInfo(TradeSymbol,MODE_LOTSIZE);
if(MM_LotStep == 0.01) {MM_Decimals = 2;}
if(MM_LotStep == 0.1) {MM_Decimals = 1;}
if (UseMoneyMgmt == true)
{
MM_OrderLotSize = AccountEquity() * (RiskPercent * 0.01) / (MM_CurrencyLotSize / MM_AcctLeverage);
MM_OrderLotSize = StrToDouble(DoubleToStr(MM_OrderLotSize,MM_Decimals));
}
else
{
MM_OrderLotSize = LotSize;
}
if (MM_OrderLotSize < MM_MinLotSize) {MM_OrderLotSize = MM_MinLotSize;}
if (MM_OrderLotSize > MM_MaxLotSize) {MM_OrderLotSize = MM_MaxLotSize;}
SMA200_Day3 = iMA(TradeSymbol,PERIOD_D1,200, 0, MODE_SMA, PRICE_CLOSE, 1);
RSI_Day_1 = iRSI(TradeSymbol, PERIOD_D1, 2, PRICE_CLOSE, 3);
RSI_Day_2 = iRSI(TradeSymbol, PERIOD_D1, 2, PRICE_CLOSE, 2);
RSI_Day_3 = iRSI(TradeSymbol, PERIOD_D1, 2, PRICE_CLOSE, 1);
if (RSI_Day_1 < 65 && RSI_Day_2 < RSI_Day_1 && RSI_Day_3 < RSI_Day_2 && iClose(TradeSymbol,1440,1) > SMA200_Day3)
{
Buy_Mode=true;
} else {
Buy_Mode=false;
}
if (RSI_Day_1 > 35 && RSI_Day_2 > RSI_Day_1 && RSI_Day_3 > RSI_Day_2 && iClose(TradeSymbol,1440,1) < SMA200_Day3)
{
Sell_Mode=true;
} else {
Sell_Mode=false;
}
if (OpenBuyOrders == 1 && iRSI(TradeSymbol, PERIOD_D1, 2, PRICE_CLOSE, 1) > RSI_Overbought_Value)
{
CloseLongs(MagicNumber,bid);
OpenBuyOrders = 0;
BuyCount=0;
}
if (OpenSellOrders == 1 && iRSI(TradeSymbol, PERIOD_D1, 2, PRICE_CLOSE, 1) < RSI_Oversold_Value)
{
CloseShorts(MagicNumber,ask);
OpenSellOrders = 0;
SellCount=0;
}
//----- Count number of existing open buy & sell orders; update trailing stops.
OpenBuyOrders=0;
OpenSellOrders=0;
// Manage Paraolic SAR
for (i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if ((OrderSymbol() == TradeSymbol) && (OrderMagicNumber() == MagicNumber))
{
if (OrderType() == OP_BUY)
{
OpenBuyOrders++;
if ((iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1) > OrderStopLoss()) && (bid > iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1)) && (OrderOpenPrice() < iSAR(TradeSymbol,0,0.02,0.2,1)) && (iSAR(TradeSymbol,0,0.02,0.2,1) > iSAR(TradeSymbol,0,0.02,0.2,2)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1),OrderTakeProfit(),0,Blue);
Print("Order # ",OrderTicket()," updated at ",Hour(),":",Minute(),":",Seconds());
return(0);
}
}
if (OrderType() == OP_SELL)
{
OpenSellOrders++;
if ((iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1) < OrderStopLoss()) && (ask < iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1)) && (OrderOpenPrice() > iSAR(TradeSymbol,0,0.02,0.2,1)) && (iSAR(TradeSymbol,0,0.02,0.2,1) < iSAR(TradeSymbol,0,0.02,0.2,2)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),iSAR(TradeSymbol,PERIOD_D1,0.02,0.2,1),OrderTakeProfit(),0,Blue);
Print("Order # ",OrderTicket()," updated at ",Hour(),":",Minute(),":",Seconds());
return(0);
}
}
}
}
//----- Generic order handler.
//----- If we have a new buy signal, close existing sell orders; if we have a new sell signal, close existing buy orders; reset order counters.
//----- Next, create new buy or sell order.
if (Buy_Mode==true && BuyCount==0)
{
if(OpenSellOrders > 0)
{
CloseShorts(MagicNumber,ask);
OpenSellOrders = 0;
}
SellCount=0;
if(OpenBuyOrders == 0)
{
ticket = OpenPendingOrder(OP_BUY,MM_OrderLotSize,ask,Slippage,bid,StopLoss,TakeProfit,"RSI-R2 mp",MagicNumber,0,Lime);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
else
{
OpenBuyOrders++;
BuyCount++;
}
}
}
if (Sell_Mode==true && SellCount==0)
{
if(OpenBuyOrders > 0)
{
CloseLongs(MagicNumber,bid);
OpenBuyOrders = 0;
}
BuyCount=0;
if (OpenSellOrders == 0)
{
ticket = OpenPendingOrder(OP_SELL,MM_OrderLotSize,bid,Slippage,ask,StopLoss,TakeProfit,"RSI-R2 mp",MagicNumber,0,HotPink);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
else
{
OpenSellOrders++;
SellCount++;
}
}
}
//Print(TradeSymbol);
CommentAll (SMA200_Day3, RSI_Day_1, RSI_Day_2, RSI_Day_3);
return(0); }
//----- Comments
void CommentAll (double SMA200_Day3, double RSI_Day_1, double RSI_Day_2, double RSI_Day_3) {
string Comments = "";
int i, next = (Pair+1) % ArraySize(pairs);
CommentsPairs[Pair] = TradeSymbol+": "+"Last Close "+iClose(TradeSymbol,1440,1)+" 200SMA("+SMA200_Day3+") "+"RSI(1) "+RSI_Day_1+
" RSI(2)"+RSI_Day_2+" RSI(3)"+RSI_Day_3;
CommentsPairs[next] = ">" + CommentsPairs[next];
for (i=0; i < ArraySize(CommentsPairs); i++)
Comments = Comments + "\n" + CommentsPairs[i];
if ( ! IsTesting() ) Comment (/*CommentHeader,*/"Last Tick: ",TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\n", Comments); }
//----- Order Processing Functions
void CloseLongs(int MagicNumber, double bid)
{
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==false)
continue;
if(OrderSymbol()!=TradeSymbol||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==TradeSymbol&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),bid,Slippage,Blue);
}//for
}
void CloseShorts(int MagicNumber, double ask)
{
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==false)
continue;
if(OrderSymbol()!=TradeSymbol||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==TradeSymbol&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),ask,Slippage,Red);
}//for
}
int OpenPendingOrder(int pType,double pLots,double pLevel,int sp,
double pr, int sl, int tp,string pComment,int pMagic,datetime pExpiration,color pColor)
{
double bid=MarketInfo(TradeSymbol,MODE_BID);
double ask=MarketInfo(TradeSymbol,MODE_ASK);
double point=MarketInfo(TradeSymbol,MODE_POINT);
int ticket=0;
int err=0;
int c = 0;
int NumberOfTries = 10;
switch (pType)
{
case OP_BUY:
for(c = 0 ; c < NumberOfTries ; c++)
{
RefreshRates();
ticket=OrderSend(TradeSymbol,OP_BUY,pLots,ask,sp,StopLong(bid,sl,point),TakeLong(bid,tp,point),pComment,pMagic,pExpiration,pColor);
if (ticket > 0) break;
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error Code= ", err);
break;
}
}
}
break;
case OP_SELL:
for(c = 0 ; c < NumberOfTries ; c++)
{
RefreshRates();
ticket=OrderSend(TradeSymbol,OP_SELL,pLots,bid,sp,StopShort(ask,sl,point),TakeShort(ask,tp,point),pComment,pMagic,pExpiration,pColor);
if (ticket > 0) break;
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error Code= ", err);
break;
}
}
}
break;
}
return(ticket);
}
double StopLong(double price,int stop,double point)
{
if(stop==0)
return(0);
else
return(price-(stop*point));
}
double StopShort(double price,int stop,double point)
{
if(stop==0)
return(0);
else
return(price+(stop*point));
}
double TakeLong(double price,int take,double point)
{
if(take==0)
return(0);
else
return(price+(take*point));
}
double TakeShort(double price,int take,double point)
{
if(take==0)
return(0);
else
return(price-(take*point));
}
2{Ý/üÌ´äq·òB+_}kßA£ï
éË?"D_ó¶â2äÞ.q<8´¾°â%ã>´üÂZTìG5ñjÎâMj´ÑrP
I¡®ãüÜ+íôÓ®â"
Í3Ò½½Ð"ÛÚ¿M½WÁVPJµ/ß]í¹ûUBê×Ñ«d yíJ{+5~a/ë6®j£Aÿ)¥Ä2måÖÔ¦dnEsÕ(p½SwçEcÏÉ©|À*<ÓQ/±Ù.xk03=$D¨Çl|hþiuñÜA~¤n4ËÀ åo búôUtrN=ÖwÑÏñÁÓÝ(êy }ÿù('A"w½j Pxv@àÄí3QHiÈØaÇï
Уý®:z4yºäI8îA:òÔü!/,9å,´"+/«&ß´ÍÍzLu6ôVm}¹1ÏäkôD0ýñ{¤q+»`øõ»T¥|RD(@íî׳6IÐåÞÄT¸àë3R4£2J©þ
²£ò6[ʸ/|¿Q¨fZ.]ì:¼Ì~¼oAbW%³]rc
&]įW*XáÀc8Ð?ÃàXû¤V -Ú¯ÆBxÐck6aZN÷U'Æâ^Zðÿ¼U×Pp¦í_|ñisR½Mõ|k?>ðKñçõÂ;ÞMx -ÿürq iÓ_[Äd<)½ÖÎ7Óº¸"¤%/aç¥<p¯ù$èzö1
ªl¡íÐ0³W(²KÌï±¶! Á˽
ò÷âm~÷wà©ET
èw%Yó£ÏâàV
ÅnÆzR|&ú<2ëÉj+xs¥¯2sw{Ä#ÞK5ÉDMåÁƼÊSÖ@#"9z
YXì÷[?5¬É>¤H^Ùq¹(*¦ªÿFkÜÙÕFQhîY%á7uå%GµÖÿ& ¢¦cÏ>H×ÔK}Þºxèpïj¹¨Etj&R2õÑ©+[ÝCsò³3´tcÙ ë5ÙO﾿«{êqò¾ÞÈD÷ïI»)rFj¡ù\x)b½`='éú|¨âk
r
+R:[a8Ù*V5FFèYûÚª36±}Kö4"£fOg%þ\´ç±U(Lãçâ2Ó ßy}¸CÇñ$1JCÆÊ)˺´¤¸Â3øEõóäîõæÖÇYo¤'ïV(_î7§b.õ|3ØÔ~Û
k¯a-WSɱ¥ )K¥ÉÀüt$ÒíÝ;{ÓV.
ç¬5®/ʰY\ëúÌBÈÁû_ Ò§VØUo3]Ð\µMÔS{r[»Nü·§uÓñ[HùzÙ9]:ZÊ[óÆ1ãJÁ¹à!¢üA3IJÒynA)å_&RôpÏS²ÿåHÈÿ00Lm!T]8öCªdõó·võÔËGmré¨ä¾®I½¥1ÊÈ$Te¾üÎÐ4ù~u_bÄ'a¶¦d×ÊÂVö¸Êy²å5I/wÐc~ýEaÀWw³ÿAÿËDñÖ&ûy<õìbN¬c
iò<ݱV;W¶ÝÌîd6ùùª.Ô¦ûW*oå¡Q½kh{7=â
p¬þf¼Â¡¦P¤\ayU`ÒBSpcÝ=-Æø6ËXHim£Å&ûl+ñ´®ür3]©ÎdWg6*·z\|u÷÷Z:VüBñ½J×LÏ8¹Î?ÙÕTSGÑýmÈÆ>
xp;
ÂÐî&éΪVtã§n¯Üw
GâíR¹³}_ÌJAZL\=ÛÞg ã
Lþ¤»Pï6¡¡Ç"^ÓL¸M¶Yzf|j}¶º9wòï.²Wn4¼Í[Ħ±ºÓ¦Ä\#vâÚ¤TD
[Ñ8ÒÃä8q4I£mØÒ$Ó`3ãvÿeYn§Ô_qñÙ*º.Ý]>ÞsScùkðåcÉvÏÛ=ìvã±È;ÏJÂmKÑsì>¡À[Ü_ê|Tî4A`GÇRìfªÈ(ÝÁCV÷oH%Á6ÔcÜQ°ðS½zÕZÏÊ8EÜË<<yé¨èÊ÷«P¸ñÅy5
0Û&ݤjN-÷9¹ÊÃçÉiáÔòç2m^Ä^ÚW¨ðþþªþþ¢¢øJ
2¦L{iÔ% ãÝBsFÞÓÑï«
y~»¸;uýx³Þ²,5]<±
¾Qxç
(Ád#̤:#½¶ìá·ô¢ÛìZgDÛù[ D´?в@'jt62à z4@O¬FqUs9Iò1UáGz#ÆçÅ»\ûör½{¾·û®
Õ26øLÒ 8¶¢Ñï¶q¡ô}ð¡Ç-ÁÑǤ#Ïgya]ýFeÍ`Ô%^¼u¢(Äk?¹ùqEÓXtëÇ©ÝÕèëW=¶WîõF,aÈÌ.EÐ?¯"®\ÚZÈøc-1îæÀ|¤Ïk}ÄÞßÖdY2\t¼H<¸Ñ+õf?M§ÂÐÿ6P¼kµWtÞ[- D£0
*XõÁe8{S°mæYÅÏfÞÿÄh:¥};'+R³Ioã30×pµ|j+ÿØÅWÝeá'ûÓ§ÕSì|Anä*y[нwDAÔÓ.=Q~TÕ3[ñ-§ÈÝOHcq-a4`ßÜ(,~}fxtÂ{MÀäñ¾Ô²PLU GAé(¦ ËÕ"
úkÓZÈò Dþä6²ÕÀ@9¢ÙO¥#0¢7Ròou4!þ¼¿TÞç%Dd~Î6ñIUíÔÍ °úöCuQâ¡£ñÄ)'ß)u¸«¯²4²PÛ7]}EMo.·¤èöp'ãí?B¾`Ô6ÊDëEG=º>úØ¥
rX,$µ./®Á";f$É´v)}ìùï³
ѱ©4ih®ùzCÙJ6]èÉ·:%úVe~ãõãÆ³Þ°i{;'ÌGîä¨3jxK:w(G\VÝ/éÜÕØlÐÈ
IímëH(±³oå°9¬jzôùÓ²Ô%Oäç¼â¶./^5BGjq
kÐèÛÏo«y8éøôðÖßr^¿aìçýK³¡yQ|èTRÿÒóú;âóy$´ó_*QäÉeu5¹<Þ ¸êÙ;gnLåu
LÑÎNR#rwTÛsÒk:SÄ¿÷·ùj]1~Ð0p$H#X;âó/hSâ¦pKú²zÑ$¹4«^Îý`ìH*^«ýg¼ö(Æþ«ªL6E/nXÌAÛâIÐàÈD9!G×z@¡êæ)å}ÑÿRʤ¥1MÉ)»° >÷õoÎÅ<Öi-n/LUCÓþB>õÄèÔÀðÆøA!ÿùÏ¿fi¤2_üf>°'I_`ãD.ʾý°xÉ+s[¯ÓíQÕ)Û:/ ÕÊñÄDKá1TÈjàÉaë³Ô%þ
#
:<}ätrCX Öi~j!í9Hú\¦ï Ä.üí£Ã7¥2Ù|ÑtÐNèJä d4-»l½jÈõÓ
ÙØÿCßlqÖÎù:xÿÝæq©5*ûaº-=%·sì_uòSo¡VðOÓîËÈz0Ôxþ8ýE"MÊÆ:jû/}ÎN5ÐÚoïèä|Uê·×BÚ}¸ '´ÒÀ+gÜÓÂjE£zÏ8²°çáyð3K!ðXî?ìXaN¬)
¹p&AàáÔ6³ç°;
ù·òÆ_ã%}ħ
ï2î\åź©ÊóéU¾%¼Ç$ÁÛþdõê,ö
K8®gâ,HuªZúð«¾ÅCòwLmeí(²zr[qrÅiâ@aÎ[[EuWLÚy ó¸YÀ[Sëna±²:YæÏ2·ù¿LmV(â´yîâG§É¸G°f)üÜêTÂ[ê7³X&<mä x³ðØ
tØb9W"·ç5RóÇÞîÕÝ&Ϸ˹'À¯îeçõ°6æçS±×¼ g4¾óþ±%¯SÚ/ãzüÙ§Õ ~»xe(jG¼ßè#ÙjÞIÒ~.úZ%ë rM%µsÛÅeÛa8´/øqÅNûE'MÂ
n>÷|?]·û»fBt×Z^é©¢Kÿr1Í$§wçÍëñ~8G÷ÃÏ\·µÃµy8ýýDée
t?ø~y*µ¦C µ8)òZ¤|ìçW@Ú"`Í1
mQ6®ß»4r;Ç.Ìl×Iz.Øé*£§î@1±
0F;Q^Ý-ðú¾ûiµ~Ô´þ>tä«ì*LÐÿ!Yÿ©Å6J¢úPG¬Ï¸U
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
---