/* 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_RSI( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inReal[], /* Generated */ int optInTimePeriod, /* From 2 to 100000 */ /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outReal[] ) /* Generated */ #endif /* Generated */ { /* Generated */ int outIdx; /* Generated */ int today, lookbackTotal, unstablePeriod, i; /* Generated */ double prevGain, prevLoss, prevValue, savePrevValue; /* Generated */ double tempValue1, tempValue2; /* 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 = 14; /* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outReal == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ lookbackTotal = TA_RSI_Lookback( optInTimePeriod ); /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ return TA_SUCCESS; /* Generated */ outIdx = 0; /* Generated */ if( optInTimePeriod == 1 ) /* Generated */ { /* Generated */ *outBegIdx = startIdx; /* Generated */ i = (endIdx-startIdx)+1; /* Generated */ *outNbElement = i; /* Generated */ ARRAY_MEMMOVE( outReal, 0, inReal, startIdx, i ); /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ today = startIdx-lookbackTotal; /* Generated */ prevValue = inReal[today]; /* Generated */ unstablePeriod = TA_Globals->unstablePeriod[TA_FUNC_UNST_RSI]; /* Generated */ if( (unstablePeriod == 0) && /* Generated */ (TA_Globals->compatibility == TA_COMPATIBILITY_METASTOCK)) /* Generated */ { /* Generated */ savePrevValue = prevValue; /* Generated */ prevGain = 0.0; /* Generated */ prevLoss = 0.0; /* Generated */ for( i=optInTimePeriod; i > 0; i-- ) /* Generated */ { /* Generated */ tempValue1 = inReal[today++]; /* Generated */ tempValue2 = tempValue1 - prevValue; /* Generated */ prevValue = tempValue1; /* Generated */ if( tempValue2 < 0 ) /* Generated */ prevLoss -= tempValue2; /* Generated */ else /* Generated */ prevGain += tempValue2; /* Generated */ } /* Generated */ tempValue1 = prevLoss/optInTimePeriod; /* Generated */ tempValue2 = prevGain/optInTimePeriod; /* Generated */ outReal[outIdx++] = 100*(tempValue2/(tempValue2+tempValue1)); /* Generated */ if( today > endIdx ) /* Generated */ { /* Generated */ *outBegIdx = startIdx; /* Generated */ *outNbElement = outIdx; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ today -= optInTimePeriod; /* Generated */ prevValue = savePrevValue; /* Generated */ } /* Generated */ prevGain = 0.0; /* Generated */ prevLoss = 0.0; /* Generated */ today++; /* Generated */ for( i=optInTimePeriod; i > 0; i-- ) /* Generated */ { /* Generated */ tempValue1 = inReal[today++]; /* Generated */ tempValue2 = tempValue1 - prevValue; /* Generated */ prevValue = tempValue1; /* Generated */ if( tempValue2 < 0 ) /* Generated */ prevLoss -= tempValue2; /* Generated */ else /* Generated */ prevGain += tempValue2; /* Generated */ } /* Generated */ prevLoss /= optInTimePeriod; /* Generated */ prevGain /= optInTimePeriod; /* Generated */ if( today > startIdx ) /* Generated */ outReal[outIdx++] = 100.0*(prevGain/(prevGain+prevLoss)); /* Generated */ else /* Generated */ { /* Generated */ while( today < startIdx ) /* Generated */ { /* Generated */ tempValue1 = inReal[today]; /* Generated */ tempValue2 = tempValue1 - prevValue; /* Generated */ prevValue = tempValue1; /* Generated */ prevLoss *= (optInTimePeriod-1); /* Generated */ prevGain *= (optInTimePeriod-1); /* Generated */ if( tempValue2 < 0 ) /* Generated */ prevLoss -= tempValue2; /* Generated */ else /* Generated */ prevGain += tempValue2; /* Generated */ prevLoss /= optInTimePeriod; /* Generated */ prevGain /= optInTimePeriod; /* Generated */ today++; /* Generated */ } /* Generated */ } /* Generated */ while( today <= endIdx ) /* Generated */ { /* Generated */ tempValue1 = inReal[today++]; /* Generated */ tempValue2 = tempValue1 - prevValue; /* Generated */ prevValue = tempValue1; /* Generated */ prevLoss *= (optInTimePeriod-1); /* Generated */ prevGain *= (optInTimePeriod-1); /* Generated */ if( tempValue2 < 0 ) /* Generated */ prevLoss -= tempValue2; /* Generated */ else /* Generated */ prevGain += tempValue2; /* Generated */ prevLoss /= optInTimePeriod; /* Generated */ prevGain /= optInTimePeriod; /* Generated */ outReal[outIdx++] = 100.0*(prevGain/(prevGain+prevLoss)); /* Generated */ } /* Generated */ *outBegIdx = startIdx; /* Generated */ *outNbElement = outIdx; /* 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_STOCHF( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inHigh_0[], /* Generated */ const float inLow_0[], /* Generated */ const float inClose_0[], /* Generated */ int optInFastK_Period_0, /* From 1 to 100000 */ /* Generated */ int optInFastD_Period_1, /* From 1 to 100000 */ /* Generated */ TA_MAType optInFastD_MAType_2, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outFastK_0[], /* Generated */ double outFastD_1[] ) /* Generated */ #endif /* Generated */ { /* Generated */ TA_RetCode retCode; /* Generated */ double lowest, highest, tmp, diff; /* Generated */ ARRAY_REF( tempBuffer ); /* Generated */ int outIdx, lowestIdx, highestIdx; /* Generated */ int lookbackTotal, lookbackK, lookbackFastD; /* Generated */ int trailingIdx, today, i; /* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ int bufferIsAllocated; /* Generated */ #endif /* 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(!inHigh_0||!inLow_0||!inClose_0) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( (int)optInFastK_Period_0 == TA_INTEGER_DEFAULT ) /* Generated */ optInFastK_Period_0 = 5; /* Generated */ else if( ((int)optInFastK_Period_0 < 1) || ((int)optInFastK_Period_0 > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( (int)optInFastD_Period_1 == TA_INTEGER_DEFAULT ) /* Generated */ optInFastD_Period_1 = 3; /* Generated */ else if( ((int)optInFastD_Period_1 < 1) || ((int)optInFastD_Period_1 > 100000) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) /* Generated */ if( (int)optInFastD_MAType_2 == TA_INTEGER_DEFAULT ) /* Generated */ optInFastD_MAType_2 = 0; /* Generated */ else if( ((int)optInFastD_MAType_2 < 0) || ((int)optInFastD_MAType_2 > 8) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( outFastK_0 == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outFastD_1 == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ lookbackK = optInFastK_Period_0-1; /* Generated */ lookbackFastD = TA_MA_Lookback( optInFastD_Period_1, optInFastD_MAType_2 ); /* Generated */ lookbackTotal = lookbackK + lookbackFastD; /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ outIdx = 0; /* Generated */ trailingIdx = startIdx-lookbackTotal; /* Generated */ today = trailingIdx+lookbackK; /* Generated */ lowestIdx = highestIdx = -1; /* Generated */ diff = highest = lowest = 0.0; /* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ bufferIsAllocated = 0; /* Generated */ #endif /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); /* Generated */ #else /* Generated */ if( (outFastK_0 == inHigh_0) || /* Generated */ (outFastK_0 == inLow_0) || /* Generated */ (outFastK_0 == inClose_0) ) /* Generated */ { /* Generated */ tempBuffer = outFastK_0; /* Generated */ } /* Generated */ else if( (outFastD_1 == inHigh_0) || /* Generated */ (outFastD_1 == inLow_0) || /* Generated */ (outFastD_1 == inClose_0) ) /* Generated */ { /* Generated */ tempBuffer = outFastD_1; /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ #if !defined( _MANAGED ) /* Generated */ bufferIsAllocated = 1; /* Generated */ #endif /* Generated */ ARRAY_ALLOC(tempBuffer, endIdx-today+1 ); /* Generated */ } /* Generated */ #endif /* Generated */ while( today <= endIdx ) /* Generated */ { /* Generated */ tmp = inLow_0[today]; /* Generated */ if( lowestIdx < trailingIdx ) /* Generated */ { /* Generated */ lowestIdx = trailingIdx; /* Generated */ lowest = inLow_0[lowestIdx]; /* Generated */ i = lowestIdx; /* Generated */ while( ++i<=today ) /* Generated */ { /* Generated */ tmp = inLow_0[i]; /* Generated */ if( tmp < lowest ) /* Generated */ { /* Generated */ lowestIdx = i; /* Generated */ lowest = tmp; /* Generated */ } /* Generated */ } /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ else if( tmp <= lowest ) /* Generated */ { /* Generated */ lowestIdx = today; /* Generated */ lowest = tmp; /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ tmp = inHigh_0[today]; /* Generated */ if( highestIdx < trailingIdx ) /* Generated */ { /* Generated */ highestIdx = trailingIdx; /* Generated */ highest = inHigh_0[highestIdx]; /* Generated */ i = highestIdx; /* Generated */ while( ++i<=today ) /* Generated */ { /* Generated */ tmp = inHigh_0[i]; /* Generated */ if( tmp > highest ) /* Generated */ { /* Generated */ highestIdx = i; /* Generated */ highest = tmp; /* Generated */ } /* Generated */ } /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ else if( tmp >= highest ) /* Generated */ { /* Generated */ highestIdx = today; /* Generated */ highest = tmp; /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ if( diff != 0.0 ) /* Generated */ tempBuffer[outIdx++] = (inClose_0[today]-lowest)/diff; /* Generated */ else /* Generated */ tempBuffer[outIdx++] = 0.0; /* Generated */ trailingIdx++; /* Generated */ today++; /* Generated */ } /* Generated */ retCode = TA_MA( 0, outIdx-1, /* Generated */ tempBuffer, optInFastD_Period_1, /* Generated */ optInFastD_MAType_2, /* Generated */ outBegIdx, outNbElement, outFastD_1 ); /* Generated */ if( (retCode != TA_SUCCESS) || (*outNbElement == 0) ) /* Generated */ { /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_FREE( tempBuffer ); /* Generated */ #else /* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); /* Generated */ #endif /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ ARRAY_MEMMOVE( outFastK_0, 0, tempBuffer, lookbackFastD, *outNbElement ); /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_FREE( tempBuffer ); /* Generated */ #else /* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); /* Generated */ #endif /* Generated */ if( retCode != TA_SUCCESS ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return retCode; /* Generated */ } /* Generated */ *outBegIdx = startIdx; /* Generated */ return TA_SUCCESS; /* Generated */ }
/* Generated */ TA_RetCode TA_S_STOCH( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inHigh[], /* Generated */ const float inLow[], /* Generated */ const float inClose[], /* Generated */ int optInFastK_Period, /* From 1 to 100000 */ /* Generated */ int optInSlowK_Period, /* From 1 to 100000 */ /* Generated */ TA_MAType optInSlowK_MAType, /* Generated */ int optInSlowD_Period, /* From 1 to 100000 */ /* Generated */ TA_MAType optInSlowD_MAType, /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ double outSlowK[], /* Generated */ double outSlowD[] ) /* Generated */ #endif /* Generated */ { /* Generated */ TA_RetCode retCode; /* Generated */ double lowest, highest, tmp, diff; /* Generated */ ARRAY_REF( tempBuffer ); /* Generated */ int outIdx, lowestIdx, highestIdx; /* Generated */ int lookbackTotal, lookbackK, lookbackKSlow, lookbackDSlow; /* Generated */ int trailingIdx, today, i; /* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) &&!defined(_JAVA) /* Generated */ int bufferIsAllocated; /* Generated */ #endif /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return NAMESPACE(TA_RetCode)TA_OUT_OF_RANGE_START_INDEX; /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return NAMESPACE(TA_RetCode)TA_OUT_OF_RANGE_END_INDEX; /* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) /* Generated */ if(!inHigh||!inLow||!inClose) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( (int)optInFastK_Period == TA_INTEGER_DEFAULT ) /* Generated */ optInFastK_Period = 5; /* Generated */ else if( ((int)optInFastK_Period < 1) || ((int)optInFastK_Period > 100000) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ if( (int)optInSlowK_Period == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowK_Period = 3; /* Generated */ else if( ((int)optInSlowK_Period < 1) || ((int)optInSlowK_Period > 100000) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) /* Generated */ if( (int)optInSlowK_MAType == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowK_MAType = 0; /* Generated */ else if( ((int)optInSlowK_MAType < 0) || ((int)optInSlowK_MAType > 8) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( (int)optInSlowD_Period == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowD_Period = 3; /* Generated */ else if( ((int)optInSlowD_Period < 1) || ((int)optInSlowD_Period > 100000) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) /* Generated */ if( (int)optInSlowD_MAType == TA_INTEGER_DEFAULT ) /* Generated */ optInSlowD_MAType = 0; /* Generated */ else if( ((int)optInSlowD_MAType < 0) || ((int)optInSlowD_MAType > 8) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) /* Generated */ if( !outSlowK ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ if( !outSlowD ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ #endif /* Generated */ lookbackK = optInFastK_Period-1; /* Generated */ lookbackKSlow = LOOKBACK_CALL(MA)( optInSlowK_Period, optInSlowK_MAType ); /* Generated */ lookbackDSlow = LOOKBACK_CALL(MA)( optInSlowD_Period, optInSlowD_MAType ); /* Generated */ lookbackTotal = lookbackK + lookbackDSlow + lookbackKSlow; /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ { /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNbElement); /* Generated */ return NAMESPACE(TA_RetCode)TA_SUCCESS; /* Generated */ } /* Generated */ outIdx = 0; /* Generated */ trailingIdx = startIdx-lookbackTotal; /* Generated */ today = trailingIdx+lookbackK; /* Generated */ lowestIdx = highestIdx = -1; /* Generated */ diff = highest = lowest = 0.0; /* Generated */ #if !defined( _MANAGED ) && !defined(USE_SINGLE_PRECISION_INPUT) && !defined( _JAVA ) /* Generated */ bufferIsAllocated = 0; /* Generated */ #endif /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); /* Generated */ #else /* Generated */ if( (outSlowK == inHigh) || /* Generated */ (outSlowK == inLow) || /* Generated */ (outSlowK == inClose) ) /* Generated */ { /* Generated */ tempBuffer = outSlowK; /* Generated */ } /* Generated */ else if( (outSlowD == inHigh) || /* Generated */ (outSlowD == inLow) || /* Generated */ (outSlowD == inClose) ) /* Generated */ { /* Generated */ tempBuffer = outSlowD; /* Generated */ } /* Generated */ else /* Generated */ { /* Generated */ #if !defined( _MANAGED ) && !defined(_JAVA) /* Generated */ bufferIsAllocated = 1; /* Generated */ #endif /* Generated */ ARRAY_ALLOC( tempBuffer, endIdx-today+1 ); /* Generated */ } /* Generated */ #endif /* Generated */ while( today <= endIdx ) /* Generated */ { /* Generated */ tmp = inLow[today]; /* Generated */ if( lowestIdx < trailingIdx ) /* Generated */ { /* Generated */ lowestIdx = trailingIdx; /* Generated */ lowest = inLow[lowestIdx]; /* Generated */ i = lowestIdx; /* Generated */ while( ++i<=today ) /* Generated */ { /* Generated */ tmp = inLow[i]; /* Generated */ if( tmp < lowest ) /* Generated */ { /* Generated */ lowestIdx = i; /* Generated */ lowest = tmp; /* Generated */ } /* Generated */ } /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ else if( tmp <= lowest ) /* Generated */ { /* Generated */ lowestIdx = today; /* Generated */ lowest = tmp; /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ tmp = inHigh[today]; /* Generated */ if( highestIdx < trailingIdx ) /* Generated */ { /* Generated */ highestIdx = trailingIdx; /* Generated */ highest = inHigh[highestIdx]; /* Generated */ i = highestIdx; /* Generated */ while( ++i<=today ) /* Generated */ { /* Generated */ tmp = inHigh[i]; /* Generated */ if( tmp > highest ) /* Generated */ { /* Generated */ highestIdx = i; /* Generated */ highest = tmp; /* Generated */ } /* Generated */ } /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ else if( tmp >= highest ) /* Generated */ { /* Generated */ highestIdx = today; /* Generated */ highest = tmp; /* Generated */ diff = (highest - lowest)/100.0; /* Generated */ } /* Generated */ if( diff != 0.0 ) /* Generated */ tempBuffer[outIdx++] = (inClose[today]-lowest)/diff; /* Generated */ else /* Generated */ tempBuffer[outIdx++] = 0.0; /* Generated */ trailingIdx++; /* Generated */ today++; /* Generated */ } /* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, outIdx-1, /* Generated */ tempBuffer, optInSlowK_Period, /* Generated */ optInSlowK_MAType, /* Generated */ outBegIdx, outNbElement, tempBuffer ); /* Generated */ if( (retCode != NAMESPACE(TA_RetCode)TA_SUCCESS ) || ((int)VALUE_HANDLE_DEREF(outNbElement) == 0) ) /* Generated */ { /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_FREE( tempBuffer ); /* Generated */ #else /* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); /* Generated */ #endif /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNbElement); /* Generated */ return retCode; /* Generated */ } /* Generated */ retCode = FUNCTION_CALL_DOUBLE(MA)( 0, (int)VALUE_HANDLE_DEREF(outNbElement)-1, /* Generated */ tempBuffer, optInSlowD_Period, /* Generated */ optInSlowD_MAType, /* Generated */ outBegIdx, outNbElement, outSlowD ); /* Generated */ ARRAY_MEMMOVE( outSlowK, 0, tempBuffer,lookbackDSlow,(int)VALUE_HANDLE_DEREF(outNbElement)); /* Generated */ #if defined(USE_SINGLE_PRECISION_INPUT) /* Generated */ ARRAY_FREE( tempBuffer ); /* Generated */ #else /* Generated */ ARRAY_FREE_COND( bufferIsAllocated, tempBuffer ); /* Generated */ #endif /* Generated */ if( retCode != NAMESPACE(TA_RetCode)TA_SUCCESS ) /* Generated */ { /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx); /* Generated */ VALUE_HANDLE_DEREF_TO_ZERO(outNbElement); /* Generated */ return retCode; /* Generated */ } /* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; /* Generated */ return NAMESPACE(TA_RetCode)TA_SUCCESS; /* Generated */ }