//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #include #include #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CGeneral_class gc; CIndicators_class ind; CExternalIndicators_class externalind; //+------------------------------------------------------------------+ //| Bollinger_bands | //+------------------------------------------------------------------+ input int BBPeriod = 35; // Bands Period1 input double BBDev = 2; // Bands Deviation1 input double Razmah = 40; // Bands Deviation1 in Points input ENUM_APPLIED_PRICE Bollinger_Applied_price = PRICE_CLOSE; int _bars = 0; double up[], dn[], bs[]; int BBHandl; input group "------------------ Параметры MA и MACD - торговля ------------------ " input int ma_period_1 = 19; input int ma_shift1 = 0; int handle_MA1; double MA[]; input ENUM_APPLIED_PRICE Applied_price_MA = PRICE_OPEN; input ENUM_MA_METHOD MA_Mode = MODE_SMA; // MACD int handle_MACD; double MACD[], SignalMACD[]; input int Fast_ema_period = 12; // MACD период быстрой средней input int Slow_ema_period = 36; // MACD период медленной средней input int Signal_period = 14 ; // MACD период усреднения разности input ENUM_APPLIED_PRICE Applied_price_MACD = PRICE_CLOSE; int handle_MACD1 = 0; input group "------------------ Параметры MA и MACD - долгосрочный ------------------ " // MA долгосрочного периода input int ma_period_2 = 21; input int ma_shift2 = 0; int handle_MA_second; double MA_second[]; input ENUM_APPLIED_PRICE Applied_price_MA_second = PRICE_LOW; input ENUM_MA_METHOD MA_Mode_second = MODE_SMA; // MACD долгосрочного периода int handle_MACD_second = 0; double MACD_second[], SignalMACD_second[]; input int Fast_ema_period_second = 5; // период быстрой средней MACD input int Slow_ema_period_second = 45; // период медленной средней MACD input int Signal_period_second = 13; // период усреднения разности MACD input ENUM_APPLIED_PRICE Applied_price_MACD_second = PRICE_LOW; input bool NewBar = false; input bool TimeCheck = false; input bool Risk_lot = true; // SL % от Баланса input ENUM_TIMEFRAMES per = PERIOD_M1; //Период для текущей торговли input ENUM_TIMEFRAMES per2 = PERIOD_M5; //Период для долгосрочного тренда input string Start_Time = "20"; input string End_Time = "01"; double SL = 150; double Lot1_ = 0.1; input double Lot_percent = 5; // риск % баланса double lot_b = 0; double lot_s = 0; int Slippage = 30; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ bool flagSell = true; bool flagBuy = false; bool flagSellclose = false; bool flagBuyclose = false; datetime b1 = 0; datetime b2 = 0; //bool firstrun= true; void OnTick() { // if (firstrun) // { ind.Bollinger_bands(_Symbol,per,BBPeriod,0,BBDev,Bollinger_Applied_price, BBHandl,up,dn,bs,true); ind.MA_(_Symbol,per,ma_period_1,ma_shift1,MA_Mode,Applied_price_MA,handle_MA1,MA,false); ind.MA_(_Symbol,per2,ma_period_2,ma_shift2,MA_Mode,Applied_price_MA_second,handle_MA_second,MA_second,false); ind.MACD(_Symbol,per,Fast_ema_period,Slow_ema_period,Signal_period,Applied_price_MACD,handle_MACD1, MACD,SignalMACD,false); ind.MACD(_Symbol,per2,Fast_ema_period_second,Slow_ema_period_second,Signal_period_second,Applied_price_MACD_second,handle_MACD_second, MACD_second,SignalMACD_second,false); // firstrun = false; double Ask_ = SymbolInfoDouble(_Symbol, SYMBOL_ASK); // получаем цену аск double Bid_ = SymbolInfoDouble(_Symbol, SYMBOL_BID); Print("ASK/BID"); int ob = 0, os = 0; datetime t_ob = 0, t_os = 0; int trades = gc.CheckOpen(ob, os, t_ob, t_os); // на каждом тике проверяем наличие открытой позиции int impuls = Impuls_signal(); int impuls_Trend = Impuls_signal_TREND(); //--- SL && TP Print("LOTS"); double risk_lotBuy = gc.LotSize(SL, Lot_percent); if(Risk_lot) lot_b = risk_lotBuy; else lot_b = Lot1_; double risk_lotSell = gc.LotSize(SL, Lot_percent); if(Risk_lot) lot_s = risk_lotSell; else lot_s = Lot1_; // Анализ на новом баре if(NewBar) { if(!gc.isNewBar(per)) return; } Print("Timecheck"); if(TimeCheck) { if(!gc.CheckTimePeriod(IntegerToString(Start_Time),IntegerToString(End_Time))) return; } double r=up[0]-dn[0]; Print("OB/OS"); if(os>0) { if(Bid_ <= dn[0]) { flagSellclose =true; } if(flagSellclose) { if(impuls = 1) { gc.CloseSell(); flagSellclose =false; } } } if(ob>0) { if(Ask_ >= up[0]) { flagBuyclose =true; } if(flagBuyclose) { if(impuls = -1) { gc.CloseBuy(); flagBuyclose =false; } } } Print("OS == 0"); if(os==0) { if(Bid_ >= up[0] && r>Razmah*_Point) { flagSell =true; b1 = iTime(_Symbol,per,0); Print("bar1: ", b1); SendMail(_Symbol + " 1-е условие выполнено", _Symbol + " Bid >= up[0] && r>Razmah*_Point, Период: " + GetNameTF()); } int barSell = iBarShift(_Symbol,per,b1); Print(": ", barSell); if(barSell > 2) { flagSell = false; Print("flagSell: ", flagSell); } if(flagSell) { if(impuls = -1) { gc.OpenSellPosition(lot_s,Bid_,Bid_+SL*_Point,0); SendMail(_Symbol + " Новая позиция", _Symbol + " Сигнал_Продажа_Вход, Период: " + GetNameTF()); flagSell =false; } } } if(ob==0) { if(Ask_ <= dn[0] && r>Razmah*_Point) { flagBuy =true; b2 = iTime(_Symbol,per,0); SendMail(_Symbol + " 1-е условие выполнено", _Symbol + " Ask <= dn[0] && r>Razmah*_Point, Период: " + GetNameTF()); } int barBuy = iBarShift(_Symbol,per,b2); if(barBuy > 10) { flagBuy = false; } if(flagBuy) { if(impuls = 1) { gc.OpenBuyPosition(lot_b,Ask_,Ask_-SL*_Point,0); SendMail(_Symbol + " Новая позиция", _Symbol + " Сигнал_Покупка_Вход, Период: " + GetNameTF()); flagBuy =false; } } } // if(ob>0 && flagBuy == true) // { // gc.CloseBuyPartial(_Symbol,2); // flagBuy = false; // } // // if(os > 0 && flagSell == true) // { // gc.CloseSellPartial(_Symbol,2); // Comment("Частичное закрытие"); // flagSell = false; // } } //Далее идут функции //+------------------------------------------------------------------+ int Impuls_signal() { if(MA[1] > MA[2] && MACD[1] > MACD[2]) return 1; // MA и MACD растут if(MA[1] < MA[2] && MACD[1] < MACD[2]) return -1; // MA и MACD падают if((MA[1] > MA[2] && MACD[1] < MACD[2]) || (MA[1] < MA[2] && MACD[1] > MACD[2])) return 2; // MA и MACD идут в разных направлениях - свеча i-1 if((MA[1] > MA[2] && MA[2] > MA[3] && MACD[1] < MACD[2] && MACD[2] < MACD[3]) || (MA[1] < MA[2] && MA[2] < MA[3] && MACD[1] > MACD[2] && MACD[2] > MACD[3])) return 3; // MA и MACD идут в разных направлениях - свеча i-1 и i-2) else return 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Impuls_signal_TREND() { if(MA_second[0] > MA_second[1] && MACD_second[0] > MACD_second[1]) return 1; // MA и MACD растут if(MA_second[0] < MA_second[1] && MACD_second[0] < MACD_second[1]) return -1; // MA и MACD падают if((MA_second[0] > MA_second[1] && MACD_second[0] < MACD_second[1]) || (MA_second[0] < MA_second[1] && MACD_second[0] > MACD_second[1])) return 2; // MA и MACD идут в разных направлениях - свеча i-0 else return 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double DeltaPos() // находит кол-во пунктов от цены открытия до текущей цены { double Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); double price = 0; for(int i = 0; i < PositionsTotal(); i++) { a_position.SelectByIndex(i); if(a_position.Symbol() == _Symbol && a_position.Magic() == Magic) { price = a_position.PriceOpen(); break; } } return MathAbs(Bid - price); } //+------------------------------------------------------------------+