Variable not initializing properly

 

Hi,

my trendChange variable is howing up as false even though I set it true at the beginning. It never changes during the whole run. This variable is a string but I tried bool too and it only gave me 0 in the printout. What am I doing wrong?

bool     openTrade=false;
int      ticket;
double   current,dayLow,dayHigh,pipsToHigh,pipsToLow;
double   daybefore;
string   trend;
string     trendChange="true";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print("-----------------------------------------------------------");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//----
  daybefore=iClose("GBPJPY",PERIOD_H4,3);
  dayHigh=iClose("GBPJPY",PERIOD_H4,0);
  current=iClose("GBPJPY",PERIOD_H4,0);

  Print(current,"<---curr db--->",daybefore);
  if (current > daybefore)
  {
    
    if (trend=="sell") trendChange="true";
    trend="buy";
    Print("entered buy and tc is ",trendChange);
    
  }    
  else
  {
    if (trend=="buy") trendChange="true";
    trend="sell";
    Print("entered sell and tc is ",trendChange);
    
  }
  
  if (trendChange=="true")
  {
    Print("Trend is ",trend);
    trendChange="false";
  }
 
I just noticed my Journal is showing output starting from Aug 27 when the time for the test was at Aug 24. Is there a limit to how much the journal can display?
 
satsujin:

Hi,

my trendChange variable is howing up as false even though I set it true at the beginning. It never changes during the whole run. This variable is a string but I tried bool too and it only gave me 0 in the printout. What am I doing wrong?


bool     openTrade=false;
int      ticket;
double   current,dayLow,dayHigh,pipsToHigh,pipsToLow;
double   daybefore;
string   trend; // i.e. trend = "";
string     trendChange="true";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print("-----------------------------------------------------------");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//----
  daybefore=iClose("GBPJPY",PERIOD_H4,3);
  dayHigh=iClose("GBPJPY",PERIOD_H4,0);
  current=iClose("GBPJPY",PERIOD_H4,0);

  Print(current,"<---curr db--->",daybefore);
  if (current > daybefore)
  {
    
    if (trend=="sell") trendChange="true"; // skips, trend = ""
    trend="buy";
    Print("entered buy and tc is ",trendChange);
    
  }    
  else
  {
    if (trend=="buy") trendChange="true"; // skip, trend = ""
    trend="sell";
    Print("entered sell and tc is ",trendChange);
    
  }
  
  if (trendChange=="true") // trendChange="true" 
  {
    Print("Trend is ",trend); // outputs "Trend is "
    trendChange="false";  // here is your false, while still trend=""
  }
 
Skipping while trend="" should not be a problem because trend is set to "buy" or "Sell" immediately afterward. Why is the if test for trendChange == true not executing if I have already set it to true above?
 
string   trend; // i.e. trend = "";
Trend is not equal to "" (The empty string) it is an uninitialized string (NULL) Thus your trend== results in error 4008
 
which if()? the if block i set it in is checking if (current > daybefore)....
 
WHRoeder:
Trend is not equal to "" (The empty string) it is an uninitialized string (NULL) Thus your trend== results in error 4008


I have a different MT4. In mine it initializes accordingly to the docs to an empty string and triggers no error.

Variable Initialization .... If no initial value is set explicitly, a numeric variable will be initialized by zero (0) and a string variable will be initialized by an empty line.

 
I think it works now that i set the type to static but I'm getting other errors. How do you debug in strategy tester? the journal doesnt print everything and the log file for a few days worth of info can be a huge number of GB!
Reason: