Код, который компилируется, но не создает ex4 файла.

 

Гонял этот эксп прошлой версии. Есть глюки, но и рациональное зерно есть. Мне прислали новую версию. Проблема в том, что после компиляции без ошибок не создается ex4 файл. Помогите понять что к чему.

//+------------------------------------------------------------------+
//|     Farhad.mq4 |
//|     Copyright © 2006, Farhad Farshad |
//|     https://www.mql5.com/go?link=http://www.rahbord-investment.com/
//|     https://www.mql5.com/go?link=http://farhadfarshad.com/
//|     This EA is optimized to work on
//|     GBP/JPY ... if you want the optimized 
//|     EA s for any currency pair please
//|     mail me at: info@farhadfarshad.Com
//|     This is the first version of this EA. If
//|     you want the second edition (Farhad2.mq4) 
//|     with considerably better performance mail me.
//
//|     Enjoy a better automatic investment:) with at least 70% a month.
//|
//| Modified by Robert Hill to allow optimization for different currency pairs
//+-----------------------------------------------------------------+
#property copyright "Copyright © 2006, Farhad Farshad"
#property link      "https://www.mql5.com/go?link=http://www.rahbord-investment.com/"
#include <stdlib.mqh>
 
extern bool AccountIsMini = false;       // Change to true if trading mini account
extern bool MoneyManagement = false;     // Change to false to shutdown money management controls.
                                         // Lots = 1 will be in effect and only 1 lot will be open regardless of equity.
extern double TradeSizePercent = 5;      // Change to whatever percent of equity you wish to risk.
extern double Lots         = 1;           // you can change the lot but be aware of margin. Its better to trade with 1/4 of your capital. 
extern double MaxLots = 100;
 
//+---------------------------------------------------+
//|Money Management                                   |
//+---------------------------------------------------+
//extern double stopLoss     = 0;             // do not use s/l at all. Take it easy man. I'll guarantee your profit :)
extern int StopLossType = 1;           // 1 standard StopLoss, 2 pSar, 3 ...         
extern double StopLoss = 10;           // Maximum pips willing to lose per position.
extern double TrailingStop = 8;        // Change to whatever number of pips you wish to trail your position with.
extern bool UseTrailingStop = true;
extern int TrailingStopType = 2;        // Type 1 moves stop immediately, Type 2 waits til value of TS is reached
extern double FirstMove = 20;       // Type 3  first level pip gain
extern double TrailingStop1 = 20;       // Move Stop to Breakeven
extern double SecondMove = 30;       // Type 3 second level pip gain
extern double TrailingStop2 = 20;       // Move stop to lock is profit
extern double ThirdMove = 40;       // type 3 third level pip gain
extern double TrailingStop3 = 20;       // Move stop and trail from there
extern int TakeProfitType = 1;       // 1 standard TakeProfit, 2 use support/resistance, 3 use fib...
extern int TakeProfit = 10;          // Maximum profit level achieved. recomended  no more than 20
extern double MarginCutoff = 300;    // Expert will stop trading if equity level decreases to that level.
extern int Slippage = 3  ;           // Possible fix for not getting closed Could be higher with some brokers    
extern color clOpenBuy = Green;  //Different colors for different positions
extern color clOpenSell = Red;  //Different colors for different positions
//+---------------------------------------------------+
//|Indicator Variables                                |
//| Change these to try your own system               |
//| or add more if you like                           |
//+---------------------------------------------------+
//Mode : 0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA
//Price : 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
// All settings are the defaults from Farhad version 1
extern bool UseMACD = true;
extern int MACD_Price = 1;
 
extern bool UseMA_Cross = false;
extern int MA_SlowPeriod = 21;
extern int MA_FastPeriod = 2;
extern int MA_Shift = 1;
extern int MA_Mode = 2;
extern int MA_Price = 5;
 
extern bool UseMomentum = true;
extern int MomentumPeriod = 14;
extern int MomentumPrice = 1;
extern double MomentumHigh = 100;
extern double MomentumLow = 100;
 
extern bool UsePSAR = true;
 
extern bool UseStochLevel = true;
extern int Stoch_Mode = 0;
extern int StochPrice = 0;   // 0, 1
extern double StochHigh = 60;
extern double StochLow = 35;
 
