#property copyright "Scam Laboratory 2013" #property link "http://www.forex4you.org/?affid=bdbda7b" //=============== Меню =============================================== extern string Name="Falling Cat"; extern string MoneyManagement="MoneyManagement"; extern double StartLot = 0.01; // Старт игрушки кошки extern int TakeProfit = 2000; // фиксированный профит extern int StopLoss = 2000; // фиксированный профит extern string Enter="OpenPosition"; extern int Period_MA_Main = 12; // Период МА extern int Ma_method_Main = 1; // MODE_SMA=0 MODE_EMA=1 MODE_SMMA=2 MODE_LWMA=3 extern int Applied_price_Main = 5; // PRICE_CLOSE=0 PRICE_OPEN=1 PRICE_HIGH=2 PRICE_LOW=3 PRICE_MEDIAN=4 PRICE_TYPICAL=5 PRICE_WEIGHTED=6 extern int Period_MA_Signal = 3; // Период МА extern int Ma_method_Signal = 1; // MODE_SMA=0 MODE_EMA=1 MODE_SMMA=2 MODE_LWMA=3 extern int Applied_price_Signal = 5; // PRICE_CLOSE=0 PRICE_OPEN=1 PRICE_HIGH=2 PRICE_LOW=3 PRICE_MEDIAN=4 PRICE_TYPICAL=5 PRICE_WEIGHTED=6 extern string Exit="ExitPosition"; extern int ProfitClose = 20000; // Закрываем профит в единицах счета extern int MinTP = 10; // минимальный тейк профит extern int MinSL = 10; // минимальный стоп лосс extern string Server="ServerSetting"; extern int MaxSpread = 20; // Выше этого спреда не открываемся extern int Slippage = 0; // Допустимое проскальзование цены extern int Pause = 500; // пауза между запросами на сервер extern string Magic="MagicNumber"; extern int mn = 16384; // Магический номер //============== Переменные ========================================== string GetNameOP="FallingCat"; // комент в открытом ордере int spread; // текущий спред int Ticket; // тикет ордера при открытии int FullSell; // FullSignals int FullBuy; double MA_main; // МА оснавная double MA_signal; // МА сигнальная double HeikenAshi; // HeikenAshi int Profit; // Прибыль int NoLoss; // Безубыток double Lot; // Рабочий лот //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (!IsTesting()) { if (IsExpertEnabled()) { Comment("Советник будет запущен следующим тиком"); } else { Comment("Отжата кнопка \"Разрешить запуск советников\""); } } return (0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() {//0 //-Start- // ======== получение данных с индикаторов и текущей цены ============ {//1 MA_main = iMA(NULL,0,Period_MA_Main,0,Ma_method_Main,Applied_price_Main,1); // МА оснавная MA_signal = iMA(NULL,0,Period_MA_Signal,0,Period_MA_Signal,Applied_price_Signal,1); // МА сигнальная HeikenAshi = iOpen(NULL,0,0); // открытие свечи spread = MarketInfo(Symbol(),MODE_SPREAD); // спред }//1 // ================= Обработка сигналов ============================== {//2 if ((MA_signal < MA_main) && (HeikenAshi < MA_signal)) FullSell = 1; else FullSell = 0; // FullSignals if ((MA_signal > MA_main) && (HeikenAshi > MA_signal)) FullBuy = 1; else FullBuy = 0; // FullSignals if (AccountEquity() > AccountBalance()) Profit = 1; else Profit = 0; // Прибыль if (AccountBalance() == AccountEquity()) NoLoss = 1; else NoLoss = 0; // Безубыток if (NumberOfPositions() == 0) Lot = StartLot; else Lot = (GetLotLastPos()*2); }//2 // ================= Комментарии ===================================== {//3 }//3 // ================= Открытие сделки ================================= {//4 // полный сигнал, ордера нет, торговля разрешена и последняя закрытая позиции не такая же if ((FullSell == 1) && (Profit == 0) && (GetTypeLastOpenPos() !=1)) { Ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,GetNameOP,mn,0,OrangeRed); Sleep (Pause); OrderModify(Ticket,OrderOpenPrice(),(PriceOpenLastPos()+StopLoss*Point),(PriceOpenLastPos()-TakeProfit*Point),0,CLR_NONE); } if ((FullBuy == 1) && (Profit == 0) && (GetTypeLastOpenPos() !=0)) { Ticket = OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,GetNameOP,mn,0,Blue); Sleep (Pause); OrderModify(Ticket,OrderOpenPrice(),(PriceOpenLastPos()-StopLoss*Point),(PriceOpenLastPos()+TakeProfit*Point),0,CLR_NONE); } }//4 // ================= Модификация ордера ============================== {//5 }//5 // ================= Закрытие сделки ================================= {//6 if ((FullSell == 1) && (Profit == 1) && (GetTypeLastOpenPos() !=1)) { ClossAllProfitBuy (); ClossAllLossSell(); } if ((FullBuy == 1) && (Profit == 1) && (GetTypeLastOpenPos() !=0)) { ClossAllProfitSell (); ClossAllLossBuy(); } if (GetProfitOpenPosInCurrency() >= ProfitClose) { ClossAllProfitSell (); ClossAllProfitBuy (); ClossAllLossSell(); ClossAllLossBuy(); } }//6 //-End- return(0); }//0 // ================= Функции ========================================= //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1) { int i, k=OrdersTotal(), kp=0; if (sy=="0") sy=Symbol(); for (i=0; i=0; i1--) { if (!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point1=MarketInfo(Symbol(),MODE_POINT); if (point1==0) break; bid1=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point1); open1=MathRound(OrderOpenPrice()/point1); if (bid1-open1=0; i2--) { if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point2=MarketInfo(Symbol(),MODE_POINT); if (point2==0) break; ask2=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point2); open2=MathRound(OrderOpenPrice()/point2); if (open2-ask2=0; i4--) { if (!OrderSelect(i4,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point4=MarketInfo(Symbol(),MODE_POINT); if (point4==0) break; bid4=MathRound(MarketInfo(Symbol(),MODE_BID)/point4); open4=MathRound(OrderOpenPrice()/point4); if (open4-bid4=0; i5--) { if (!OrderSelect(i5,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point5=MarketInfo(Symbol(),MODE_POINT); if (point5==0) break; ask5=MathRound(MarketInfo(Symbol(),MODE_ASK)/point5); open5=MathRound(OrderOpenPrice()/point5); if (ask5-open5