//+------------------------------------------------------------------+ //| QuadHedge trader | //| Copyright © 2009, Juan Cruz Baudino | //| | //| Please if you like the code and got some reward from this you | //| may don't mind to make a donation to the author. | //| Paypal account: cacuscacus@gmail.com | //| If you make some modifications please be kind to inform me | //| about this. | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Juan Cruz Baudino." #property link "" #include extern string Label1 = "Choose working pairs"; extern string Pair1 = "EURUSD"; extern string Pair2 = "USDCHF"; extern string Label2 = "Choose Stage if you need to take up again from a crash"; extern int stage = 1; extern string Label3 = "Orders Sets"; extern int PipsTrigger = 40; extern int PipsInGain = 10; extern double Size = 0.1; extern int MagicNumber = 2400; extern int slip = 10; extern string Label4 = "Working filters"; extern int MaxCycles = 10; extern int StartHour = 1; extern int StopHour = 23; int cycle=0; int ticket1=-1,ticket2=-1,ticket3=-1,ticket4=-1; bool orden1=false,orden2=false,orden3=false,orden4=false; double margen1,margen2,margenTotal; double profit1,profit2,profit3,profit4,profitpar1,profitpar2; bool couple1Health,couple2Health; int init(){return(0);} int deinit(){return(0);} int start() { double deposito = AccountBalance(); double equidad = AccountEquity(); int spread1=MarketInfo(Pair1,MODE_SPREAD); int spread2=MarketInfo(Pair2,MODE_SPREAD); double Bid1 =MarketInfo(Pair1,MODE_BID); double Ask1 =MarketInfo(Pair1,MODE_ASK); double Bid2 =MarketInfo(Pair2,MODE_BID); double Ask2 =MarketInfo(Pair2,MODE_ASK); OpenOrders(); CouplesHealth(); //------------------- //Print ON SCREEN string line1 = "Initial Balance: " + DoubleToStr(deposito,2); string line2 = "Equity: " + DoubleToStr(equidad,2); string line3 = "Lots: " + DoubleToStr(Size,2); if (couple1Health){string line4 = "First couple OPEN, Profit: " + DoubleToStr(margen1,0);}else{line4 = "First couple CLOSED";} if (couple2Health){string line5 = "Second couple OPEN, Profit: " + DoubleToStr(margen2,0);}else{line5 = "Second couple CLOSED";} if (couple2Health&&!couple1Health) string line6 = "Current profit: " + DoubleToStr((PipsTrigger+margen2),0); if (!couple2Health&&couple1Health) line6 = "Current profit: " + DoubleToStr((PipsTrigger+margen1),0); if (couple2Health&&couple1Health) line6 = "Current profit: " + DoubleToStr((margen1+margen2),0); string line7 = "Cycle: " + (cycle+1) + " of " + MaxCycles; string line8 = "Stage: " + (stage); string line9 = "PipsTrigger/PipsInGain set: " + PipsTrigger +"/"+ PipsInGain; string line10 = "Magic: " + MagicNumber; ObjectCreate("Line1",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line1",line1,12,"Arial",White);//Style ObjectSet("Line1",OBJPROP_XDISTANCE,10);//X ObjectSet("Line1",OBJPROP_YDISTANCE,12);//Y ObjectSet("Line1",OBJPROP_CORNER,1);//Corner ObjectCreate("Line2",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line2",line2,12,"Arial",White);//Style ObjectSet("Line2",OBJPROP_XDISTANCE,10);//X ObjectSet("Line2",OBJPROP_YDISTANCE,32);//Y ObjectSet("Line2",OBJPROP_CORNER,1);//Corner ObjectCreate("Line3",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line3",line3,12,"Arial",White);//Style ObjectSet("Line3",OBJPROP_XDISTANCE,10);//X ObjectSet("Line3",OBJPROP_YDISTANCE,52);//Y ObjectSet("Line3",OBJPROP_CORNER,1);//Corner ObjectCreate("Line4",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line4",line4,12,"Arial",White);//Style ObjectSet("Line4",OBJPROP_XDISTANCE,10);//X ObjectSet("Line4",OBJPROP_YDISTANCE,72);//Y ObjectSet("Line4",OBJPROP_CORNER,1);//Corner ObjectCreate("Line5",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line5",line5,12,"Arial",White);//Style ObjectSet("Line5",OBJPROP_XDISTANCE,10);//X ObjectSet("Line5",OBJPROP_YDISTANCE,92);//Y ObjectSet("Line5",OBJPROP_CORNER,1);//Corner ObjectCreate("Line6",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line6",line6,12,"Arial",White);//Style ObjectSet("Line6",OBJPROP_XDISTANCE,10);//X ObjectSet("Line6",OBJPROP_YDISTANCE,112);//Y ObjectSet("Line6",OBJPROP_CORNER,1);//Corner ObjectCreate("Line7",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line7",line7,12,"Arial",White);//Style ObjectSet("Line7",OBJPROP_XDISTANCE,10);//X ObjectSet("Line7",OBJPROP_YDISTANCE,132);//Y ObjectSet("Line7",OBJPROP_CORNER,1);//Corner ObjectCreate("Line8",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line8",line8,12,"Arial",White);//Style ObjectSet("Line8",OBJPROP_XDISTANCE,10);//X ObjectSet("Line8",OBJPROP_YDISTANCE,152);//Y ObjectSet("Line8",OBJPROP_CORNER,1);//Corner ObjectCreate("Line9",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line9",line9,12,"Arial",White);//Style ObjectSet("Line9",OBJPROP_XDISTANCE,10);//X ObjectSet("Line9",OBJPROP_YDISTANCE,172);//Y ObjectSet("Line9",OBJPROP_CORNER,1);//Corner ObjectCreate("Line10",OBJ_LABEL,0,0,0); //Create line1 ObjectSetText("Line10",line10,12,"Arial",White);//Style ObjectSet("Line10",OBJPROP_XDISTANCE,10);//X ObjectSet("Line10",OBJPROP_YDISTANCE,192);//Y ObjectSet("Line10",OBJPROP_CORNER,1);//Corner //Print ON SCREEN //------------------- //condition to open the first HEDGE if ( (cycle=StartHour) && (TimeHour( TimeCurrent() )<=StopHour) ) { int intentos=0; while (ticket1<0){ticket1=OrderSend(Pair1,OP_BUY,Size,MarketInfo(Pair1,MODE_ASK),slip,0,0,"1 BUY "+Pair1 + " " + (MagicNumber+1),MagicNumber+1,0,Green);/*Print("Opening BUY 1COUPLE try: " + intentos);*/intentos=intentos+1;} intentos=0; while (ticket2<0){ticket2=OrderSend(Pair2,OP_BUY,Size,MarketInfo(Pair2,MODE_ASK),slip,0,0,"1 BUY "+Pair2 + " " + (MagicNumber+2),MagicNumber+2,0,Red);/*Print("Opening SELL 1COUPLE try: " + intentos);*/intentos=intentos+1;} intentos=0; while (ticket3<0){ticket3=OrderSend(Pair2,OP_SELL,Size,MarketInfo(Pair2,MODE_BID),slip,0,0,"2 SELL, "+Pair2 + " " + (MagicNumber+3),MagicNumber+3,0,Green);/*Print("Opening BUY 2COUPLE try: " + intentos);*/intentos=intentos+1;} intentos=0; while (ticket4<0){ticket4=OrderSend(Pair1,OP_SELL,Size,MarketInfo(Pair1,MODE_BID),slip,0,0,"2 SELL, "+Pair1 + " " + (MagicNumber+4),MagicNumber+4,0,Red);/*Print("Opening SELL 2COUPLE try: " + intentos);*/intentos=intentos+1;} } OpenOrders(); //check for opened orders... CouplesHealth(); //Start to watch the opened couples if ((orden1 && orden2 && orden3 && orden4) && (margen1>margen2) && (margen1>=PipsTrigger) && (stage==1)) // if 4 orders opened and the margin of the first pair is > and it reaches the higher margin the i close this pair in profit... { bool err=true; while (err){if (OrderClose(ticket1,OrderLots(),MarketInfo(Pair1,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par1 error" + ErrorDescription(GetLastError()));*/}} err=true; while (err){if (OrderClose(ticket2,OrderLots(),MarketInfo(Pair2,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par1 error" + ErrorDescription(GetLastError()));*/}} OpenOrders(); if (!orden1 && !orden2){stage=2;} } if ((orden1 && orden2 && orden3 && orden4) && (margen2>margen1) && (margen2>=PipsTrigger) && (stage==1)) // if 4 orders opened and the margin of the second pair is > and it reaches the higher margin... { err=true; while (err){if (OrderClose(ticket3,OrderLots(),MarketInfo(Pair2,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par2 error" + ErrorDescription(GetLastError()));*/}} err=true; while (err){if (OrderClose(ticket4,OrderLots(),MarketInfo(Pair1,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par2 error" + ErrorDescription(GetLastError()));*/}} OpenOrders(); if (!orden3 && !orden4){stage=2;} } OpenOrders(); CouplesHealth(); CheckStage(); //if i already closed the other couple with benefits, then i wait for remaining couple to come back till the lower margin. if (stage==2 && !orden3 && !orden4){double margen=(profit1+profit2);} if (stage==2 && !orden1 && !orden2){margen=(profit3+profit4);} double margenPerdida=PipsTrigger-PipsInGain; if (margen>=(margenPerdida*(-1)) && stage==2) //if margin between both pairs reachs the low margin then we close all the orders. { if (!orden3 && !orden4) { err=true; while (err){if (OrderClose(ticket1,OrderLots(),MarketInfo(Pair1,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par1 error" + ErrorDescription(GetLastError()));*/}} err=true; while (err){if (OrderClose(ticket2,OrderLots(),MarketInfo(Pair2,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par1 error" + ErrorDescription(GetLastError()));*/}} ticket1=-1;ticket2=-1; ticket3=-1;ticket4=-1; cycle=cycle+1; stage=1; } if (!orden1 && !orden2) { err=true; while (err){if (OrderClose(ticket3,OrderLots(),MarketInfo(Pair2,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par2 error" + ErrorDescription(GetLastError()));*/}} err=true; while (err){if (OrderClose(ticket4,OrderLots(),MarketInfo(Pair1,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par2 error" + ErrorDescription(GetLastError()));*/}} ticket1=-1;ticket2=-1; ticket3=-1;ticket4=-1; cycle=cycle+1; stage=1; } } OpenOrders(); CouplesHealth(); CheckStage(); //LAST CHECK IF SOMETHING GONE WRONG... if (orden1 && orden2 && orden3 && orden4 && stage==2){stage=1;/*Print("Something is wrong, stage 2 but 4 orders openned. Rechecking");*/} if (orden1 && !orden2 && stage==2 && orden3 && orden4) {//Print("Something is wrong, 1st couple problem with left 1st order. Rechecking"); err=true; while (err){if (OrderClose(ticket1,OrderLots(),MarketInfo(Pair1,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par1 error" + ErrorDescription(GetLastError()));*/}} } if (!orden1 && orden2 && stage==2 && orden3 && orden4) {//Print("Something is wrong, 1st couple problem with left 2nd order. Rechecking"); err=true; while (err){if (OrderClose(ticket2,OrderLots(),MarketInfo(Pair2,MODE_BID),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par1 error" + ErrorDescription(GetLastError()));*/}} } if (orden3 && !orden4 && stage==2 && orden1 && orden2) {//Print("Something is wrong, 2nd couple problem with left 1st order. Rechecking"); err=true; while (err){if (OrderClose(ticket3,OrderLots(),MarketInfo(Pair2,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close BUY par2 error" + ErrorDescription(GetLastError()));*/}} } if (!orden3 && orden4 && stage==2 && orden1 && orden2) {//Print("Something is wrong, 2nd couple problem with left 2nd order. Rechecking"); err=true; while (err){if (OrderClose(ticket4,OrderLots(),MarketInfo(Pair1,MODE_ASK),slip,Red)){err=false;}else{err=true;/*Print(" Close SELL par2 error" + ErrorDescription(GetLastError()));*/}} } return(0); } //######################################################################################################################### void OpenOrders() { //Look for the opened orders --------------------------------------------------------------------------- orden1=false;orden2=false;orden3=false;orden4=false; for (int i=0;i