#property copyright "skype atomrus1993" #property link "e-mail andrey@matveevs.ru" extern string S1 = "Общие параметры"; extern int Magic = 26082012; //магик номер extern int Slippage = 20; //максимальное проскальзывание в пунктах extern bool fix_take = false; extern bool reverse = false; extern int TakeProfit = 60; //тейк профит extern int StopLoss = 20; //стоп лосс extern double Lot = 0.1; //первоначальный лот extern int LotDigits = 2; //кол-во цифр после запятой для лота extern string Comments = "Комментарий"; extern double Koef = 2; //коэффициент увеличение лота при пройгрыше // go to trading )) int start(){ if (getCountOpenOrder() > 0){ return(0); } double lot = 0; int buySig = 0, sellSig = 1; lot = lastProfit() ? Lot : lastLot() * Koef; lot = getNormalizeLot(lot); if (reverse){ buySig = 1; sellSig = 0; } if (iAO(Symbol(), 0, 1) > 0 && iAO(Symbol(), 0, 2) < 0){ openOrder(buySig, lot); } else if (iAO(Symbol(), 0, 1) < 0 && iAO(Symbol(), 0, 2) > 0){ openOrder(sellSig, lot); } return(0); } // Open Order int openOrder(int type, double lot){ int result = -1; double TP, SL; for (int i = 1; i = 0; i--){ if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber () == Magic && OrderSymbol () == Symbol ()){ if (time < OrderOpenTime()){ profit = OrderProfit(); } } } return profit >= 0 ? true : false; } // Лот последней сделки double lastLot(){ int time = -1; double lot = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--){ if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber () == Magic && OrderSymbol () == Symbol ()){ if (time < OrderOpenTime()){ lot = OrderLots(); } } } return lot; } // Получает кол-во открытых позиций int getCountOpenOrder(){ int openOrder = 0; for (int i = OrdersTotal() - 1; i >= 0; i--){ if (OrderSelect(i, SELECT_BY_POS) && OrderMagicNumber() == Magic && OrderSymbol() == Symbol()){ openOrder++; } } return openOrder; } // получает нормальный лот double getNormalizeLot(double lot){ if (lot < MarketInfo(Symbol(), MODE_MINLOT)){ lot = MarketInfo(Symbol(), MODE_MINLOT); } else if (lot > MarketInfo(Symbol(), MODE_MAXLOT)){ lot = MarketInfo(Symbol(), MODE_MAXLOT); } lot = NormalizeDouble (lot, LotDigits); return lot; }