//--------------------------------------------------------------------------------------------
#include <r.h>
//--------------------------------------------------------------------------------------------
// overwrite existing neural() from r.h
//--------------------------------------------------------------------------------------------

var neural(int mode, int model, int numSignals, void* Data) {
	
	//////////////////////////////////////////////////
	
	// if(!wait(0)) return(0.0); // >>> this creates a delay !!!
	
	//////////////////////////////////////////////////

	if(mode == NEURAL_INIT)         {
		
		//////////////////////////////////////////////////
		
		if(!Rstart(NULL,2)) return(0.0);

		return(1.0);
		
		//////////////////////////////////////////////////
		
	}	
	else if(mode == NEURAL_TRAIN)    {return(1.0);}		// <- this is empty!!!	
	else if(mode == NEURAL_SAVE)     {return(1.0);}
	else if(mode == NEURAL_LOAD)     {return(1.0);}	
	else if(mode == NEURAL_PREDICT)  {return(100.0);} 	// <- also empty!!!	
	else if(mode == NEURAL_EXIT)     {return(1.0);}
	
	//////////////////////////////////////////////////
	
	return(0.0);
	
	//////////////////////////////////////////////////
}

//--------------------------------------------------------------------------------------------

#define MY_ALIST 	"Assets\\oanda.csv"
#define MY_ASSETS "AUDUSD","EURUSD"
#define MY_ALGOS 	"AL0","AL1"
#define INP_LEN 	400

//--------------------------------------------------------------------------------------------

var  INP[INP_LEN];

var  GTC = 0;

bool TEST_NO_ADVISE = FALSE;

//--------------------------------------------------------------------------------------------

function run() {

	//////////////////////////////////////////////////
	
   StartDate      = 2016;
   EndDate        = 2018;
	BarPeriod      = 15;
	NumWFOCycles   = 10;
	LookBack       = 220;	
	DataSplit      = 70;
	DataHorizon    = 30;	
	Verbose        = 7;
	
	//////////////////////////////////////////////////
	
	set(RULES);
	set(LOGFILE);
	
	//////////////////////////////////////////////////
	
	var avl = 0.0;
	var avs = 0.0;
	
	//////////////////////////////////////////////////
		
	assetList(MY_ALIST);
	
	//////////////////////////////////////////////////
	
	while(asset(loop(MY_ASSETS))) {
					
		//////////////////////////////////////////////////

		while(algo(loop(MY_ALGOS))) {
									
			//////////////////////////////////////////////////
			
			if(TEST_NO_ADVISE) {
				
				//////////////////////////////////////////////////
				
				avl = 100.0;
				avs = 100.0;
				
				//////////////////////////////////////////////////
				
			} else {
				
				//////////////////////////////////////////////////			
				
				avl = adviseLong (NEURAL,666,INP,INP_LEN);
				avs = adviseShort(NEURAL,666,INP,INP_LEN);
				
				//////////////////////////////////////////////////
				
			}
			
			//////////////////////////////////////////////////
						
		}

		//////////////////////////////////////////////////
		
	}
	
	//////////////////////////////////////////////////
	
	if(Bar % 1000 == 0) {
		
		//////////////////////////////////////////////////		
		
		if(Bar == 0) GTC = timer();
		
		//////////////////////////////////////////////////
				
		if(GTC > 0) watch(strf("%s %s | Bars %i | Bar %i | %.2f ms",Asset,Algo,NumBars,Bar,(timer()-GTC)));
		
		//////////////////////////////////////////////////
		
		GTC = timer();
		
		//////////////////////////////////////////////////

	}
	
	//////////////////////////////////////////////////
	
	if(is(EXITRUN)) watch("done...");

	//////////////////////////////////////////////////

}

//--------------------------------------------------------------------------------------------