/* Generated */ TA_RetCode TA_PREFIX(INT_PO)( int startIdx, /* Generated */ int endIdx, /* Generated */ const INPUT_TYPE *inReal, /* Generated */ int optInFastPeriod, /* Generated */ int optInSlowPeriod, /* Generated */ TA_MAType optInMethod_2, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double *outReal, /* Generated */ double *tempBuffer, /* Generated */ unsigned int doPercentageOutput ) /* Generated */ #endif /* Generated */ { /* Generated */ TA_RetCode retCode; /* Generated */ int tempInteger; /* Generated */ int outBegIdx1, outNbElement1; /* Generated */ int outBegIdx2, outNbElement2; /* Generated */ int i, j; /* Generated */ if( optInSlowPeriod < optInFastPeriod ) /* Generated */ { /* Generated */ tempInteger = optInSlowPeriod; /* Generated */ optInSlowPeriod = optInFastPeriod; /* Generated */ optInFastPeriod = tempInteger; /* Generated */ } /* Generated */ retCode = TA_PREFIX(MA)( startIdx, endIdx, /* Generated */ inReal, /* Generated */ optInSlowPeriod, /* Generated */ optInMethod_2, /* Generated */ &outBegIdx1, &outNbElement1, tempBuffer ); /* Generated */ if( retCode == TA_SUCCESS ) /* Generated */ { /* Generated */ retCode = TA_PREFIX(MA)( startIdx, endIdx, /* Generated */ inReal, /* Generated */ optInFastPeriod, /* Generated */ optInMethod_2, /* Generated */ &outBegIdx2, &outNbElement2, outReal ); /* Generated */ if( retCode == TA_SUCCESS ) /* Generated */ { /* Generated */ tempInteger = outBegIdx1 - outBegIdx2; /* Generated */ if( doPercentageOutput ) /* Generated */ { /* Generated */ for( i=0,j=tempInteger; i < outNbElement1; i++, j++ ) /* Generated */ outReal[i] = ((outReal[j]-tempBuffer[i])/tempBuffer[i])*100; /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ for( i=0,j=tempInteger; i < outNbElement1; i++, j++ ) /* Generated */ outReal[i] = outReal[j]-tempBuffer[i]; /* Generated */ } /* Generated */ *outBegIdx = outBegIdx1; /* Generated */ *outNbElement = outNbElement1; /* Generated */ } /* Generated */ } /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ } /* Generated */ return retCode; /* Generated */ }
/* Generated */ TA_RetCode TA_S_APO( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInFastPeriod, /* From 2 to 100000 */ /* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ /* Generated */ TA_MAType optInMAType, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outReal[] ) /* Generated */ #endif /* Generated */ { /* Generated */ ARRAY_REF(tempBuffer); /* Generated */ TA_RetCode retCode; /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal ) return TA_BAD_PARAM; /* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInFastPeriod = 12; /* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowPeriod = 26; /* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInMAType = 0; /* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( outReal == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ ARRAY_ALLOC(tempBuffer, (endIdx-startIdx+1) ); /* Generated */ if( !tempBuffer ) /* Generated */ return TA_ALLOC_ERR; /* Generated */ retCode = TA_PREFIX(INT_PO)( startIdx, endIdx, /* Generated */ inReal, /* Generated */ optInFastPeriod, /* Generated */ optInSlowPeriod, /* Generated */ optInMAType, /* Generated */ outBegIdx, /* Generated */ outNbElement, /* Generated */ outReal, /* Generated */ tempBuffer, /* Generated */ 0 ); /* Generated */ ARRAY_FREE( tempBuffer ); /* Generated */ return retCode; /* Generated */ }
/* Generated */ TA_RetCode TA_S_MACD( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInFastPeriod, /* From 2 to 100000 */ /* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ /* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outMACD[], /* Generated */ double outMACDSignal[], /* Generated */ double outMACDHist[] ) /* Generated */ #endif /* Generated */ { /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal ) return TA_BAD_PARAM; /* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInFastPeriod = 12; /* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowPeriod = 26; /* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInSignalPeriod = 9; /* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outMACD == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outMACDSignal == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outMACDHist == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ return TA_PREFIX(INT_MACD)( startIdx, endIdx, inReal, /* Generated */ optInFastPeriod, /* Generated */ optInSlowPeriod, /* Generated */ optInSignalPeriod, /* Generated */ outBegIdx, /* Generated */ outNbElement, /* Generated */ outMACD, /* Generated */ outMACDSignal, /* Generated */ outMACDHist ); /* Generated */ }
/* Generated */ TA_RetCode TA_PREFIX(INT_MACD)( int startIdx, /* Generated */ int endIdx, /* Generated */ const INPUT_TYPE inReal[], /* Generated */ int optInFastPeriod, /* Generated */ int optInSlowPeriod, /* Generated */ int optInSignalPeriod_2, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outMACD[], /* Generated */ double outMACDSignal[], /* Generated */ double outMACDHist[] ) /* Generated */ #endif /* Generated */ { /* Generated */ ARRAY_REF(slowEMABuffer); /* Generated */ ARRAY_REF(fastEMABuffer); /* Generated */ double k1, k2; /* Generated */ TA_RetCode retCode; /* Generated */ int tempInteger, outBegIdx1, outNbElement1; /* Generated */ int outBegIdx2, outNbElement2; /* Generated */ int lookbackTotal, lookbackSignal; /* Generated */ int i; /* Generated */ if( optInSlowPeriod < optInFastPeriod ) /* Generated */ { /* Generated */ tempInteger = optInSlowPeriod; /* Generated */ optInSlowPeriod = optInFastPeriod; /* Generated */ optInFastPeriod = tempInteger; /* Generated */ } /* Generated */ if( optInSlowPeriod != 0 ) /* Generated */ k1 = PER_TO_K(optInSlowPeriod); /* Generated */ else /* Generated */ { /* Generated */ optInSlowPeriod = 26; /* Generated */ k1 = (double)0.075; /* Generated */ } /* Generated */ if( optInFastPeriod != 0 ) /* Generated */ k2 = PER_TO_K(optInFastPeriod); /* Generated */ else /* Generated */ { /* Generated */ optInFastPeriod = 12; /* Generated */ k2 = (double)0.15; /* Generated */ } /* Generated */ lookbackSignal = TA_EMA_Lookback( optInSignalPeriod_2 ); /* Generated */ lookbackTotal = lookbackSignal; /* Generated */ lookbackTotal += TA_EMA_Lookback( optInSlowPeriod ); /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ tempInteger = (endIdx-startIdx)+1+lookbackSignal; /* Generated */ ARRAY_ALLOC( fastEMABuffer, tempInteger ); /* Generated */ if( !fastEMABuffer ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_ALLOC_ERR; /* Generated */ } /* Generated */ ARRAY_ALLOC( slowEMABuffer, tempInteger ); /* Generated */ if( !slowEMABuffer ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastEMABuffer ); /* Generated */ return TA_ALLOC_ERR; /* Generated */ } /* Generated */ tempInteger = startIdx-lookbackSignal; /* Generated */ retCode = TA_PREFIX(INT_EMA)( tempInteger, endIdx, /* Generated */ inReal, optInSlowPeriod, k1, /* Generated */ &outBegIdx1, &outNbElement1, slowEMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastEMABuffer ); /* Generated */ ARRAY_FREE( slowEMABuffer ); /* Generated */ return retCode; /* Generated */ } /* Generated */ retCode = TA_PREFIX(INT_EMA)( tempInteger, endIdx, /* Generated */ inReal, optInFastPeriod, k2, /* Generated */ &outBegIdx2, &outNbElement2, fastEMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastEMABuffer ); /* Generated */ ARRAY_FREE( slowEMABuffer ); /* Generated */ return retCode; /* Generated */ } /* Generated */ if( (outBegIdx1 != tempInteger) || /* Generated */ (outBegIdx2 != tempInteger) || /* Generated */ (outNbElement1 != outNbElement2) || /* Generated */ (outNbElement1 != (endIdx-startIdx)+1+lookbackSignal) ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastEMABuffer ); /* Generated */ ARRAY_FREE( slowEMABuffer ); /* Generated */ return TA_INTERNAL_ERROR(119); /* Generated */ } /* Generated */ for( i=0; i < outNbElement1; i++ ) /* Generated */ fastEMABuffer[i] = fastEMABuffer[i] - slowEMABuffer[i]; /* Generated */ ARRAY_MEMMOVE( outMACD, 0, fastEMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); /* Generated */ retCode = TA_INT_EMA( 0, outNbElement1-1, /* Generated */ fastEMABuffer, optInSignalPeriod_2, PER_TO_K(optInSignalPeriod_2), /* Generated */ &outBegIdx2, &outNbElement2, outMACDSignal ); /* Generated */ ARRAY_FREE( fastEMABuffer ); /* Generated */ ARRAY_FREE( slowEMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ for( i=0; i < outNbElement2; i++ ) /* Generated */ outMACDHist[i] = outMACD[i]-outMACDSignal[i]; /* Generated */ *outBegIdx = startIdx; /* Generated */ *outNbElement = outNbElement2; /* Generated */ return TA_SUCCESS; /* Generated */ }
/* Generated */ TA_RetCode TA_S_MACDEXT( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInFastPeriod, /* From 2 to 100000 */ /* Generated */ TA_MAType optInFastMAType, /* Generated */ int optInSlowPeriod, /* From 2 to 100000 */ /* Generated */ TA_MAType optInSlowMAType, /* Generated */ int optInSignalPeriod, /* From 1 to 100000 */ /* Generated */ TA_MAType optInSignalMAType, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outMACD[], /* Generated */ double outMACDSignal[], /* Generated */ double outMACDHist[] ) /* Generated */ #endif /* Generated */ { /* Generated */ ARRAY_REF( slowMABuffer ); /* Generated */ ARRAY_REF( fastMABuffer ); /* Generated */ TA_RetCode retCode; /* Generated */ int tempInteger, outBegIdx1, outNbElement1; /* Generated */ int outBegIdx2, outNbElement2; /* Generated */ int lookbackTotal, lookbackSignal, lookbackLargest; /* Generated */ int i; /* Generated */ TA_MAType tempMAType; /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal ) return TA_BAD_PARAM; /* Generated */ if( (int)optInFastPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInFastPeriod = 12; /* Generated */ else if( ((int)optInFastPeriod < 2) || ((int)optInFastPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInFastMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInFastMAType = 0; /* Generated */ else if( ((int)optInFastMAType < 0) || ((int)optInFastMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( (int)optInSlowPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowPeriod = 26; /* Generated */ else if( ((int)optInSlowPeriod < 2) || ((int)optInSlowPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInSlowMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowMAType = 0; /* Generated */ else if( ((int)optInSlowMAType < 0) || ((int)optInSlowMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( (int)optInSignalPeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInSignalPeriod = 9; /* Generated */ else if( ((int)optInSignalPeriod < 1) || ((int)optInSignalPeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInSignalMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInSignalMAType = 0; /* Generated */ else if( ((int)optInSignalMAType < 0) || ((int)optInSignalMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( outMACD == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outMACDSignal == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outMACDHist == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( optInSlowPeriod < optInFastPeriod ) /* Generated */ { /* Generated */ tempInteger = optInSlowPeriod; /* Generated */ optInSlowPeriod = optInFastPeriod; /* Generated */ optInFastPeriod = tempInteger; /* Generated */ tempMAType = optInSlowMAType; /* Generated */ optInSlowMAType = optInFastMAType; /* Generated */ optInFastMAType = tempMAType; /* Generated */ } /* Generated */ lookbackLargest = TA_MA_Lookback( optInFastPeriod, optInFastMAType ); /* Generated */ tempInteger = TA_MA_Lookback( optInSlowPeriod, optInSlowMAType ); /* Generated */ if( tempInteger > lookbackLargest ) /* Generated */ lookbackLargest = tempInteger; /* Generated */ lookbackSignal = TA_MA_Lookback( optInSignalPeriod, optInSignalMAType ); /* Generated */ lookbackTotal = lookbackSignal+lookbackLargest; /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ tempInteger = (endIdx-startIdx)+1+lookbackSignal; /* Generated */ ARRAY_ALLOC( fastMABuffer, tempInteger ); /* Generated */ if( !fastMABuffer ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_ALLOC_ERR; /* Generated */ } /* Generated */ ARRAY_ALLOC( slowMABuffer, tempInteger ); /* Generated */ if( !slowMABuffer ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastMABuffer ); /* Generated */ return TA_ALLOC_ERR; /* Generated */ } /* Generated */ tempInteger = startIdx-lookbackSignal; /* Generated */ retCode = TA_PREFIX(MA)( tempInteger, endIdx, /* Generated */ inReal, optInSlowPeriod, optInSlowMAType, /* Generated */ &outBegIdx1, &outNbElement1, slowMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastMABuffer ); /* Generated */ ARRAY_FREE( slowMABuffer ); /* Generated */ return retCode; /* Generated */ } /* Generated */ retCode = TA_PREFIX(MA)( tempInteger, endIdx, /* Generated */ inReal, optInFastPeriod, optInFastMAType, /* Generated */ &outBegIdx2, &outNbElement2, fastMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastMABuffer ); /* Generated */ ARRAY_FREE( slowMABuffer ); /* Generated */ return retCode; /* Generated */ } /* Generated */ if( (outBegIdx1 != tempInteger) || /* Generated */ (outBegIdx2 != tempInteger) || /* Generated */ (outNbElement1 != outNbElement2) || /* Generated */ (outNbElement1 != (endIdx-startIdx)+1+lookbackSignal) ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ ARRAY_FREE( fastMABuffer ); /* Generated */ ARRAY_FREE( slowMABuffer ); /* Generated */ return TA_INTERNAL_ERROR(119); /* Generated */ } /* Generated */ for( i=0; i < outNbElement1; i++ ) /* Generated */ fastMABuffer[i] = fastMABuffer[i] - slowMABuffer[i]; /* Generated */ ARRAY_MEMMOVE( outMACD, 0, fastMABuffer, lookbackSignal, (endIdx-startIdx)+1 ); /* Generated */ retCode = TA_MA( 0, outNbElement1-1, /* Generated */ fastMABuffer, optInSignalPeriod, optInSignalMAType, /* Generated */ &outBegIdx2, &outNbElement2, outMACDSignal ); /* Generated */ ARRAY_FREE( fastMABuffer ); /* Generated */ ARRAY_FREE( slowMABuffer ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ for( i=0; i < outNbElement2; i++ ) /* Generated */ outMACDHist[i] = outMACD[i]-outMACDSignal[i]; /* Generated */ *outBegIdx = startIdx; /* Generated */ *outNbElement = outNbElement2; /* Generated */ return TA_SUCCESS; /* Generated */ }
/* Generated */ TA_RetCode TA_S_MA( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInTimePeriod, /* From 1 to 100000 */ /* Generated */ TA_MAType optInMAType, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outReal[] ) /* Generated */ #endif /* Generated */ { /* Generated */ ARRAY_REF(dummyBuffer); /* Generated */ TA_RetCode retCode; /* Generated */ int nbElement; /* Generated */ int outIdx, todayIdx; /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal ) return TA_BAD_PARAM; /* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInTimePeriod = 30; /* Generated */ else if( ((int)optInTimePeriod < 1) || ((int)optInTimePeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInMAType = 0; /* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( outReal == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( optInTimePeriod == 1 ) /* Generated */ { /* Generated */ nbElement = endIdx-startIdx+1; /* Generated */ *outNbElement = nbElement; /* Generated */ for( todayIdx=startIdx, outIdx=0; outIdx < nbElement; outIdx++, todayIdx++ ) /* Generated */ outReal[outIdx] = inReal[todayIdx]; /* Generated */ *outBegIdx = startIdx; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ switch( optInMAType ) /* Generated */ { /* Generated */ case TA_MAType_SMA: /* Generated */ retCode = TA_PREFIX(INT_SMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_EMA: /* Generated */ retCode = TA_PREFIX(INT_EMA)( startIdx, endIdx, inReal, /* Generated */ optInTimePeriod, PER_TO_K(optInTimePeriod), /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_WMA: /* Generated */ retCode = TA_PREFIX(WMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_DEMA: /* Generated */ retCode = TA_PREFIX(DEMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_TEMA: /* Generated */ retCode = TA_PREFIX(TEMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_TRIMA: /* Generated */ retCode = TA_PREFIX(TRIMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_KAMA: /* Generated */ retCode = TA_PREFIX(KAMA)( startIdx, endIdx, inReal, optInTimePeriod, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ case TA_MAType_MAMA: /* Generated */ ARRAY_ALLOC(dummyBuffer, (endIdx-startIdx+1) ); /* Generated */ if( !dummyBuffer ) /* Generated */ return TA_ALLOC_ERR; /* Generated */ retCode = TA_PREFIX(MAMA)( startIdx, endIdx, inReal, 0.5, 0.05, /* Generated */ outBegIdx, outNbElement, /* Generated */ outReal, dummyBuffer ); /* Generated */ ARRAY_FREE( dummyBuffer ); /* Generated */ break; /* Generated */ case TA_MAType_T3: /* Generated */ retCode = TA_PREFIX(T3)( startIdx, endIdx, inReal, /* Generated */ optInTimePeriod, 0.7, /* Generated */ outBegIdx, outNbElement, outReal ); /* Generated */ break; /* Generated */ default: /* Generated */ retCode = TA_BAD_PARAM; /* Generated */ break; /* Generated */ } /* Generated */ return retCode; /* Generated */ }
TA_RetCode TA_PREFIX(INT_PO)( int startIdx, int endIdx, const INPUT_TYPE *inReal, int optInFastPeriod, /* From 1 to 200 */ int optInSlowPeriod, /* From 1 to 200 */ TA_MAType optInMethod_2, int *outBegIdx, int *outNbElement, double *outReal, double *tempBuffer, unsigned int doPercentageOutput ) #endif { TA_RetCode retCode; int tempInteger; int outBegIdx1, outNbElement1; int outBegIdx2, outNbElement2; int i, j; /* Make sure slow is really slower than * the fast period! if not, swap... */ if( optInSlowPeriod < optInFastPeriod ) { /* swap */ tempInteger = optInSlowPeriod; optInSlowPeriod = optInFastPeriod; optInFastPeriod = tempInteger; } /* Calculate the slow MA into the temp buffer. */ retCode = TA_PREFIX(MA)( startIdx, endIdx, inReal, optInSlowPeriod, /* From 1 to 200 */ optInMethod_2, &outBegIdx1, &outNbElement1, tempBuffer ); if( retCode == TA_SUCCESS ) { /* Calculate the fast MA into the output. */ retCode = TA_PREFIX(MA)( startIdx, endIdx, inReal, optInFastPeriod, /* From 1 to 200 */ optInMethod_2, &outBegIdx2, &outNbElement2, outReal ); if( retCode == TA_SUCCESS ) { tempInteger = outBegIdx1 - outBegIdx2; if( doPercentageOutput ) { /* Calculate ((fast MA)-(slow MA))/(slow MA) in the output. */ for( i=0,j=tempInteger; i < outNbElement1; i++, j++ ) outReal[i] = ((outReal[j]-tempBuffer[i])/tempBuffer[i])*100; } else { /* Calculate (fast MA)-(slow MA) in the output. */ for( i=0,j=tempInteger; i < outNbElement1; i++, j++ ) outReal[i] = outReal[j]-tempBuffer[i]; } *outBegIdx = outBegIdx1; *outNbElement = outNbElement1; } } if( retCode != TA_SUCCESS ) { *outBegIdx = 0; *outNbElement = 0; } return retCode; }
/* Generated */ TA_RetCode TA_S_TEMA( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal_0[], /* Generated */ int optInTimePeriod_0, /* From 2 to 100000 */ /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outReal_0[] ) /* Generated */ #endif /* Generated */ { /* Generated */ ARRAY_REF(firstEMA); /* Generated */ ARRAY_REF(secondEMA); /* Generated */ double k; /* Generated */ int firstEMABegIdx, firstEMANbElement; /* Generated */ int secondEMABegIdx, secondEMANbElement; /* Generated */ int thirdEMABegIdx, thirdEMANbElement; /* Generated */ int tempInt, outIdx, lookbackTotal, lookbackEMA; /* Generated */ int firstEMAIdx, secondEMAIdx; /* Generated */ TA_RetCode retCode; /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal_0 ) return TA_BAD_PARAM; /* Generated */ if( (int)optInTimePeriod_0 == TA_INTEGER_DEFAULT ) /* Generated */ optInTimePeriod_0 = 30; /* Generated */ else if( ((int)optInTimePeriod_0 < 2) || ((int)optInTimePeriod_0 > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outReal_0 == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ *outNbElement = 0; /* Generated */ *outBegIdx = 0; /* Generated */ lookbackEMA = TA_EMA_Lookback( optInTimePeriod_0 ); /* Generated */ lookbackTotal = lookbackEMA * 3; /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ return TA_SUCCESS; /* Generated */ tempInt = lookbackTotal+(endIdx-startIdx)+1; /* Generated */ ARRAY_ALLOC(firstEMA,tempInt); /* Generated */ if( !firstEMA ) /* Generated */ return TA_ALLOC_ERR; /* Generated */ k = PER_TO_K(optInTimePeriod_0); /* Generated */ retCode = TA_PREFIX(INT_EMA)( startIdx-(lookbackEMA*2), endIdx, inReal_0, /* Generated */ optInTimePeriod_0, k, /* Generated */ &firstEMABegIdx, &firstEMANbElement, firstEMA ); /* Generated */ if( (retCode != TA_SUCCESS) || (firstEMANbElement == 0) ) /* Generated */ { /* Generated */ ARRAY_FREE( firstEMA ); /* Generated */ return retCode; /* Generated */ } /* Generated */ ARRAY_ALLOC(secondEMA,firstEMANbElement); /* Generated */ if( !secondEMA ) /* Generated */ { /* Generated */ ARRAY_FREE( firstEMA ); /* Generated */ return TA_ALLOC_ERR; /* Generated */ } /* Generated */ retCode = TA_INT_EMA( 0, firstEMANbElement-1, firstEMA, /* Generated */ optInTimePeriod_0, k, /* Generated */ &secondEMABegIdx, &secondEMANbElement, secondEMA ); /* Generated */ if( (retCode != TA_SUCCESS) || (secondEMANbElement == 0) ) /* Generated */ { /* Generated */ ARRAY_FREE( firstEMA ); /* Generated */ ARRAY_FREE( secondEMA ); /* Generated */ return retCode; /* Generated */ } /* Generated */ retCode = TA_INT_EMA( 0, secondEMANbElement-1, secondEMA, /* Generated */ optInTimePeriod_0, k, /* Generated */ &thirdEMABegIdx, &thirdEMANbElement, /* Generated */ outReal_0 ); /* Generated */ if( (retCode != TA_SUCCESS) || (thirdEMANbElement == 0) ) /* Generated */ { /* Generated */ ARRAY_FREE( firstEMA ); /* Generated */ ARRAY_FREE( secondEMA ); /* Generated */ return retCode; /* Generated */ } /* Generated */ firstEMAIdx = thirdEMABegIdx + secondEMABegIdx; /* Generated */ secondEMAIdx = thirdEMABegIdx; /* Generated */ *outBegIdx = firstEMAIdx + firstEMABegIdx; /* Generated */ outIdx = 0; /* Generated */ while( outIdx < thirdEMANbElement ) /* Generated */ { /* Generated */ outReal_0[outIdx] += (3.0*firstEMA[firstEMAIdx++]) - (3.0*secondEMA[secondEMAIdx++]); /* Generated */ outIdx++; /* Generated */ } /* Generated */ ARRAY_FREE( firstEMA ); /* Generated */ ARRAY_FREE( secondEMA ); /* Generated */ *outNbElement = outIdx; /* Generated */ return TA_SUCCESS; /* Generated */ }
/* Generated */ TA_RetCode TA_S_BBANDS( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInTimePeriod, /* From 2 to 100000 */ /* Generated */ double optInNbDevUp, /* From TA_REAL_MIN to TA_REAL_MAX */ /* Generated */ double optInNbDevDn, /* From TA_REAL_MIN to TA_REAL_MAX */ /* Generated */ TA_MAType optInMAType, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outRealUpperBand[], /* Generated */ double outRealMiddleBand[], /* Generated */ double outRealLowerBand[] ) /* Generated */ #endif /* Generated */ { /* Generated */ TA_RetCode retCode; /* Generated */ int i; /* Generated */ double tempReal, tempReal2; /* Generated */ ARRAY_REF(tempBuffer1); /* Generated */ ARRAY_REF(tempBuffer2); /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return TA_OUT_OF_RANGE_END_INDEX; /* Generated */ if( !inReal ) return TA_BAD_PARAM; /* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT ) /* Generated */ optInTimePeriod = 5; /* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( optInNbDevUp == TA_REAL_DEFAULT ) /* Generated */ optInNbDevUp = 2.000000e+0; /* Generated */ else if( (optInNbDevUp < -3.000000e+37) || (optInNbDevUp > 3.000000e+37) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( optInNbDevDn == TA_REAL_DEFAULT ) /* Generated */ optInNbDevDn = 2.000000e+0; /* Generated */ else if( (optInNbDevDn < -3.000000e+37) || (optInNbDevDn > 3.000000e+37) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInMAType == TA_INTEGER_DEFAULT ) /* Generated */ optInMAType = 0; /* Generated */ else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( outRealUpperBand == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outRealMiddleBand == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outRealLowerBand == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ tempBuffer1 = outRealMiddleBand; /* Generated */ tempBuffer2 = outRealLowerBand; /* Generated */ #else /* Generated */ if( inReal == outRealUpperBand ) /* Generated */ { /* Generated */ tempBuffer1 = outRealMiddleBand; /* Generated */ tempBuffer2 = outRealLowerBand; /* Generated */ } /* Generated */ else if( inReal == outRealLowerBand ) /* Generated */ { /* Generated */ tempBuffer1 = outRealMiddleBand; /* Generated */ tempBuffer2 = outRealUpperBand; /* Generated */ } /* Generated */ else if( inReal == outRealMiddleBand ) /* Generated */ { /* Generated */ tempBuffer1 = outRealLowerBand; /* Generated */ tempBuffer2 = outRealUpperBand; /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ tempBuffer1 = outRealMiddleBand; /* Generated */ tempBuffer2 = outRealUpperBand; /* Generated */ } /* Generated */ if( (tempBuffer1 == inReal) || (tempBuffer2 == inReal) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ retCode = TA_PREFIX(MA)( startIdx, endIdx, inReal, /* Generated */ optInTimePeriod, optInMAType, /* Generated */ outBegIdx, outNbElement, tempBuffer1 ); /* Generated */ if( (retCode != TA_SUCCESS) || (*outNbElement == 0) ) /* Generated */ { /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ if( optInMAType == TA_MAType_SMA ) /* Generated */ { /* Generated */ TA_PREFIX(INT_stddev_using_precalc_ma)( inReal, tempBuffer1, /* Generated */ *outBegIdx, *outNbElement, /* Generated */ optInTimePeriod, tempBuffer2 ); /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ retCode = TA_PREFIX(STDDEV)( *outBegIdx, endIdx, inReal, /* Generated */ optInTimePeriod, 1.0, /* Generated */ outBegIdx, outNbElement, tempBuffer2 ); /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ } /* Generated */ #if !defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ if( tempBuffer1 != outRealMiddleBand ) /* Generated */ { /* Generated */ ARRAY_COPY( outRealMiddleBand, tempBuffer1, *outNbElement ); /* Generated */ } /* Generated */ #endif /* Generated */ if( optInNbDevUp == optInNbDevDn ) /* Generated */ { /* Generated */ if( optInNbDevUp == 1.0 ) /* Generated */ { /* Generated */ for( i=0; i < *outNbElement; i++ ) /* Generated */ { /* Generated */ tempReal = tempBuffer2[i]; /* Generated */ tempReal2 = outRealMiddleBand[i]; /* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; /* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; /* Generated */ } /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ for( i=0; i < *outNbElement; i++ ) /* Generated */ { /* Generated */ tempReal = tempBuffer2[i] * optInNbDevUp; /* Generated */ tempReal2 = outRealMiddleBand[i]; /* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; /* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; /* Generated */ } /* Generated */ } /* Generated */ } /* Generated */ else if( optInNbDevUp == 1.0 ) /* Generated */ { /* Generated */ for( i=0; i < *outNbElement; i++ ) /* Generated */ { /* Generated */ tempReal = tempBuffer2[i]; /* Generated */ tempReal2 = outRealMiddleBand[i]; /* Generated */ outRealUpperBand[i] = tempReal2 + tempReal; /* Generated */ outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); /* Generated */ } /* Generated */ } /* Generated */ else if( optInNbDevDn == 1.0 ) /* Generated */ { /* Generated */ for( i=0; i < *outNbElement; i++ ) /* Generated */ { /* Generated */ tempReal = tempBuffer2[i]; /* Generated */ tempReal2 = outRealMiddleBand[i]; /* Generated */ outRealLowerBand[i] = tempReal2 - tempReal; /* Generated */ outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); /* Generated */ } /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ for( i=0; i < *outNbElement; i++ ) /* Generated */ { /* Generated */ tempReal = tempBuffer2[i]; /* Generated */ tempReal2 = outRealMiddleBand[i]; /* Generated */ outRealUpperBand[i] = tempReal2 + (tempReal * optInNbDevUp); /* Generated */ outRealLowerBand[i] = tempReal2 - (tempReal * optInNbDevDn); /* Generated */ } /* Generated */ } /* Generated */ return TA_SUCCESS; /* Generated */ }