//+------------------------------------------------------------------+ //| EURO-SELL.mq4 | //| Copyright © 2008, LEGRUPO. | //| http://www.legrupo.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, LEGRUPO." #property link "http://www.legrupo.com" //+------------------------------------------------------------------+ //| EX4 imports | //+------------------------------------------------------------------+ #include #include extern double LotSize = 5.0; extern int TakeProfit = 30; extern int StopLoss = 60; extern int HedgeDistance = 30; extern int HourToTrade = 10; extern int Slippage = 3; extern bool UseMoneyManagement = false; extern bool AccountIsMicro = false; extern int Risk = 50; // risk in percentage % (10% of risk in this case) int ExpertID = 988988; int MagicNumber = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- MagicNumber = MakeMagicNumber(); if(UseMoneyManagement==true) { LotSize = DefineLotSize(); //Adjust the lot size total if (LotSize > MarketInfo(Symbol(), MODE_MAXLOT)) { LotSize = MarketInfo(Symbol(), MODE_MAXLOT); } } if (Hour() == HourToTrade) { double price,hedge_price,hedge_tp,hedge_sl,sl,tp = 0.0; if (CountShorts(MagicNumber) == 0) { price = Bid; sl = price+StopLoss*Point; tp = price-TakeProfit*Point; int ticket_sell = OrderSend(Symbol(),OP_SELL,LotSize,price,Slippage,sl,tp,WindowExpertName(),MagicNumber,0,CLR_NONE); hedge_price = price+HedgeDistance*Point; hedge_tp = hedge_price+TakeProfit*Point; hedge_sl = hedge_price-StopLoss*Point; int hedge_buy = OrderSend(Symbol(), OP_BUYSTOP, LotSize,hedge_price,Slippage,hedge_sl,hedge_tp,WindowExpertName(),MagicNumber,0,CLR_NONE); if (hedge_buy < 0) { Alert(Symbol()," ",WindowExpertName()," Open BUYSTOP order error: ", ErrorDescription(GetLastError())); } } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Calculate concurrent Long position | //+------------------------------------------------------------------+ int CountLongs(int MagicNumber) { int count=0; int trade; int trades=OrdersTotal(); for(trade=0;trade 0.5) && (lotMM < 1)) lotMM=0.5; if (lotMM > 1.0) lotMM = MathCeil(lotMM); if (lotMM > 100) lotMM = 100; } else { //micro account if (lotMM < 0.01) lotMM = LotSize; if (lotMM > 1.0) lotMM = MathCeil(lotMM); if (lotMM > 100) lotMM = 100; } return (lotMM); } bool LastOrderSelect(int pool, int type1, int type2 = -1) { datetime tm = -1; int ticket = -1; if (pool == MODE_TRADES) { int cnt = OrdersTotal(); for (int i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, pool)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != MagicNumber) continue; int type = OrderType(); if (type == type1 || type == type2) { if (OrderOpenTime() > tm) { tm = OrderOpenTime(); ticket = OrderTicket(); } } } return (OrderSelect(ticket, SELECT_BY_TICKET)); } if (pool == MODE_HISTORY) { cnt = OrdersHistoryTotal(); for (i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, pool)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != MagicNumber) continue; type = OrderType(); if (type == type1 || type == type2) { if (OrderCloseTime() > tm) { tm = OrderCloseTime(); ticket = OrderTicket(); } } } return (OrderSelect(ticket, SELECT_BY_TICKET)); } return (false); }