#property copyright "Copyright © 2009, Juan Cruz Baudino" #property link "http://www.cacus.com.ar" extern string Par1 = "EURUSD"; extern string Par2 = "GBPUSD"; extern int margenGanancia = 100; extern int margenPerdida = 20; extern double Size = 0.1; int start() { double deposito = AccountBalance(); static datetime MarcaTiempo = 0; static int ticket1,ticket2,ticket3,ticket4; datetime NuevaTiempo = Time[0]; double margen1,margen2,margenTotal,equidad; bool orden1,orden2,orden3,orden4; int profit1,profit2,profit3,profit4,profitpar1,profitpar2; //------------------- //ESCRIBO EN PANTALLA equidad = AccountEquity(); OrderSelect(ticket1, SELECT_BY_TICKET); profit1=OrderProfit(); OrderSelect(ticket2, SELECT_BY_TICKET); profit2=OrderProfit(); margen1=profit1+profit2; // MARGEN DE LAS PRIMERAS DOS OrderSelect(ticket3, SELECT_BY_TICKET); profit3=OrderProfit(); OrderSelect(ticket4, SELECT_BY_TICKET); profit4=OrderProfit(); margen2=profit3+profit4; // MARGEN DE LAS SEGUNDAS if (stage()==1) { Comment( "\n---------", "\nDeposito inicial:",deposito, "\nEquidad actual:",equidad, "\nOperando en Lotes:",Size, "\nMargen de la primer pareja: ",margen1, "\nMargen de la segunda pareja:",margen2, "\nEsperando a cerrar algun par en profit.", "\n---------\n"); } if (stage()==2) { Comment( "\n---------", "\nDeposito inicial:",deposito, "\nEquidad actual:",equidad, "\nOperando en Lotes:",Size, "\nMargen de la primer pareja: ",margen1, "\nMargen de la segunda pareja:",margen2, "\nEsperando a cerrar el cuarteto con menor pérdida.", "\n---------\n");} if (!AlreadyOpen()) { Comment( "\n---------", "\nDeposito inicial:",deposito, "\nEquidad actual:",equidad, "\nOperando en Lotes:",Size, //"\nMargen de la primer pareja: ",margen1, //"\nMargen de la segunda pareja:",margen2, "\nEsperando a abrir operaciones.", "\n---------\n");} //Print ON SCREEN //------------------- if(MarcaTiempo != NuevaTiempo) { double Bid1 =MarketInfo(Par1,MODE_BID); double Ask1 =MarketInfo(Par1,MODE_ASK); double Bid2 =MarketInfo(Par2,MODE_BID); double Ask2 =MarketInfo(Par2,MODE_ASK); if(AlreadyOpen()==false) // check for the orders to be opened already { orden1=false; orden2=false; orden3=false; orden4=false; for (int i=0;imargen2) && (margen1>=margenGanancia)) // if the margin of the first pair is > and it reaches the higher margin the i close this pair in profit... { OrderClose(ticket1,Size,Bid,3,Red); OrderClose(ticket2,Size,Ask,3,Red); ticket1=OrderSend(Par1,OP_BUY,Size,Ask1,5,0,0,"COMPRA primer par, "+Par1,1,0,Green); ticket2=OrderSend(Par2,OP_SELL,Size,Bid2,5,0,0,"VENTA primer par, "+Par2,2,0,Red); } if ((margen2>margen1) && (margen2>=margenGanancia)) // is margin of the second pair is > and it reaches the higher margin... { OrderClose(ticket3,Size,Bid,3,Red); OrderClose(ticket4,Size,Ask,3,Red); ticket3=OrderSend(Par2,OP_BUY,Size,Ask2,5,0,0,"COMPRA segundo par, "+Par2,3,0,Green); ticket4=OrderSend(Par1,OP_SELL,Size,Bid1,5,0,0,"VENTA segundo par, "+Par1,4,0,Red); } } if (stage()==2 && AlreadyOpen()) //if i already closed the other pair with benefits, then i wait for both pairs to come back till the lower margin. { OrderSelect(ticket1, SELECT_BY_TICKET); profit1=OrderProfit(); OrderSelect(ticket2, SELECT_BY_TICKET); profit2=OrderProfit(); margen1=profit1+profit2; OrderSelect(ticket3, SELECT_BY_TICKET); profit3=OrderProfit(); OrderSelect(ticket4, SELECT_BY_TICKET); profit4=OrderProfit(); margen2=profit3+profit4; margenTotal=margen1+margen2; if(margenTotal<=(margenPerdida*(-1))) //if margin between both pairs reachs the low margin then we close all the orders. { OrderClose(ticket1,Size,Bid,3,Red); OrderClose(ticket2,Size,Ask,3,Red); OrderClose(ticket3,Size,Bid,3,Red); OrderClose(ticket4,Size,Ask,3,Red); } } } MarcaTiempo = NuevaTiempo; } return(0); } bool AlreadyOpen() { bool orden1,orden2,orden3,orden4; for (int i=0;i