//+------------------------------------------------------------------+ //| priorities.mq4 | //| Copyright © 2007, Paul Brodar | //| brodar2012@yahoo.com| //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Paul Brodar" #property link "" //-----------Expert Identifers---------------------------------------- static string Name="Priorities"; static int MagicExpert=87000; // Bare //-------------------------------------------------------------------- //---- input parameters //+------------------------------------------------------------------+ static double MaximumRisk = 4.5; static double MaxNumberOfTrades=3; static int Multiplier=4; static int MaxPerDirection=1; static double Lots; static int LastRan=-1; int i; static string CurrencyPair[35][4];//[x][0] is unsorted [x][1]sorted static double Swap[70]; static double OpenTrades[16][10]; static int Duration=6; static int NumberOfPairs=12; static double CurrencyLots[35]; static bool MacUp; static bool MacDown; //+------------------------------------------------------------------+ //|Function Run Once Daily | //+------------------------------------------------------------------+ void RunOnceDaily(int rundate){ Prioritize(); if(OrdersTotal()>0) {CheckForClose(1);} Lots=lotsize(); LastRan=rundate; } //+------------------------------------------------------------------+ //|Function mac | //+------------------------------------------------------------------+ void Mac(string pair){ MacUp=false; MacDown=false; if (MarketInfo(pair,MODE_SWAPLONG)>0) if(iClose(pair,1440,1)>iClose(pair,1440,Speed1(pair))) if(iClose(pair,60,1)>iClose(pair,60,Speed2(pair))) if(iVolume(pair,60,1)>iVolume(pair,60,2)) MacUp=true; if (MarketInfo(pair,MODE_SWAPSHORT)>0) if(iClose(pair,1440,1)iVolume(pair,60,2)) MacDown=true; } //+------------------------------------------------------------------+ //|Function Base | //+------------------------------------------------------------------+ double Base(string Pair){ if (Pair=="GBPJPY")return(2); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="EURAUD")return(1.4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURUSD")return(1.4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURCHF")return(1.4);// return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURGBP")return(1.4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURJPY")return(1.4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="GBPUSD")return(2); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="GBPCHF")return(2); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="AUDUSD") return(2); //return(MarketInfo("AUDUSD",MODE_ASK)*2); if (Pair=="USDCHF") return(1); if (Pair=="USDJPY") return(1); if (Pair=="USDCAD") return(1); return(1); } //+------------------------------------------------------------------+ //|Function TP | //+------------------------------------------------------------------+ double TakeProfit(string Pair){ if (Pair=="GBPJPY")return(180); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="GBPUSD")return(130); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="EURAUD")return(75); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURUSD")return(50); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURCHF")return(50);// return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURGBP")return(50); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURJPY")return(160); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="GBPCHF")return(180); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="AUDUSD") return(85); //return(MarketInfo("AUDUSD",MODE_ASK)*2); if (Pair=="USDCHF") return(150); if (Pair=="USDJPY") return(90); if (Pair=="USDCAD") return(85); return(90); }//+------------------------------------------------------------------+ //|Function TP | //+------------------------------------------------------------------+ double Speed1(string Pair){ if (Pair=="GBPJPY")return(3); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="GBPUSD")return(3); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="EURAUD")return(10); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURUSD")return(15); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURCHF")return(12);// return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURGBP")return(4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURJPY")return(3); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="GBPCHF")return(9); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="AUDUSD") return(3); //return(MarketInfo("AUDUSD",MODE_ASK)*2); if (Pair=="USDCHF") return(7); if (Pair=="USDJPY") return(3); if (Pair=="USDCAD") return(8); return(3); }//+------------------------------------------------------------------+ //|Function TP | //+------------------------------------------------------------------+ double Speed2(string Pair){ if (Pair=="GBPJPY")return(4); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="GBPUSD")return(4); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="EURAUD")return(4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURUSD")return(12); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURCHF")return(7);// return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURGBP")return(4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="EURJPY")return(4); //return(MarketInfo("EURUSD",MODE_ASK)); if (Pair=="GBPCHF")return(8); // return(MarketInfo("GBPUSD",MODE_ASK)); if (Pair=="AUDUSD") return(7); //return(MarketInfo("AUDUSD",MODE_ASK)*2); if (Pair=="USDCHF") return(8); if (Pair=="USDJPY") return(7); if (Pair=="USDCAD") return(11); return(4); } //+------------------------------------------------------------------+ //|Function prioritize | //+------------------------------------------------------------------+ void Prioritize(){ /* for(i=0;i<34;i++){ CurrencyLots[i]=0; for(int j=0;j<3;j++){ CurrencyPair[i][j]=""; } } CurrencyPair[1][0]= "EURAUD" ; CurrencyPair[2][0]= "EURUSD" ; CurrencyPair[3][0]= "EURCHF" ; CurrencyPair[4][0]= "EURGBP" ; CurrencyPair[5][0]= "EURJPY" ; CurrencyPair[6][0]= "GBPUSD" ; CurrencyPair[7][0]= "GBPJPY" ; CurrencyPair[8][0]= "GBPCHF" ; CurrencyPair[9][0]= "AUDUSD" ; CurrencyPair[10][0]= "USDCHF" ; CurrencyPair[11][0]= "USDJPY" ; CurrencyPair[12][0]= "USDCAD" ; for(int p1=1;p1<=NumberOfPairs;p1++){ Swap[p1]=MarketInfo(CurrencyPair[p1][0],MODE_SWAPLONG)/Base(CurrencyPair[p1][0]); Swap[p1+NumberOfPairs]=MarketInfo(CurrencyPair[p1][0],MODE_SWAPSHORT)/Base(CurrencyPair[p1][0]); } Swap[0]=-100; ArraySort(Swap,NumberOfPairs*2+1,0,MODE_DESCEND); for(int p2=0;p2<=NumberOfPairs;p2++){ for(int p3=1;p3<=NumberOfPairs;p3++){ if(MarketInfo(CurrencyPair[p3][0],MODE_SWAPLONG)/Base(CurrencyPair[p3][0])==Swap[p2]&& CurrencyPair[p3][1]!="Taken"){// CurrencyPair[p3][1]="Taken"; CurrencyPair[p2][2]=CurrencyPair[p3][0]; } if(MarketInfo(CurrencyPair[p3][0],MODE_SWAPSHORT)/Base(CurrencyPair[p3][0])==Swap[p2]&&CurrencyPair[p3][1]!="Taken"){// CurrencyPair[p3][1]="Taken"; CurrencyPair[p2][2]=CurrencyPair[p3][0]; } } } for(int p4=0;p4<=NumberOfPairs;p4++){ if(MarketInfo(CurrencyPair[p4][2],MODE_SWAPLONG)>=0) CurrencyPair[p4][1]="Long"; else CurrencyPair[p4][1]="Short"; } */ CurrencyPair[0][2]= "AUDUSD" ; CurrencyPair[1][2]= "GBPJPY" ; CurrencyPair[2][2]= "GBPCHF" ; CurrencyPair[3][2]= "EURJPY" ; CurrencyPair[4][2]= "USDJPY" ; CurrencyPair[5][2]= "EURCHF" ; CurrencyPair[6][2]= "EURAUD" ; CurrencyPair[7][2]= "EURUSD" ; CurrencyPair[8][2]= "USDCAD" ; CurrencyPair[9][2]= "USDCHF" ; CurrencyPair[10][2]= "EURGBP" ; CurrencyPair[11][2]= "GBPUSD" ; for(int p1=0;p1<12;p1++){ CurrencyPair[p1][1]="none"; if(MarketInfo(CurrencyPair[p1][2],MODE_SWAPLONG)>0)CurrencyPair[p1][1]="Long"; if(MarketInfo(CurrencyPair[p1][2],MODE_SWAPSHORT)>0)CurrencyPair[p1][1]="Short"; } } //+------------------------------------------------------------------+ //| FUNCTION Lotsize set to max five lots | //+------------------------------------------------------------------+ double lotsize(){ double lots=1; double risk=AccountEquity()*MaximumRisk/10000; lots=risk/MaxNumberOfTrades; return(lots); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen(int type){ bool notrade; if(AccountFreeMargin()<1200*Lots) return(0); if(OrdersTotal()>=3) return(0); if(IsTradeContextBusy())return(0); int Currency[10];ArrayInitialize(Currency,0); for(int c2=0;c2<=OrdersTotal();c2++){ if (OrderSelect(c2,SELECT_BY_POS)==true){ if(OrderType()==OP_BUY){ if (OrderSymbol()== "GBPJPY") {Currency[2]=Currency[2]+1;Currency[8]=Currency[8]-1;continue;} if (OrderSymbol()== "EURAUD") {Currency[1]=Currency[1]+1;Currency[3]=Currency[3]-1;continue;} if (OrderSymbol()== "EURUSD") {Currency[1]=Currency[1]+1;Currency[5]=Currency[5]-1;continue;} if (OrderSymbol()== "EURGBP") {Currency[1]=Currency[1]+1;Currency[2]=Currency[2]-1;continue;} if (OrderSymbol()== "EURCHF") {Currency[1]=Currency[1]+1;Currency[6]=Currency[6]-1;continue;} if (OrderSymbol()== "EURJPY") {Currency[1]=Currency[1]+1;Currency[8]=Currency[8]-1;continue;} if (OrderSymbol()== "GBPUSD") {Currency[2]=Currency[2]+1;Currency[5]=Currency[5]-1;continue;} if (OrderSymbol()== "GBPCHF") {Currency[2]=Currency[2]+1;Currency[6]=Currency[6]-1;continue;} if (OrderSymbol()== "AUDUSD") {Currency[3]=Currency[3]+1;Currency[5]=Currency[5]-1;continue;} if (OrderSymbol()== "USDCHF") {Currency[5]=Currency[5]+1;Currency[6]=Currency[6]-1;continue;} if (OrderSymbol()== "USDJPY") {Currency[5]=Currency[5]+1;Currency[8]=Currency[8]-1;continue;} if (OrderSymbol()== "USDCAD") {Currency[5]=Currency[5]+1;Currency[7]=Currency[7]-1;continue;} } if (OrderType()==OP_SELL) { if (OrderSymbol()== "EURAUD") {Currency[1]=Currency[1]-1;Currency[3]=Currency[3]+1;continue;} if (OrderSymbol()== "EURUSD") {Currency[1]=Currency[1]-1;Currency[5]=Currency[5]+1;continue;} if (OrderSymbol()== "EURGBP") {Currency[1]=Currency[1]-1;Currency[2]=Currency[2]+1;continue;} if (OrderSymbol()== "EURCHF") {Currency[1]=Currency[1]-1;Currency[6]=Currency[6]+1;continue;} if (OrderSymbol()== "EURJPY") {Currency[1]=Currency[1]-1;Currency[8]=Currency[8]+1;continue;} if (OrderSymbol()== "GBPUSD") {Currency[2]=Currency[2]-1;Currency[5]=Currency[5]+1;continue;} if (OrderSymbol()== "GBPJPY") {Currency[2]=Currency[2]-1;Currency[8]=Currency[8]+1;continue;} if (OrderSymbol()== "GBPCHF") {Currency[2]=Currency[2]-1;Currency[6]=Currency[6]+1;continue;} if (OrderSymbol()== "AUDUSD") {Currency[3]=Currency[3]-1;Currency[5]=Currency[5]+1;continue;} if (OrderSymbol()== "USDCHF") {Currency[5]=Currency[5]-1;Currency[6]=Currency[6]+1;continue;} if (OrderSymbol()== "USDJPY") {Currency[5]=Currency[5]-1;Currency[8]=Currency[8]+1;continue;} if (OrderSymbol()== "USDCAD") {Currency[5]=Currency[5]-1;Currency[7]=Currency[7]+1;continue;} } } } for(int c1=0;c1=MaxPerDirection || Currency[8]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="EURUSD") if(Currency[1]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="EURCHF") if(Currency[1]>=MaxPerDirection || Currency[6]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="EURGBP") if(Currency[1]>=MaxPerDirection || Currency[2]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="EURJPY") if(Currency[1]>=MaxPerDirection || Currency[8]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="EURAUD") if(Currency[1]>=MaxPerDirection || Currency[3]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="GBPUSD") if(Currency[2]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="GBPCHF") if(Currency[2]>=MaxPerDirection || Currency[6]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="AUDUSD") if(Currency[3]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="USDJPY") if(Currency[5]>=MaxPerDirection || Currency[8]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="USDCHF") if(Currency[5]>=MaxPerDirection || Currency[6]<=-1*MaxPerDirection) {notrade=true;continue;} if(CurrencyPair[c1][2]=="USDCAD") if(Currency[5]>=MaxPerDirection || Currency[7]<=-1*MaxPerDirection) {notrade=true;continue;} } if (CurrencyPair[c1][1]=="Short"){ if(CurrencyPair[c1][2]=="EURUSD") if(Currency[5]>=MaxPerDirection || Currency[1]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="EURCHF") if(Currency[6]>=MaxPerDirection || Currency[1]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="EURGBP") if(Currency[2]>=MaxPerDirection || Currency[1]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="EURJPY") if(Currency[8]>=MaxPerDirection || Currency[1]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="EURAUD") if(Currency[3]>=MaxPerDirection || Currency[1]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="GBPUSD") if(Currency[5]>=MaxPerDirection || Currency[2]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="GBPJPY") if(Currency[8]>=MaxPerDirection || Currency[2]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="GBPCHF") if(Currency[6]>=MaxPerDirection || Currency[2]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="AUDUSD") if(Currency[5]>=MaxPerDirection || Currency[3]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="USDJPY") if(Currency[8]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="USDCHF") if(Currency[6]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;} if(CurrencyPair[c1][2]=="USDCAD") if(Currency[7]>=MaxPerDirection || Currency[5]<=-1*MaxPerDirection) {notrade=true;} } if (notrade==false){ MacUp=false; MacDown=false; Mac(CurrencyPair[c1][2]); double l=0.1*MathRound(10*Lots/Base(CurrencyPair[c1][2])); if (l<0.1) l=0.1; if (l>5) l=5; string pair=CurrencyPair[c1][2]; if ( AccountFreeMargin()<1200*l) return(0); if (CurrencyPair[c1][1]=="Long") if (MacUp) {int ticket10=OrderSend(pair,OP_BUY,l,MarketInfo(pair,MODE_ASK),2,MarketInfo(pair,MODE_ASK)-Multiplier*TakeProfit(pair)*MarketInfo(pair,MODE_POINT),MarketInfo(pair,MODE_ASK)+TakeProfit(pair)*MarketInfo(pair,MODE_POINT),Name,MagicExpert,0,Blue); return(0);} if (CurrencyPair[c1][1]=="Short") if (MacDown) {int ticket20=OrderSend(pair,OP_SELL,l,MarketInfo(pair,MODE_BID),2,MarketInfo(pair,MODE_BID)+Multiplier*TakeProfit(pair)*MarketInfo(pair,MODE_POINT),MarketInfo(pair,MODE_BID)-TakeProfit(pair)*MarketInfo(pair,MODE_POINT),Name,MagicExpert,0,Blue); return(0);} } }//next c1 }//end check for open //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ int CheckForClose(int type){ if (Duration!=0){ //Lenght of time a postion is held for(int i2=OrdersTotal();i2>=0;i2--) { if(OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderMagicNumber()!=MagicExpert) continue; if (OrderOpenTime()