сорри, вопрос снят протупил с переменными, надо сказать определение ошибок компилятором, реализовано в МТ не самым лучшим образом, иногда уходит куча времени на их поиск.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//+------------------------------------------------------------------+ //| Expert.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #define MAGIC 916883 extern double lStopLoss = 20; extern double sStopLoss = 20; extern double lTakeProfit = 50; extern double sTakeProfit = 50; extern double lTrailingStop = 20; extern double sTrailingStop = 15; extern double ADX_Period = 30; extern double RSIBUY = 70; extern double RSISELL = 30; extern double RSICLOSE = 18; extern double MACDH4FastMa = 8; extern double MACDH4SlowMa = 13; extern double MACDH4SMa = 5; extern double BULLSD1 = 14; extern double BEARSD1 = 14; extern double Ma1 = 12; extern double Ma2 = 24; extern double Ma3 = 36; extern string s1 = "Варианты"; extern bool UseMacdOpenH4 = true; extern bool UseMacdCloseH4 = true; extern string s2 = " "; extern int Slippage = 5; extern bool UseHourTrade = True; extern int FromHourTrade = 0; extern int ToHourTrade = 0; extern bool UseSound = True; extern string NameFileSound = "alert.wav"; extern double Lots = 0.10; extern string _Parameters_b_Lots = "Параметры модуля расчёта лота"; extern int LotsWayChoice = 1; // Способ выбора рабочего лота: // 0-фиксированный, // 1-процент от депозита, // 2-фракционно-пропорциональный, // 3-фракционно-фиксированный, extern int LotsPercent=40; // Процент от депозита extern int LotsDeltaDepo=500; // Коэффициент приращения депозита extern int LotsDepoForOne=500; // Размер депозита для одного минилота extern int LotsMax=10000; // Максимальное количество минилотов extern color clOpenBuy = Blue; extern color clCloseBuy = Aqua; extern color clOpenSell = Red; extern color clCloseSell = Violet; extern color clModiBuy = Blue; extern color clModiSell = Red; extern string Name_Expert = "ADX4"; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double diMACD0H4, diMA01, diMA02, diMA03, diMA11, diMA12, diMA13, diMA21, diMA22, diMA23, diRSI2; double diRSI3, diRSI4, diRSI5, diRSI6, diRSI7, diRSI8, diRSI9, diRSI10; double diRSI11, diRSI12, diBullsPowerD0, diBearsPowerD0, diMACD1H4, diMACD2H4; double diMACD3H4, diADX31P, diADX32M, diADX33C, diADX21P, diADX22M, diADX23C; double diADX11P, diADX12M, diADX13C, diADX01P, diADX02M, diADX03C, diRSI1; string op; double OpenBuyPos, OpenSellPos, CloseBuy, CloseSell; int start(){ if (UseHourTrade){ if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) { Comment("Time for trade has not come else! "); return(0); } else Comment(""); }else Comment(""); if(Bars<100){ Print("bars less than 100 "); return(0); } if(lStopLoss<10){ Print("StopLoss less than 10 "); return(0); } if(lTakeProfit<10){ Print("TakeProfit less than 10 "); return(0); } if(sStopLoss<10){ Print("StopLoss less than 10 "); return(0); } if(sTakeProfit<10){ Print("TakeProfit less than 10 "); return(0); } diBullsPowerD0 =iBullsPower(NULL,1440,BULLSD1,PRICE_OPEN,0); diBearsPowerD0 =iBearsPower(NULL,1440,BEARSD1,PRICE_OPEN,0); diADX31P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,3); diADX32M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,3); diADX33C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,3); diADX21P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,2); diADX22M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,2); diADX23C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,2); diADX11P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,1); diADX12M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,1); diADX13C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,1); diADX01P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,0); diADX02M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,0); diADX03C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,0); diRSI1 = iRSI(NULL,240,14,PRICE_OPEN,0); //Filter diRSI2 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,0);//---------------------------------- diRSI3 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,1);//Close filter diRSI4 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,2); diRSI5 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,3); diRSI6 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,4); diRSI7 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,5); diRSI8 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,6); diRSI9 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,7); diRSI10 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,8); diRSI11 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,9); diRSI12 = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,10);//--------------------------------- diMACD0H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,0); diMACD1H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,1); diMACD2H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,2); diMACD3H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,3); diMA01 =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,0); diMA02 =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,0); diMA03 =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,0); diMA11 =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,1); diMA12 =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,1); diMA13 =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,1); diMA21 =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,2); diMA22 =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,2); diMA23 =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,2); if(AccountFreeMargin()<(500*Lots)){ Print("сливать больше нефиг, осталось: ", AccountFreeMargin()); return(0); } if (!ExistPositions()){ op ="Buy"; OpenBuyPos=GetPermission(op); if (OpenBuyPos==1){ OpenBuy(); return(0); } op="Sell"; OpenSellPos=GetPermission(op); if(OpenSellPos==1){ OpenSell(); return(0); } } if (ExistPositions()){ if(OrderType()==OP_BUY){ op="Buy" CloseBuy = GetPermissonToClose(op); if (CloseBuy==1){ CloseBuy(); return(0); } } if(OrderType()==OP_SELL){ op="Sell"; CloseSell = GetPermissonToClose(op); if (CloseSell==1){ CloseSell(); return(0); } } } TrailingPositionsBuy(lTrailingStop); TrailingPositionsSell(sTrailingStop); return (0); } bool ExistPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { return(True); } } } return(false); } void TrailingPositionsBuy(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { if (Bid-OrderOpenPrice()>trailingStop*Point) { if (OrderStopLoss()<Bid-trailingStop*Point){ ModifyStopLoss(Bid-trailingStop*Point); } } } } } } } void TrailingPositionsSell(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_SELL) { if (OrderOpenPrice()-Ask>trailingStop*Point) { if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0){ ModifyStopLoss(Ask+trailingStop*Point); } } } } } } } void ModifyStopLoss(double ldStopLoss) { bool fm; fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); if (fm && UseSound) PlaySound(NameFileSound); } void CloseSell() { bool fc; fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); if (fc && UseSound) PlaySound(NameFileSound); } void CloseBuy() { bool fc; fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); if (fc && UseSound) PlaySound(NameFileSound); } void OpenBuy() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossBuy(); ldTake = GetTakeProfitBuy(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); if (UseSound) PlaySound(NameFileSound); } void OpenSell() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossSell(); ldTake = GetTakeProfitSell(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); if (UseSound) PlaySound(NameFileSound); } string GetCommentForOrder() { return(Name_Expert); } double GetSizeLot() { double dLot; if (LotsWayChoice==0) dLot=Lots; // фиксированный процент от депозита if (LotsWayChoice==1) { dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10; } // фракционно-пропорциональный if (LotsWayChoice==2) { int k=LotsDepoForOne; for (double i=2; i<=LotsMax; i++) { k=k+i*LotsDeltaDepo; if (k>AccountFreeMargin()) { dLot=(i-1)/10; break; } } } // фракционно-фиксированный if (LotsWayChoice==3) { dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10; } if (dLot<0.1) dLot=0.1; if (dLot>LotsMax) dLot=LotsMax; return(dLot); } double GetStopLossBuy() { return (Bid-lStopLoss*Point);} double GetStopLossSell() { return(Ask+sStopLoss*Point); } double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); } double GetTakeProfitSell() { return(Bid-sTakeProfit*Point);} //*********************************************************************************************** double GetPermission(string operation){ if (operation=="Buy"){ if (diBullsPowerD0>0.1){ if (diADX01P>diADX02M&&(diADX11P<=diADX12M||diADX21P<=diADX22M||diADX31P<=diADX32M)){ if (diMACD0H4>diMACD1H4&&diMACD1H4>diMACD2H4&&diMACD2H4>diMACD3H4){ if (diRSI1<RSIBUY){ return (1); } } } } } if (operation=="Sell"){ if (diBearsPowerD0<-0.1){ if (diADX01P<diADX02M && (diADX11P>=diADX12M||diADX21P>=diADX22M||diADX31P>=diADX32M)){ if (diMACD0H4<diMACD1H4 && diMACD1H4<diMACD2H4 && diMACD2H4<diMACD3H4){ if (diRSI1>RSISELL){ return (1); } } } } } } // //************************************************************************************************** double GetPermissonToClose(string operation){ if (operation=="Buy"); if (diMACD0H4<diMACD1H4&&diMACD1H4<diMACD2H4&&diMACD2H4<diMACD3H4&&(diRSI2>70||diRSI3>70||diRSI4>70||diRSI5>70||diRSI6>70||diRSI7>70||diRSI8>70||diRSI9>70||diRSI10>70||diRSI11>70||diRSI12>70)){ return (1); else if ((diMA01>diMA02&&diMA01>diMA03)&&(diMA11<diMA12&&diMA11<diMA13)||(diMA21<diMA22&&diMA21<diMA23)); return (1); else if (diADX01P<diADX02M && (diADX11P>=diADX12M||diADX21P>=diADX22M||diADX31P>=diADX32M)){//diADX14<diADX15 && diADX16>=diADX17 && diADX18>diADX19 && diADX20>15 return (1); else return (0); } } if (operation=="Sell"){ if (diMACD0H4>diMACD1H4&&diMACD1H4>diMACD2H4&&diMACD2H4>diMACD3H4&&(diRSI2<30||diRSI3<30||diRSI4<30||diRSI5<30||diRSI6<30||diRSI7<30||diRSI8<30||diRSI9<30||diRSI10<30||diRSI11<30||diRSI12<30)){ return (1); else if (diADX01P>diADX02M && (diADX11P<=diADX12M||diADX21P<=diADX22M||diADX31P<=diADX32M)){ return (1); else if (diADX01P>diADX02M && diADX11P>diADX12M){ return (1); else return(0); } } } //************************************************************************************