extnt>=MomentumLow) return (false);
}   
 
   if (UseMA_Cross)
   {
      if (MA_Mode == 4)
      {
        maLongCurrent = LSMA(MA_SlowPeriod,MA_Price,SignalTimeFrame,SignalCandle);
//        maLongPrevious = LSMA(MA_SlowPeriod,MA_Price,SignalTimeFrame,SignalCandle+1);
        maShortCurrent = LSMA(MA_FastPeriod,MA_Price,SignalTimeFrame,SignalCandle);
//        maShortPrevious = LSMA(MA_FastPeriod,MA_Price,SignalTimeFrame,SignalCandle+1);
      }
      else
      {
        maLongCurrent       = iMA(NULL,SignalTimeFrame,MA_SlowPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle); 
//        maLongPrevious      = iMA(NULL,SignalTimeFrame,MA_SlowPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle+1); 
        maShortCurrent      = iMA(NULL,SignalTimeFrame,MA_FastPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle); 
//        maShortPrevious     = iMA(NULL,SignalTimeFrame,MA_FastPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle+1); 
      }
// Check if MA Cross and separation is showing a sell so do not take a buy
      if (maShortCurrent <= maLongCurrent) return(false);
   }
 
   if (UseMAHighLow)
   {
      if (MA_HL_Mode == 4)
      {
        faEMA1 = LSMA(MA_HL_Period,MA_HL_BuyPrice,SignalTimeFrame,SignalCandle);
      }
      else
      {
         faEMA1=iMA(NULL,SignalTimeFrame,MA_HL_Period,0,MA_HL_Mode,MA_HL_BuyPrice,SignalCandle);
      }
      lowCurrent = iLow(NULL,SignalTimeFrame,SignalCandle);      //Low Price Current
      if (lowCurrent<=faEMA1) return(false);
 
   }
   
   
//}
   // Check for BUY, SELL, and CLOSE signal
//   isBuying  = (sarCurrent<=Ask && sarPrevious>sarCurrent && momCurrent<MomentumLow && macdHistCurrent<macdSignalCurrent && stochHistCurrent<StochLow);
 
// If we get this far all rules are met
   
   return (true);
}
  
 
//+------------------------------------------------------------------+
//| CheckEntryCondition                                              |
//| Check if rules are met for open of trade                         |
//+------------------------------------------------------------------+
bool CheckEntryConditionSELL()
{
   
//   calculateIndicators();                      // Calculate indicators' value
// Moved code here for faster running
// Check each rule for false for faster return
 
// commented out what is not used
   
//void calculateIndicators() {    // Calculate indicators' value   
 
   if (UseMACD)
   {
// Check MACD Rules
 
      macdHistCurrent     = iMACD(NULL,SignalTimeFrame,12,26,9,MACD_Price,MODE_MAIN,SignalCandle);   
//   macdHistPrevious    = iMACD(NULL,SignalTimeFrame,12,26,9,MACD_Price,MODE_MAIN,SignalCandle+1);   
      macdSignalCurrent   = iMACD(NULL,SignalTimeFrame,12,26,9,MACD_Price,MODE_SIGNAL,SignalCandle); 
//   macdSignalPrevious  = iMACD(NULL,SignalTimeFrame,12,26,9,MACD_Price,MODE_SIGNAL,SignalCandle+1); 
      if (macdHistCurrent<=macdSignalCurrent) return (false);
   }
 
// Check Stochastic rules
 
   
   if (UseStochLevel)
   {
      stochHistCurrent    = iStochastic(NULL,SignalTimeFrame,5,3,3,Stoch_Mode,StochPrice,MODE_MAIN,SignalCandle);
      if (stochHistCurrent<=StochHigh) return(false);
   }
   if (UseStochCross)
   {
      stochHistCurrent    = iStochastic(NULL,SignalTimeFrame,5,3,3,Stoch_Mode,StochPrice,MODE_MAIN,SignalCandle);
      stochHistPrevious   = iStochastic(NULL,SignalTimeFrame,5,3,3,Stoch_Mode,StochPrice,MODE_MAIN,SignalCandle+1);
      stochSignalCurrent  = iStochastic(NULL,SignalTimeFrame,5,3,3,Stoch_Mode,StochPrice,MODE_SIGNAL,SignalCandle);
      stochSignalPrevious = iStochastic(NULL,SignalTimeFrame,5,3,3,Stoch_Mode,StochPrice,MODE_SIGNAL,SignalCandle+1);
      if (stochHistCurrent <= StochHigh) return(false);
      if (stochSignalCurrent <= stochHistCurrent) return(false);
      if (stochSignalPrevious >= stochHistPrevious) return(false);
   }
   
   
   if (UsePSAR)
   {
// Check Paraboloc SAR rules
 
      sarCurrent          = iSAR(NULL,SignalTimeFrame,0.02,0.2,SignalCandle);           // Parabolic Sar Current
      if (sarCurrent< Bid) return (false);
 
      sarPrevious         = iSAR(NULL,SignalTimeFrame,0.02,0.2,SignalCandle+1);         //Parabolic Sar Previous
      if (sarPrevious>=sarCurrent) return (false);
   }
 
   if (UseMomentum)
   {
   
// Check Momentum rules
 
      momCurrent          = iMomentum(NULL,SignalTimeFrame,MomentumPeriod,PRICE_OPEN,SignalCandle); // Momentum Current
      momPrevious         = iMomentum(NULL,SignalTimeFrame,MomentumPeriod,PRICE_OPEN,SignalCandle+1); // Momentum Previous
      if(momCurrent<=MomentumHigh) return (false);
   }
 
   if (UseMA_Cross)
   {
      if (MA_Mode == 4)
      {
        maLongCurrent = LSMA(MA_SlowPeriod,MA_Price,SignalTimeFrame,SignalCandle);
//        maLongPrevious = LSMA(MA_SlowPeriod,MA_Price,SignalTimeFrame,SignalCandle+1);
        maShortCurrent = LSMA(MA_FastPeriod,MA_Price,SignalTimeFrame,SignalCandle);
//        maShortPrevious = LSMA(MA_FastPeriod,MA_Price,SignalTimeFrame,SignalCandle+1);
      }
      else
      {
        maLongCurrent       = iMA(NULL,SignalTimeFrame,MA_SlowPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle); 
//        maLongPrevious      = iMA(NULL,SignalTimeFrame,MA_SlowPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle+1); 
        maShortCurrent      = iMA(NULL,SignalTimeFrame,MA_FastPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle); 
//        maShortPrevious     = iMA(NULL,SignalTimeFrame,MA_FastPeriod,MA_Shift,MA_Mode,MA_Price,SignalCandle+1); 
      }
      
// Check if MA Cross and separation is showing a buy so do not take a sell
 
      if (maShortCurrent >= maLongCurrent) return(false);
  }
 
   if (UseMAHighLow)
   {
      if (MA_HL_Mode == 4)
      {
        faEMA3 = LSMA(MA_HL_Period,MA_HL_SellPrice,SignalTimeFrame,SignalCandle);
      }
      else
      {
        faEMA3=iMA(NULL,SignalTimeFrame,MA_HL_Period,0,MA_HL_Mode,MA_HL_SellPrice,SignalCandle);
      }
      highCurrent = iHigh(NULL,SignalTimeFrame,SignalCandle);     //High price Current
 
      if (highCurrent>=faEMA3) return(false);
   }
   
   // Check for BUY, SELL, and CLOSE signal
//   isSelling = (sarCurrent>=Bid && sarPrevious<sarCurrent && momCurrent>MomentumHigh && macdHistCurrent>macdSignalCurrent && stochHistCurrent>StochHigh);
 
// If we get this far all rules are met
   
   return (true);
}
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   
// Check if any open positions
 
   HandleOpenPositions();
   TradesInThisSymbol = openPositions();
   
