/* Generated */ TA_RetCode TA_S_CDL2CROWS( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inOpen[], /* Generated */ const float inHigh[], /* Generated */ const float inLow[], /* Generated */ const float inClose[], /* Generated */ int *outBegIdx, /* Generated */ int *outNBElement, /* Generated */ int outInteger[] ) /* Generated */ #endif /* Generated */ { /* Generated */ double BodyLongPeriodTotal; /* Generated */ int i, outIdx, BodyLongTrailingIdx, lookbackTotal; /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK /* Generated */ if( startIdx < 0 ) /* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex); /* Generated */ if( (endIdx < 0) || (endIdx < startIdx)) /* Generated */ return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex); /* Generated */ #if !defined(_JAVA) /* Generated */ if(!inOpen||!inHigh||!inLow||!inClose) /* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); /* Generated */ #endif /* Generated */ #if !defined(_JAVA) /* Generated */ if( !outInteger ) /* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam); /* Generated */ #endif /* Generated */ #endif /* Generated */ lookbackTotal = LOOKBACK_CALL(CDL2CROWS)(); /* 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 ENUM_VALUE(RetCode,TA_SUCCESS,Success); /* Generated */ } /* Generated */ BodyLongPeriodTotal = 0; /* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(BodyLong); /* Generated */ i = BodyLongTrailingIdx; /* Generated */ while( i < startIdx-2 ) { /* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i ); /* Generated */ i++; /* Generated */ } /* Generated */ i = startIdx; /* Generated */ outIdx = 0; /* Generated */ do /* Generated */ { /* Generated */ #ifdef TA_LIB_PRO /* Generated */ #else /* Generated */ if( TA_CANDLECOLOR(i-2) == 1 && // 1st: white /* Generated */ TA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // long /* Generated */ TA_CANDLECOLOR(i-1) == -1 && // 2nd: black /* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up /* Generated */ TA_CANDLECOLOR(i) == -1 && // 3rd: black /* Generated */ inOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // opening within 2nd rb /* Generated */ inClose[i] > inOpen[i-2] && inClose[i] < inClose[i-2] // closing within 1st rb /* Generated */ ) /* Generated */ #endif /* Generated */ outInteger[outIdx++] = -100; /* Generated */ else /* Generated */ outInteger[outIdx++] = 0; /* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx ); /* Generated */ i++; /* Generated */ BodyLongTrailingIdx++; /* Generated */ } while( i <= endIdx ); /* Generated */ VALUE_HANDLE_DEREF(outNBElement) = outIdx; /* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; /* Generated */ return ENUM_VALUE(RetCode,TA_SUCCESS,Success); /* Generated */ }
/* Generated */ TA_RetCode TA_S_CDLEVENINGDOJISTAR( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inOpen[], /* Generated */ const float inHigh[], /* Generated */ const float inLow[], /* Generated */ const float inClose[], /* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ int outInteger[] ) /* Generated */ #endif /* Generated */ { /* Generated */ double BodyDojiPeriodTotal, BodyLongPeriodTotal, BodyShortPeriodTotal; /* Generated */ int i, outIdx, BodyDojiTrailingIdx, BodyLongTrailingIdx, BodyShortTrailingIdx, lookbackTotal; /* 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(!inOpen||!inHigh||!inLow||!inClose) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) /* Generated */ optInPenetration = 3.000000e-1; /* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #if !defined(_MANAGED) && !defined(_JAVA) /* Generated */ if( !outInteger ) /* Generated */ return NAMESPACE(TA_RetCode)TA_BAD_PARAM; /* Generated */ #endif /* Generated */ #endif /* Generated */ lookbackTotal = LOOKBACK_CALL(CDLEVENINGDOJISTAR)(optInPenetration); /* 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 */ BodyLongPeriodTotal = 0; /* Generated */ BodyDojiPeriodTotal = 0; /* Generated */ BodyShortPeriodTotal = 0; /* Generated */ BodyLongTrailingIdx = startIdx -2 - TA_CANDLEAVGPERIOD(TA_BodyLong); /* Generated */ BodyDojiTrailingIdx = startIdx -1 - TA_CANDLEAVGPERIOD(TA_BodyDoji); /* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(TA_BodyShort); /* Generated */ i = BodyLongTrailingIdx; /* Generated */ while( i < startIdx-2 ) { /* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( TA_BodyLong, i ); /* Generated */ i++; /* Generated */ } /* Generated */ i = BodyDojiTrailingIdx; /* Generated */ while( i < startIdx-1 ) { /* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( TA_BodyDoji, i ); /* Generated */ i++; /* Generated */ } /* Generated */ i = BodyShortTrailingIdx; /* Generated */ while( i < startIdx ) { /* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( TA_BodyShort, i ); /* Generated */ i++; /* Generated */ } /* Generated */ i = startIdx; /* Generated */ outIdx = 0; /* Generated */ do /* Generated */ { /* Generated */ if( TA_REALBODY(i-2) > TA_CANDLEAVERAGE( TA_BodyLong, BodyLongPeriodTotal, i-2 ) && // 1st: long /* Generated */ TA_CANDLECOLOR(i-2) == 1 && // white /* Generated */ TA_REALBODY(i-1) <= TA_CANDLEAVERAGE( TA_BodyDoji, BodyDojiPeriodTotal, i-1 ) && // 2nd: doji /* Generated */ TA_REALBODYGAPUP(i-1,i-2) && // gapping up /* Generated */ TA_REALBODY(i) > TA_CANDLEAVERAGE( TA_BodyShort, BodyShortPeriodTotal, i ) && // 3rd: longer than short /* Generated */ TA_CANDLECOLOR(i) == -1 && // black real body /* Generated */ inClose[i] < inClose[i-2] - TA_REALBODY(i-2) * optInPenetration // closing well within 1st rb /* Generated */ ) /* Generated */ outInteger[outIdx++] = -100; /* Generated */ else /* Generated */ outInteger[outIdx++] = 0; /* Generated */ BodyLongPeriodTotal += TA_CANDLERANGE( TA_BodyLong, i-2 ) - TA_CANDLERANGE( TA_BodyLong, BodyLongTrailingIdx ); /* Generated */ BodyDojiPeriodTotal += TA_CANDLERANGE( TA_BodyDoji, i-1 ) - TA_CANDLERANGE( TA_BodyDoji, BodyDojiTrailingIdx ); /* Generated */ BodyShortPeriodTotal += TA_CANDLERANGE( TA_BodyShort, i ) - TA_CANDLERANGE( TA_BodyShort, BodyShortTrailingIdx ); /* Generated */ i++; /* Generated */ BodyLongTrailingIdx++; /* Generated */ BodyDojiTrailingIdx++; /* Generated */ BodyShortTrailingIdx++; /* Generated */ } while( i <= endIdx ); /* Generated */ VALUE_HANDLE_DEREF(outNbElement) = outIdx; /* Generated */ VALUE_HANDLE_DEREF(outBegIdx) = startIdx; /* Generated */ return NAMESPACE(TA_RetCode)TA_SUCCESS; /* Generated */ }
/* Generated */ TA_RetCode TA_S_CDLMATHOLD( int startIdx, /* Generated */ int endIdx, /* Generated */ const float inOpen[], /* Generated */ const float inHigh[], /* Generated */ const float inLow[], /* Generated */ const float inClose[], /* Generated */ double optInPenetration, /* From 0 to TA_REAL_MAX */ /* Generated */ int *outBegIdx, /* Generated */ int *outNbElement, /* Generated */ int outInteger[] ) /* Generated */ #endif /* Generated */ { /* Generated */ double BodyPeriodTotal[5]; /* Generated */ int i, outIdx, totIdx, BodyShortTrailingIdx, BodyLongTrailingIdx, lookbackTotal; /* 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(!inOpen||!inHigh||!inLow||!inClose) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( optInPenetration == TA_REAL_DEFAULT ) /* Generated */ optInPenetration = 5.000000e-1; /* Generated */ else if( (optInPenetration < 0.000000e+0) || (optInPenetration > 3.000000e+37) ) /* Generated */ return TA_BAD_PARAM; /* Generated */ if( outInteger == NULL ) /* Generated */ return TA_BAD_PARAM; /* Generated */ #endif /* Generated */ lookbackTotal = TA_CDLMATHOLD_Lookback(optInPenetration); /* Generated */ if( startIdx < lookbackTotal ) /* Generated */ startIdx = lookbackTotal; /* Generated */ if( startIdx > endIdx ) /* Generated */ { /* Generated */ *outBegIdx = 0; /* Generated */ *outNbElement = 0; /* Generated */ return TA_SUCCESS; /* Generated */ } /* Generated */ BodyPeriodTotal[4] = 0; /* Generated */ BodyPeriodTotal[3] = 0; /* Generated */ BodyPeriodTotal[2] = 0; /* Generated */ BodyPeriodTotal[1] = 0; /* Generated */ BodyPeriodTotal[0] = 0; /* Generated */ BodyShortTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(TA_BodyShort); /* Generated */ BodyLongTrailingIdx = startIdx - TA_CANDLEAVGPERIOD(TA_BodyLong); /* Generated */ i = BodyShortTrailingIdx; /* Generated */ while( i < startIdx ) { /* Generated */ BodyPeriodTotal[3] += TA_CANDLERANGE( TA_BodyShort, i-3 ); /* Generated */ BodyPeriodTotal[2] += TA_CANDLERANGE( TA_BodyShort, i-2 ); /* Generated */ BodyPeriodTotal[1] += TA_CANDLERANGE( TA_BodyShort, i-1 ); /* Generated */ i++; /* Generated */ } /* Generated */ i = BodyLongTrailingIdx; /* Generated */ while( i < startIdx ) { /* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( TA_BodyLong, i-4 ); /* Generated */ i++; /* Generated */ } /* Generated */ i = startIdx; /* Generated */ outIdx = 0; /* Generated */ do /* Generated */ { /* Generated */ if( // 1st long, then 3 small /* Generated */ TA_REALBODY(i-4) > TA_CANDLEAVERAGE( TA_BodyLong, BodyPeriodTotal[4], i-4 ) && /* Generated */ TA_REALBODY(i-3) < TA_CANDLEAVERAGE( TA_BodyShort, BodyPeriodTotal[3], i-3 ) && /* Generated */ TA_REALBODY(i-2) < TA_CANDLEAVERAGE( TA_BodyShort, BodyPeriodTotal[2], i-2 ) && /* Generated */ TA_REALBODY(i-1) < TA_CANDLEAVERAGE( TA_BodyShort, BodyPeriodTotal[1], i-1 ) && /* Generated */ // white, black, 2 black or white, white /* Generated */ TA_CANDLECOLOR(i-4) == 1 && /* Generated */ TA_CANDLECOLOR(i-3) == -1 && /* Generated */ TA_CANDLECOLOR(i) == 1 && /* Generated */ // upside gap 1st to 2nd /* Generated */ TA_REALBODYGAPUP(i-3,i-4) && /* Generated */ // 3rd to 4th hold within 1st: a part of the real body must be within 1st real body /* Generated */ min(inOpen[i-2], inClose[i-2]) < inClose[i-4] && /* Generated */ min(inOpen[i-1], inClose[i-1]) < inClose[i-4] && /* Generated */ // reaction days penetrate first body less than optInPenetration percent /* Generated */ min(inOpen[i-2], inClose[i-2]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && /* Generated */ min(inOpen[i-1], inClose[i-1]) > inClose[i-4] - TA_REALBODY(i-4) * optInPenetration && /* Generated */ // 2nd to 4th are falling /* Generated */ max(inClose[i-2], inOpen[i-2]) < inOpen[i-3] && /* Generated */ max(inClose[i-1], inOpen[i-1]) < max(inClose[i-2], inOpen[i-2]) && /* Generated */ // 5th opens above the prior close /* Generated */ inOpen[i] > inClose[i-1] && /* Generated */ // 5th closes above the highest high of the reaction days /* Generated */ inClose[i] > max(max(inHigh[i-3], inHigh[i-2]), inHigh[i-1]) /* Generated */ ) /* Generated */ outInteger[outIdx++] = 100; /* Generated */ else /* Generated */ outInteger[outIdx++] = 0; /* Generated */ BodyPeriodTotal[4] += TA_CANDLERANGE( TA_BodyLong, i-4 ) - TA_CANDLERANGE( TA_BodyLong, BodyLongTrailingIdx-4 ); /* Generated */ for (totIdx = 3; totIdx >= 1; --totIdx) /* Generated */ BodyPeriodTotal[totIdx] += TA_CANDLERANGE( TA_BodyShort, i-totIdx ) /* Generated */ - TA_CANDLERANGE( TA_BodyShort, BodyShortTrailingIdx-totIdx ); /* Generated */ i++; /* Generated */ BodyShortTrailingIdx++; /* Generated */ BodyLongTrailingIdx++; /* Generated */ } while( i <= endIdx ); /* Generated */ *outNbElement = outIdx; /* Generated */ *outBegIdx = startIdx; /* Generated */ return TA_SUCCESS; /* Generated */ }