Actually now I'm not sure... I just watched both a live trade and phantom trade not trigger my logic here. Prior to using NumOpenLong+NumOpenShort I was using NumOpenTotal and the same logic was working for real trades. I wanted to expand that to work also for phantom trades.

Can you spot any reason why the else if section would not be triggering:
Code:
function continueStats(string filename)
{
	if(!is(TRADEMODE)) return; //only load/save state info when live trading	
	static int numOpenLastCheck; //track changes in trade open/closes
	char path[100]; //full path to parameter .ini file

	if(is(INITRUN)) //load previously saved trade stats (if any) upon Zorro start
	{
		numOpenLastCheck=0;
		char param[30]; //asset-labeled parameter .ini file
		char fcontent[2500]; //file content from parameter .ini file
		sprintf(path,"Strategy\\%s",filename);
		if(!file_date(path)) msg("#>>WARNING<< no stats file found!\nThis is normal if this is the very first run of a new strategy");
		string fcontent = file_content(path);
		
		//load from disk current state info for each asset
		ASSETLOOP
		{
			sprintf(param,"%s_NumWinLong",Asset);
			NumWinLong = strvar(fcontent,param);
	
			sprintf(param,"%s_NumWinShort",Asset);
			NumWinShort = strvar(fcontent,param);	
	
			sprintf(param,"%s_NumLossLong",Asset);
			NumLossLong = strvar(fcontent,param);

			sprintf(param,"%s_NumLossShort",Asset);
			NumLossShort = strvar(fcontent,param);
		
			sprintf(param,"%s_WinLong",Asset);
			WinLong = strvar(fcontent,param);

			sprintf(param,"%s_WinShort",Asset);
			WinShort = strvar(fcontent,param);

			sprintf(param,"%s_LossLong",Asset);
			LossLong = strvar(fcontent,param);

			sprintf(param,"%s_LossShort",Asset);
			LossShort = strvar(fcontent,param);
		}
		printf("\nRead trade stats from disk");
	}

	else if((NumOpenLong+NumOpenShort) != numOpenLastCheck) //save stats to disk upon trade count changes
	{
		FILE *out;
		char line[2500], tmp[2500]; //line of data for .ini file
		sprintf(path,"Strategy\\%s",filename);

		if (!(out = fopen(path, "w")))
		{
			printf("\nERROR trying to open file for write:\n%s\n",path);
			return;
		}

		//store to disk current state info for each asset
		ASSETLOOP
		{
			sprintf(line,"%s_NumWinLong = %i\n",Asset,NumWinLong);
			sprintf(tmp,"%s_NumWinShort = %i\n",Asset,NumWinShort);
			strcat(line,tmp);
			sprintf(tmp,"%s_NumLossLong = %i\n",Asset,NumLossLong);
			strcat(line,tmp);
			sprintf(tmp,"%s_NumLossShort = %i\n",Asset,NumLossShort);
			strcat(line,tmp);
			sprintf(tmp,"%s_WinLong = %f\n",Asset,WinLong);
			strcat(line,tmp);
			sprintf(tmp,"%s_WinShort = %f\n",Asset,WinShort);
			strcat(line,tmp);
			sprintf(tmp,"%s_LossLong = %f\n",Asset,LossLong);
			strcat(line,tmp);
			sprintf(tmp,"%s_LossShort = %f\n",Asset,LossShort);
			strcat(line,tmp);
		
			if (!fwrite(line, sizeof(char), strlen(line), out))
			{
				printf("\nWRITE ERROR:\n%s\n",path);
				fclose(out);
				return;
			}
			else printf("\nSaved trade stats to disk");
		}

		fclose(out);
		numOpenLastCheck = NumOpenLong+NumOpenShort; //track changes in real and phantom trades
	}
}



PS: is it possible that NumOpenLong+NumOpenShort is a var, whereas NumOpenTotal would be an int?

PPS: just now I observed the logic work correctly. So I think the issue could be that both a trade opened and a trade closed at once, canceling the count. I should check for changes in both Long and Short separately I think. I'll try that next...

Last edited by dusktrader; 02/24/14 19:30.