static ErrorNumber test_one_symbol( TA_UDBase *udb ) { TA_RetCode retCode; TA_AddDataSourceParam param; TA_History *history; ErrorNumber errNumber; TA_HistoryAllocParam histParam; #if 0 /* Get KPN.AS * * Around 9/5/2004 that symbol had a negative dividend returned from Yahoo!. * Un-comment this section of the code to test the TA_INVALID_NEGATIVE_DIVIDEND * return value. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_ONE_SYMBOL; param.info = "KPN.AS"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_KPN_AS_FAILED; } memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.symbol = "KPN.AS"; histParam.field = TA_CLOSE|TA_VOLUME; histParam.period = TA_DAILY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_KPN_AS_FAILED; } TA_HistoryFree( history ); #endif /* Test with MSFT on NASDAQ stock. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_ONE_SYMBOL; param.info = "MSFT"; param.category = "Whatever.US.NASDAQ.STOCK"; param.symbol = "Whatever.MSFT"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_USA_FAILED; } /* Get something from NASDAQ. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.category = "Whatever.US.NASDAQ.STOCK"; histParam.symbol = "Whatever.MSFT"; histParam.field = TA_CLOSE|TA_TIMESTAMP|TA_VOLUME; histParam.period = TA_DAILY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_1_FAILED; } if( history->nbBars < 3000 ) { printf( "Insufficient nbBars returned for MSFT ticker test (%d < 3000)\n", history->nbBars ); return TA_YAHOO_VALUE_1_FAILED; } if( !history->close || !history->timestamp || !history->volume ) { return TA_YAHOO_FIELD_MISSING_1; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Add complete canadian index. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_WEB; param.location = "ca"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_CAN_FAILED; } /* Add NT. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_ONE_SYMBOL; param.info = "NT.TO"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_CAN_FAILED; } /* Get NT from TA_YAHOO_ONE_STMBOL data source. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.symbol = "NT.TO"; histParam.field = TA_ALL, histParam.period = TA_DAILY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_3_FAILED; } if( history->nbBars < 700 ) { return TA_YAHOO_VALUE_3_FAILED; } if( !history->open || !history->high || !history->low || !history->close || !history->volume || !history->timestamp ) { return TA_YAHOO_FIELD_MISSING_3; } /* Get NT from the TA_YAHOO_WEB and make sure they return the same data. */ errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-200], &history->timestamp[history->nbBars-1], TA_DAILY, history->nbBars-200, 200 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last 200 price bars only.\n" ); return errNumber; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } return TA_TEST_PASS; }
/**** Local functions definitions. ****/ static ErrorNumber test_index( TA_Libc *libHandle, TA_UDBase *udb ) { TA_RetCode retCode; TA_AddDataSourceParam param; TA_History *history; ErrorNumber errNumber; (void)libHandle; /* Add the Yaho! data source. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_WEB; param.location = "us"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_USA_FAILED; } /* Get something from NASDAQ. */ retCode = TA_HistoryAlloc( udb, "US.NASDAQ.STOCK", "MSFT", TA_DAILY, 0, 0, TA_CLOSE|TA_TIMESTAMP|TA_VOLUME, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_1_FAILED; } if( history->nbBars < 3000 ) { printf( "Insufficient nbBars returned for MSFT ticker test (%d < 3000)\n", history->nbBars ); return TA_YAHOO_VALUE_1_FAILED; } if( !history->close || !history->timestamp || !history->volume ) { return TA_YAHOO_FIELD_MISSING_1; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Add canadian index. */ param.id = TA_YAHOO_WEB; param.location = "ca"; retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_CAN_FAILED; } /* Get something from NYSE. */ retCode = TA_HistoryAlloc( udb, "US.NYSE.STOCK", "IBM", TA_WEEKLY, 0, 0, TA_OPEN, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_2_FAILED; } if( history->nbBars < 2065 ) { return TA_YAHOO_VALUE_2_FAILED; } if( !history->open ) { return TA_YAHOO_FIELD_MISSING_2; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Get something from canadian market. * Also test stock using 200 price bar slice. */ retCode = TA_HistoryAlloc( udb, "CA.CDNX.STOCK", "MRY", TA_DAILY, 0, 0, TA_ALL, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_3_FAILED; } if( history->nbBars < 700 ) { return TA_YAHOO_VALUE_3_FAILED; } if( !history->open || !history->high || !history->low || !history->close || !history->volume || !history->timestamp ) { return TA_YAHOO_FIELD_MISSING_3; } errNumber = checkRangeSame( udb, history, &history->timestamp[0], &history->timestamp[0], 0, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting first price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[1], &history->timestamp[1], 1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting second price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-2], &history->timestamp[history->nbBars-2], history->nbBars-2, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting before last price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-1], &history->timestamp[history->nbBars-1], history->nbBars-1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-200], &history->timestamp[history->nbBars-1], history->nbBars-200, 200 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last 200 price bars only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[0], &history->timestamp[199], 0, 200 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting first 200 price bars only.\n" ); return errNumber; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } return TA_TEST_PASS; }
/**** Local functions definitions. ****/ static ErrorNumber test_web( TA_UDBase *udb ) { TA_RetCode retCode; TA_AddDataSourceParam param; TA_History *history; ErrorNumber errNumber; TA_HistoryAllocParam histParam; /* Add the Yaho! data source. */ memset( ¶m, 0, sizeof( param ) ); param.id = TA_YAHOO_WEB; param.location = "us;server=ichart7.finance.dcn.yahoo.com"; /* ichart7.finance.dcn.yahoo.com */ retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_USA_FAILED; } /* Get something from NASDAQ. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.category = "US.NASDAQ.STOCK"; histParam.symbol = "MSFT"; histParam.field = TA_CLOSE|TA_TIMESTAMP|TA_VOLUME; histParam.period = TA_DAILY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_1_FAILED; } if( history->nbBars < 3000 ) { printf( "Insufficient nbBars returned for MSFT ticker test (%d < 3000)\n", history->nbBars ); return TA_YAHOO_VALUE_1_FAILED; } if( !history->close || !history->timestamp || !history->volume ) { return TA_YAHOO_FIELD_MISSING_1; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Add canadian index. */ param.id = TA_YAHOO_WEB; param.location = "ca"; /*param.flags = TA_DO_NOT_SPLIT_ADJUST|TA_DO_NOT_VALUE_ADJUST;*/ retCode = TA_AddDataSource( udb, ¶m ); if( retCode != TA_SUCCESS ) { reportError( "TA_AddDataSource", retCode ); return TA_YAHOO_ADDDATASOURCE_CAN_FAILED; } /* Get something from NYSE. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.category = "US.NYSE.STOCK"; histParam.symbol = "IBM"; histParam.field = TA_OPEN; histParam.period = TA_WEEKLY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_2_FAILED; } if( history->nbBars < 2065 ) { return TA_YAHOO_VALUE_2_FAILED; } if( !history->open ) { return TA_YAHOO_FIELD_MISSING_2; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Get something from canadian market. * Also test stock using 200 price bar slice. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.category = "CA.TSE.STOCK"; histParam.symbol = "NT"; histParam.field = TA_ALL, histParam.period = TA_DAILY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc", retCode ); return TA_YAHOO_HISTORYALLOC_3_FAILED; } if( history->nbBars < 700 ) { return TA_YAHOO_VALUE_3_FAILED; } if( !history->open || !history->high || !history->low || !history->close || !history->volume || !history->timestamp ) { return TA_YAHOO_FIELD_MISSING_3; } errNumber = checkRangeSame( udb, history, &history->timestamp[0], &history->timestamp[0], TA_DAILY, 0, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting first price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[1], &history->timestamp[1], TA_DAILY, 1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting second price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-2], &history->timestamp[history->nbBars-2], TA_DAILY, history->nbBars-2, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting before last price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-1], &history->timestamp[history->nbBars-1], TA_DAILY, history->nbBars-1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last price bar only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-200], &history->timestamp[history->nbBars-1], TA_DAILY, history->nbBars-200, 200 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last 200 price bars only.\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[0], &history->timestamp[199], TA_DAILY, 0, 200 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting first 200 price bars only.\n" ); return errNumber; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } /* Do again the same test, but using Monthly data this time. */ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); histParam.category = "CA.TSE.STOCK"; histParam.symbol = "NT"; histParam.field = TA_ALL; histParam.period = TA_MONTHLY; retCode = TA_HistoryAlloc( udb, &histParam, &history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryAlloc for Monthly data", retCode ); return TA_YAHOO_HISTORYALLOC_3_FAILED; } /* printf( "Nb Bars= %d\n", history->nbBars ); */ errNumber = checkRangeSame( udb, history, &history->timestamp[0], &history->timestamp[0], TA_MONTHLY, 0, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting first price bar only. (Monthly)\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[1], &history->timestamp[1], TA_MONTHLY, 1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting second price bar only. (Monthly)\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-2], &history->timestamp[history->nbBars-2], TA_MONTHLY, history->nbBars-2, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting before last price bar only. (Monthly)\n" ); return errNumber; } errNumber = checkRangeSame( udb, history, &history->timestamp[history->nbBars-1], &history->timestamp[history->nbBars-1], TA_MONTHLY, history->nbBars-1, 1 ); if( errNumber != TA_TEST_PASS ) { printf( "Failed: Test getting last price bar only. (Monthly)\n" ); return errNumber; } retCode = TA_HistoryFree( history ); if( retCode != TA_SUCCESS ) { reportError( "TA_HistoryFree", retCode ); return TA_YAHOO_HISTORYFREE_FAILED; } return TA_TEST_PASS; }