//+------------------------------------------------------------------+
//| Check if OK to make new trades                                   |
//+------------------------------------------------------------------+
// Only allow 1 trade per Symbol
 
   if(TradesInThisSymbol > 0) {
     return(0);}
     
   // If there is no open trade for this pair and this EA
   if(AccountFreeMargin() < MarginCutoff) {
         Print("Not enough money to trade Strategy:", ExpertName);
         return(0);
   }
 
   lotMM = GetLots();
   
//   if(isBuying && !isSelling && !isBuyClosing && !isSellClosing) {  // Check for BUY entry signal
   if ( CheckEntryConditionBUY() )
   {
        OpenBuyOrder();
      
   }
   
// if(isSelling && !isBuying && !isBuyClosing && !isSellClosing) {  // Check for SELL entry signal
 
   if (CheckEntryConditionSELL())
   {
         OpenSellOrder();
        
   }
   return(0);
}
 
 
//+------------------------------------------------------------------+
//| OpenBuyOrder                                                     |
//| If Stop Loss or TakeProfit are used the values are calculated    |
//| for each trade                                                   |
//+------------------------------------------------------------------+
void OpenBuyOrder()
{
   int err,ticket;
   double myStopLoss = 0, myTakeProfit = 0;
   
   myStopLoss = GetStopLossBuy(StopLossType);
   myTakeProfit = GetTakeProfitBuy(TakeProfitType);
   ticket=OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,myStopLoss,myTakeProfit,ExpertName,MagicNumber,0,clOpenBuy); 
   prtAlert ("FarhadHill : OpenBuy for " + DoubleToStr(Ask,4));
   if(ticket<=0)
   {
      err = GetLastError();
      Print("Error opening BUY order [" + ExpertName + "]: (" + err + ") " + ErrorDescription(err)); 
   }
}
 
 
//+------------------------------------------------------------------+
//| OpenSellOrder                                                    |
//| If Stop Loss or TakeProfit are used the values are calculated    |
//| for each trade                                                   |
//+------------------------------------------------------------------+
void OpenSellOrder()
{
   int err, ticket;
   double myStopLoss = 0, myTakeProfit = 0;
   
   myStopLoss = GetStopLossSell(StopLossType);
   myTakeProfit = GetTakeProfitSell(TakeProfitType);
   if (TakeProfit > 0) myTakeProfit = Bid - TakeProfit * Point;
   ticket=OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,myStopLoss,myTakeProfit,ExpertName,MagicNumber,0,clOpenSell); 
   prtAlert("FarhadHill : OpenSell for " + DoubleToStr(Bid,4));
   if(ticket<=0)
   {
      err = GetLastError();
      Print("Error opening Sell order [" + ExpertName + "]: (" + err + ") " + ErrorDescription(err)); 
   }
}
 
