int assetHistorySC(string theAsset)
{
if (!Init) return 0;
int barperiod = BarPeriod;
//----------------------------------
// setup start and end dates
//----------------------------------
int M1back = (LookBack*BarPeriod)/(7*60); // days of lback
int DailyLBack = (LookBack+2*UnstablePeriod);
int start = min(ymd(wdate(NOW)-6*365), ymd(dmy(StartDate)-2*ifelse(barperiod<1440,M1back, DailyLBack))); //6 years or more
int end;
string t6Out[100];
if (barperiod<1440) {
sprintf(t6Out,strf("%s%s.t6",History,theAsset));
barperiod = 1;
end = ymd(wdate(NOW)+1); // +1 to get most current M1 bar
}
else {
sprintf(t6Out,"History\\%s.t6",theAsset);
end = ymd(wdate(NOW)-1); // -1 to get up to yesterday
}
//-------------------------------------
// check to see if exiting t6 is in range
//-------------------------------------
if (file_length(t6Out)) {
int records = dataLoad(33,t6Out,7);
int fileStart = ymd(dataVar(33,-1,0));
int fileEnd = ymd(dataVar(33,0,0));
//printf("fileStart=%d fileEnd=%d\n",fileStart, fileEnd);
// if Test or Train, don't download if data in range
if ( (!Live && EndDate<=fileEnd && barperiod==1440)
|| (Live && end<=fileEnd && barperiod==1440)
)
{
printf("\n[%s] historical data up to date... no download\n");
dataNew(33,0,0);
return 0; // range already inside
}
// if not enough data, its probably a newly listed stock/asset with limited history
if (start<fileStart)
printf("\nWARNING: historical data for [%s] may not be early enough\n",theAsset);
// set start to last date in file, to upate to current date
start = fileEnd;
}
printf("Downloading data [%s]... Start=%d End=%d\n", theAsset, start, end);
//----------------------------------
// index symbol conversions
//----------------------------------
if (theAsset == "SPX") theAsset = "$SPX";
if (theAsset == "DJI") theAsset = "$DOWI";
if (theAsset == "INX") theAsset = "$INX";
//----------------------------------
// get data
//----------------------------------
if(once(Init)) connectToSierraChart();
int reqbars = (int) (dmy(end) - dmy(start))*ifelse(barperiod==1440,1,1440); // D1 or M1 data only
printf("SC: items allocated = %d\n",reqbars+10);
T6* myT6=malloc((reqbars+10)*sizeof(T6));
printf("BrokerHistory2 (%s, %d, %d, %i, -1, myT6)\n", theAsset, start, end, barperiod);
int items = BrokerHistory2 (theAsset, dmy(start), dmy(end), barperiod, -1, myT6);
printf("SC: items received = %d\n",items);
if (!items) {
printf("ERROR: No historical data returned from SierraChart... maybe out of data cache range.\n");
free(myT6);
quit("#quit");
}
FILE *fp;
string tempT6 = strf("History\\temp-%s.t6",theAsset);
printf("t6 = %s\n", tempT6);
fp = fopen(tempT6, "wb");
fwrite(myT6 , sizeof(T6), items, fp );
fclose(fp);
free(myT6);
dataLoad(33,tempT6,7); // load it into 33
dataSort(33); // make sure it's sorted
printf("LOADED TEMP\n");
//---------------------------------
// pre-pend to existing t6
//---------------------------------
if (file_length(t6Out)>0) {
printf("Appending to, %s\n", t6Out);
dataLoad(22,t6Out,7);
dataMerge(22,33);
dataSave(22,t6Out);
dataNew(22,0,0);
}
else {
printf("Saving to, %s\n", t6Out);
dataSave(33,t6Out);
dataNew(33,0,0);
}
file_delete(tempT6);
return 0;
}