//+------------------------------------------------------------------+ //| elder.mq4 | //| Copyright 2012, Guriev Invest | //| http://www.gurievinvest.org.ua | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, Guriev Invest" #property link "http://gurieveugen.blogspot.com/2012/06/blog-post.html" extern int maFast = 12; // Быстрая МАШКА extern int maSlow = 26; // Медленная МАШКА extern int maSignal = 9; // Сигнальная МАШКА extern int Delta = 3; // Во сколько раз тейпрофит будет больше стоплосса extern int LevelWLoss = 10; // Уровень безубытка extern int LevelProfit = 0; // Уровень профита; Если 0 то будет брать с разницы стоплосса и цены отерытия extern int MaxRisk = 2; // Процент риска extern int MAXLOSS = 2; // Максимально количество проигрышных сделок за месяц int prevtime = 0; int ParentTimeFrame = PERIOD_W1; bool TrendUp = false; bool TrendDown = false; //+------------------------------------------------------------------+ //| Проверка на количество убыточных сделок | //+------------------------------------------------------------------+ int CalculateLossOrders() { datetime t; int o = 0; for(int i=0; i0) { if(Bid-OrderOpenPrice() > LevelProfit) fm = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } else { if(Bid-OrderOpenPrice() > (OrderOpenPrice()-OrderStopLoss())) fm = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } } if(OrderType() == OP_SELL) { if(LevelProfit>0) { if(OrderOpenPrice()-Ask > LevelProfit) fm = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } else { if(OrderOpenPrice()-Ask > (OrderStopLoss()-OrderOpenPrice())) fm = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } } if(fm) break; } } } bool isOrder(int order) { if(OrdersTotal()<1) return (false); for(int i = 0; iHigh[1]) { OrderDelete(OrderTicket()); return (false); } else return (true); } else { if(OrderOpenPrice()0) return (false); else return (true); } else { if(force<0) return (false); else return (true); } } //+------------------------------------------------------------------+ //| Расчет лота в зависимости от процента риска и стоп-приказа | //+------------------------------------------------------------------+ double GetLots(double sl) { double Free = AccountFreeMargin(); // Свободные деньги double LotVal = MarketInfo(Symbol(),MODE_TICKVALUE); //стоимость 1 пункта для 1 лота double MinLot = MarketInfo(Symbol(),MODE_MINLOT); // Минимальный лот double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT); // Максимальный лот double Step = MarketInfo(Symbol(),MODE_LOTSTEP); // Шаг изменения лота double Lot = MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; if(LotMaxLot) Lot = MaxLot; return (Lot); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(Time[0] == prevtime) return (0); prevtime = Time[0]; bool up = false; bool down = false; double TakeProfit = 0; double Lots = NormalizeDouble((AccountBalance()/10000),2); double macd1 = iMACD(Symbol(), ParentTimeFrame, maFast, maSlow, maSignal, PRICE_CLOSE, MODE_MAIN,1); double macd2 = iMACD(Symbol(), ParentTimeFrame, maFast, maSlow, maSignal, PRICE_CLOSE, MODE_MAIN,2); double macd3 = iMACD(Symbol(), ParentTimeFrame, maFast, maSlow, maSignal, PRICE_CLOSE, MODE_MAIN,3); //=========Формируем Сигнал========= if(macd1>macd2 && macd2macd3) { TrendUp = false; TrendDown = true; } if(TrendUp) up = Force(true); if(TrendDown) down = Force(false); if(CalculateLossOrders()>MAXLOSS-1){up = false; down = false;} if(up) { if(!isOrders(OP_BUYSTOP, true) && !isOrder(OP_BUY)) { TakeProfit = High[1] + ((High[1]-Low[1])*Delta); OrderSend(Symbol(), OP_BUYSTOP, GetLots((High[1]-Low[1])*100000), High[1], 1, Low[1], TakeProfit, "Покупка",0,0, Green); } } if(down) { if(!isOrders(OP_SELLSTOP, false) && !isOrder(OP_SELL)) { TakeProfit = Low[1] - ((High[1]-Low[1])*Delta); OrderSend(Symbol(), OP_SELLSTOP, GetLots((High[1]-Low[1])*100000), Low[1], 1, High[1], TakeProfit, "Продажа",0,0, Red); } } bu(); //================================== return(0); } //+------------------------------------------------------------------+