NumOpenLong / NumOpenShort working for phantom?

Posted By: dusktrader

NumOpenLong / NumOpenShort working for phantom? - 02/24/14 16:25

I'm checking for changes in NumOpenLong and NumOpenShort, and it seems that they are not changing with phantom-trade changes.

Is it possible that this is a glitch? I do see them changing for real trades, just not for phantom.

Thanks
Posted By: dusktrader

Re: NumOpenLong / NumOpenShort working for phantom? - 02/24/14 17:09

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...
Posted By: jcl

Re: NumOpenLong / NumOpenShort working for phantom? - 02/26/14 07:13

The variables beginning with "Num" are int, as they are used to count something. Variables ending with -Long / -Short include phantom trades, variables ending with -Total do not.

Your script contains a mistake:

numOpenLastCheck = NumOpenLong+NumOpenShort

This is wrong. Correct would be:

numOpenLastCheck = 0; // before the loop
...
numOpenLastCheck += NumOpenLong+NumOpenShort; // inside the loop

and the else-if logic must be likewise corrected.
Posted By: dusktrader

Re: NumOpenLong / NumOpenShort working for phantom? - 02/27/14 16:53

There is definitely something weird going on, although I can't quite put my finger on it yet. It very-likely is my fault in bad coding... but it seems that Zorro should not do any of the following:

* return 0 for NumOpenLong, NumOpenShort or NumOpenTotal when any trades are actually open
* return a non-agreeing figure between NumOpenLong/NumOpenShort and NumOpenTotal (for example, NumOpenLong=1 but NumOpenTotal=0)

I'm trying to create a repeatable/simplified example for you to see the issue I'm seeing.
Posted By: DdlV

Re: NumOpenLong / NumOpenShort working for phantom? - 02/27/14 18:54

Hi dusktrader. Please see jcl's reply above. Phantom trades are in Long & Short, but not Total. FWIW, I agree that Long, Short, & Total should all be consistent and either all include or all exclude Phantoms - there should be other variables that do the reverse (exclude/include Phantoms)...

(This bit me once before also... Unless you're seeing a different problem?)
Posted By: dusktrader

Re: NumOpenLong / NumOpenShort working for phantom? - 02/27/14 19:23

Oh yes, I knew that about phantom trades but I had forgotten in trying to track down this issue.

There is definitely some issue, but perhaps then only the first bullet point above: returning 0 for NumOpenLong, NumOpenShort, NumOpenTotal when in fact there are live trades open.

I'm having trouble assembling a simplified example to demonstrate the problem, but I'm sure I'll get one soon. (Either that, or I'll figure out what I'm doing wrong to cause the issue!!)
© 2024 lite-C Forums