Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
RSI_R2_EA_multi_pairFixed[1]
//+------------------------------------------------------------------+
//| |
//| 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=true;
extern double RSI_Overbought_Value = 85.0;
extern double RSI_Oversold_Value = 15.0;
int MagicNumber=0;
int ticket;
int OpenBuyOrders=0;
int OpenSellOrders=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 ( 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];
//Identify ibfx mini tradesymbol
if(iClose(TradeSymbol,1440,0)==0) { TradeSymbol=StringSubstr(TradeSymbol,0,6); }
//TradeSymbol MagicNumber Assignment
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;}
//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;}
//indicator variable value assignments
SMA200_Day3 = iMA(TradeSymbol,1440,200,0,0,0,1);
RSI_Day_1 = iRSI(TradeSymbol,1440,2,0,3);
RSI_Day_2 = iRSI(TradeSymbol,1440,2,0,2);
RSI_Day_3 = iRSI(TradeSymbol,1440,2,0,1);
//Buy Setup
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; }
//Sell Setup
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; }
//Long Position Closing Conditions
if(OpenBuyOrders == 1 && iRSI(TradeSymbol,1440,2,0,1) > RSI_Overbought_Value) {
CloseLongs(MagicNumber,bid);
OpenBuyOrders = 0; }
//Short Position Closing Conditions
if(OpenSellOrders == 1 && iRSI(TradeSymbol,1440,2,0,1) < RSI_Oversold_Value) {
CloseShorts(MagicNumber,ask);
OpenSellOrders = 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,1440,0.02,0.2,1)>OrderStopLoss()) &&
(bid>iSAR(TradeSymbol,1440,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,1440,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,1440,0.02,0.2,1)<OrderStopLoss()) &&
(ask<iSAR(TradeSymbol,1440,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,1440,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 && OpenBuyOrders==0) {
if(OpenSellOrders > 0) {
CloseShorts(MagicNumber,ask);
OpenSellOrders = 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++; } } }
if(Sell_Mode==true && OpenSellOrders==0) {
if(OpenBuyOrders > 0) {
CloseLongs(MagicNumber,bid);
OpenBuyOrders = 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++; } } }
//On Chart Comment function call (displays pair data)
CommentAll(SMA200_Day3, RSI_Day_1, RSI_Day_2, RSI_Day_3);
return(0); }//end of Start()
//----- 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] = StringConcatenate(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," Monthly Tick Count: ",iVolume(TradeSymbol,43200,0));
CommentsPairs[next] = ">" + CommentsPairs[next];
for(i=0; i < ArraySize(CommentsPairs); i++) Comments = StringConcatenate(Comments,"\n",CommentsPairs[i]);
if(!IsTesting())Comment(/*CommentHeader,*/"Last Tick: ",TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\n",
Comments); }// end CommentAll()
//----- 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); } } } }//end CloseLongs
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); } } } }//end CloseShorts
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); }//end OpenPendingOrder
double StopLong(double price,int stop,double point) {
if(stop==0) return(0);
else return(price-(stop*point)); }//end StopLong
double StopShort(double price,int stop,double point) {
if(stop==0) return(0);
else return(price+(stop*point)); }//end StopShort
double TakeLong(double price,int take,double point) {
if(take==0) return(0);
else return(price+(take*point)); }//end TakeLong
double TakeShort(double price,int take,double point) {
if(take==0) return(0);
else return(price-(take*point)); }//end TakeShort
// * * * * * * * * END OF CODE * * * * * * * * Q·«v±
9D¡1ô4ƼSNØÓÒXÓµ[ùæc©@rA&±"z¡ö÷åZ2d®
òÞ§Ò3yk¶×üøß~Óÿ%"êí
áºÔla#ágΫfêÞ«ÛÜò®Øû2nußBõÁóóÊÇWÜ»å~ÞuÕþ/of¼Å;ÿÕä
OÕäþ£v_ÃyºO2ï篥l']þ:»ðç~vO#éÙȹ§÷¼²ñ|ä[_31!1§´M° (}0mñZ^ ÷º°s»½¯Í§ts¥¶4Ck7KôÞß ãzÆ´\¸LÓEªxî9H"D 5»RúèO®P=âø"kMJÍÎî= =âàYÉ[ß?8&ÿõ-ñKmUT2fû´ë`;âR¢G1,Kgçgc¸ w>¯zùò±ª§Ùv/ßl%¦JT»´öíu§û)æ?ûßupT¸ûQêbræuH4ýÜÞó<µÜå½ÕbTªÅc7?Ûä~¹÷ó´éùÀÅG!XÊò,¨Ï+\ê]þ,3$´e~NÚwO¶0ýr½zÌêÇÞá³½ùÒd®ÜÒÙÍÔĪN¹¬ãÕ»¶déà;15}¢±¿\}ðTÉ ©ï1K¼UÎÀì.eVJ+\jо9<TåÌßöÑ0&.Ð?9sÁgÍ4üÞ@Xßi³¾c3®cù³oÜ-ÁLòï!^S¼pi?°«(¶×ï¤Àµö¸[æ^'wÎdl¼oAWË> ±Z%u¤Ù¹É"^OF^ÊÕ¤k6<·z}½a×ü÷Í
U©Êí{AíÛ~µvGÖ![å=Ã5_;
VW½%¤cøâ7ßSùªN¹ó¯v¼K~¿`í"ÿ³ùI㦸á×)2>û7/ÝÉÏb.Üq5þðÜ}Ó/AÆ/K'ïc4_Ïó=¤ðÙÌ|{õ¤æ=Ù§jTØJB3£O¥ÁãqäÞqh¯ûݵ«xß XÍ ·n~4£s}öõôÕ®èîDgóÊi»5kÅJäg²ÙU?ö>{TPKä³®e×Ñdw_}<×0ìéIõÖFùúyÍ{θvhH*J-ñ²ýcîüKÇÞu<b×®}2Æÿ7eýÝâËÕIc¶<¼úÙ.Ó³Í...Öb÷Õ)êû³;2¿mræÆdÏï×{ÞqQ ÷lø}øGxKcMU þÙ®××eùÈîÚûyXeå`ÇÇ
¶´Q`òJhÞ L9æ¾é³FÉÊ{iʲ8ºµaNÕKíýí vöÎÅ<j'Ëb÷TxúÌ(8!ÒGÓO4¨
O_Üé"+lU©>íx`leQ&5¬¬¢qö¢V¹vD¢ÁëoèÔ¯Eù?/v*{¯5·ûníu¹xqQÇ*øÏ©cý7+ÇmÛ[½·úÉÒ[Ñ»®\üúóDÈÀóâWMOÉïyHâ'n¿gîaöÔè¹|L¶¥£Ô V;üo®~VbçØÔçûµ°Nj©øPìZ°g¾%<êíáÿãÑ*¦±.üZðF1Õ.ë½Øä°fï#ø¢ìÛȱuzø:4uXÝ:Qvrý%¾¡ädcßÊø
ÊlL©j8ó¦5ÂßQî²ÐíÄçk¸ö0YÎÖÁf%w=ê
ÓæoÈï×ke,mE«ÃùoÆíÍ\OùIÂðà÷ßåkÇ«]»°EÕbñKÑ3:ì=)mÿ3ÑêO&DvDë,RRÊäÿhmr2]³Ö×}±M[
»ÿ\è÷÷ÏÓ}p*ë¤K\ûMm)z_з6·^ AËrɺáqN¡
Îwµ"Hð¾DCÌnÖÇ #Z©÷÷¸þbô6Î×äKIßZà7¥SÓÄ>Ä,Ä®i|eO?bãþ¼Dv<[!BHTfQåz>òôbÜE&ôU02[²ÿ£ ÿý´ÜÝ|YÓá4Ó|.¸ú¿x¯ÙîI}¼«6ÃÍó;Zß;àC®RQlï<ÉÜ¢¼ºÛª#é²w~«8ݹ óÁ cS©+¸õW¬3àJ,+Ü\ÒTlÜÅ1ÿÇÿÎÿá?LTâ°uBô8弿YPfL³¡¸]ýÔ´à÷@¥ØÆ%@½p~ ¨ =UÉÃ"ÉC9ª.²â]û.ëxuo<Ò~ÚK4T¹¹´þòþØ×óâ,mýíÈhôn}.¯jyéfÑþÞ-Íx·íàÃ'aµZÐ)«Mu&/ÉiÌ[Ì×8D8\Õû{ôËa3º¾M«·2kÊó«oõÎÿ×6àµMG¼üÓUré{|zøFäÁoÜÝ,¿¸ºXßñr¾Q6¿Mͤ9¬+J-¾»PTÒhEÏ
3]ª©å¬5ªs>×ü1e´²ð¶QêößøÑO§âøMÔKJ/ߧ̸ÈIåÝ´-}ðàQëf;¤Vü^ùñé³§÷ß¾êÇ¡ý¬ªp±þ¥bMvÓl¨ó¹6êº%1ùï£É.ékêØhî×Â8Ñ ¯]üoÇ×g
;ÞåXoܪí=-8Iº%i
Q©Rü¥{[ËNGdéÜyøêGìùr-£¹qø&weh0G_!ÚºÙ:|C¸YõòÖݼ}ú76ZÌcÍD,§i§ëâºzÖnÎã\ª8lé
5ûz5wùN`µ3#3ü3éÖhzw]Ñ<îÔ#Ò¦QJá±Õa/x¾ÞÝ{·Î®|Ñ
ÖÆR¬xä¾N1ógǼ¶ºyûî9Cñ}ܤþ-mZ¶o¦äHÄ¡>öºbê,ä3F:Ûar̵-»e÷w~Ý|à¼ETÛ÷Ç5b«Ïd¨æ¬@oJÐ
ÑÁp=xB&ÄBÓÒ] þÓ¶é-½Ðk9*äTþÚvÐIý\YfX]¹12<kQx5t
å¦L¦É®ëÄê ¡r~µÍl1óëçôJ7EºïßMj;_Ñì4É$7}(Ø^o5To©¡®}²:O;íäîòð-1N:¹"Gsô@ü·g)nÃÙ£Y¶w<é
T×îì0òýjXÆKµÔ9ÞõÜúv°#QP ¾>Ì?pGJÎè!ÚEì
ÉaÈ%}|øë
ôíò.(¶éÎ?¶$zÖ<þþõß:y+ôÞÎqt0<vÞ9ìú«ÇÓ>z³@ó¥Û&ɱbúqçSø"ÇÆ¯MÅû9÷¾¬£nº¼ûÀ5þÁÔµ¸¹k6wVPÐÍû¶«Õ¥Ýö>Lÿ¾nbunâ¨æú GÄß.fäGKúü1<}Ïï_ÊÜïH¢Ä·V9µ¡F²Ï_¯ó#Æäß»èhdzoͧ¥Rkìnå0è|wõ$)ÌÓM1o
wEWÿ^XKhÉüçgÛWËm~ãRÄ:L|£it©oïm mòê´ÓÉx,* Jm<<i]æ©/\OVÀpªw¦EEüYÔò¨¯á¦8Y¿)åO½z©rI·B7+¸ä®ûþ-¤ÿÌÄj$Für³´ù£û .êÌ/ø¶³2AI9êóÉé?h£×¶é5»úGÇXX[ñ<Õó2HáuÅmÚ¶y7+¿8yLÚÕç£îaóð-©Ñ/Ë¢õ!l2È.â¶ØË®9@h»ðýsêË ¯nÑÁº~ÏMuq:yçþë/îôðg̦àf
Öâóëη<ø7~¾Ì¼Úä¼gýø[Jß¿¡oçt%MËk¦enÛV¯%ûP³½3ü®VI>É[S¸9SJà9UWÉìî!½|·¿ÿÖ1®ù{yz¬µx¦ÿþ¢Þ¸Ó*iã· =/ãP¾Mo_cfeó5\à£#߬î{¥íAïL÷±GC1&üÁÐÌûÙ?ÒçÎPsî²§¡ìaO¾zï}ÒöÚ+/m½s0ñ1Q«X\fú©²üÄ}Åmåg
ö hù4ßá3§OFÙÃ/ÓA£+%{ÃÚ5~f9RoÎW~ÝL°I¶¹Ñ ¦'Õ¼~ÇP\êÆ·Üjú¡IjZÅÉOÊfÁæwáÍÑWft×{º|³úo+o»½ÍÒåÛÍÜ®Cd¤K0ÂxÚÅ·àHÔx·15Ø[¿öÏãÚô\_¤|øvL~û5Úpl^_ËÀg²*rZÛÑÊxvlz3&òIKý¶ºZÅ®¼sçàÚÙÓ£c2ó CÕ{«åXGä
Sõ:´z;æKâ|&KA{tFïýÊÂÅ¥÷»¤g ï¤[ìN|Ç×CÃ)¦L¦Ù·aü½^Á
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
---