double GetTakeProfitBuy(int which)
{
  double TP;
  
  if (which == 1)
  {
   TP = 0;
   if (TakeProfit > 0) TP = Ask+TakeProfit*Point;
  }
  
/*
  Code here for later types of TakeProfit
  
  switch(which)
  {
  case 1 : TP = 0;
           if (TakeProfit > 0) TP = Ask+TakeProfit*Point;
           break;
  case 2 : TP = 0;
           if (TakeProfit > 0) TP = CalculateNextResistance();
           break;
  }
*/
  return(TP);
} 
 
double GetTakeProfitSell(int which)
{
  double TP;
  
  if (which == 1)
  {
   TP = 0;
   if (TakeProfit > 0) TP = Bid-TakeProfit*Point;
  }
  
/*
  Code here for later types of TakeProfit
  
  switch(which)
  {
  case 1 : TP = 0;
           if (TakeProfit > 0) TP = Bid-TakeProfit*Point;
           break;
  case 2 : TP = 0;
           if (TakeProfit > 0) TP = CalculateNextSupport();
           break;
  }
*/
  return(TP);
} 
 
double GetStopLossBuy(int which)
{
  double SL;
  
  
  switch(which)
  {
  case 1 : SL = 0;
           if ( StopLoss > 0 ) SL = Ask - StopLoss * Point ;
           break;
  case 2 : SL = iSAR(NULL,SignalTimeFrame,0.02,0.2,SignalCandle);           // Parabolic Sar Current
           break;
 
//  case 3 : SL = CalculateNextResistance();
//           break;
  }
  return(SL);
}
 
double GetStopLossSell(int which)
{
  double SL;
  
  if (which == 1)
  {
   SL = 0;
   </spa
 

разберёмся

кстати, вместо тега code необходимо использовать специальную вставку. Кнопка с надлисью MQL на панели инструментов редактора

 
Строка 161 символ 7 псалом 4. Тут же не весь код... Как он может компилится?
 
Пропущен кусок исходного текста

extern bool UseStochLevel = true;
extern int Stoch_Mode = 0;
extern int StochPrice = 0;   // 0, 1
extern double StochHigh = 60;
extern double StochLow = 35;
 
extnt>=MomentumLow) return (false);
}   
 
   if (UseMA_Cross)
   {
      if (MA_Mode == 4)
      {
        maLongCurrent = LSMA(MA_SlowPeriod,MA_Price,SignalTimeFrame,SignalCandle);

Между StochLow=35; и extnt>=MomentumLow

 
maloma, Вы представите весь исходный текст?

Если есть проблема с компилятором, её надо обязательно решить
 

А у тебя Виста?

 
maloma писал (а) >>

Гонял этот эксп прошлой версии. Есть глюки, но и рациональное зерно есть. Мне прислали новую версию. Проблема в том, что после компиляции без ошибок не создается ex4 файл. Помогите понять что к чему.

В \experts перенесли?

 
Возможно, файл создается в Users\YourName\AppData\Local\VirtualStore\Program Files\...
 

у меня такое било,что файл не компилировался.. оказалось.. банально нехватает места.. (логи длинние били) -)

 
maryan.dirtyn >>:

у меня такое било,что файл не компилировался.. оказалось.. банально нехватает места.. (логи длинние били) -)

у меня тоже так было.

как я думаю в папке experts было слишком много экспертов, после удаления части скомпилировался нужный.

 

Компилированный файл всегда лежит рядом с исходником.

Если исходник открывается из другой директории, то и компилированный файл должен лежать в этой же директории. Работать в МТ4 он не будет, пока его не будет в соответствующей папке МТ4.

Причина обращения: