⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ta_mavp.c

📁 股票主要技术指标源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    * enough initial data.    */   if( startIdx < lookbackTotal )      startIdx = lookbackTotal;   /* Make sure there is still something to evaluate. */   if( startIdx > endIdx )   {      VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx);      VALUE_HANDLE_DEREF_TO_ZERO(outNBElement);      return ENUM_VALUE(RetCode,TA_SUCCESS,Success);   }   /* Calculate exact output size */         if( lookbackTotal > startIdx )      tempInt = lookbackTotal;   else	  tempInt = startIdx;   if( tempInt > endIdx )   {	  /* No output */      VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx);      VALUE_HANDLE_DEREF_TO_ZERO(outNBElement);      return ENUM_VALUE(RetCode,TA_SUCCESS,Success);         }      outputSize = endIdx - tempInt + 1;   /* Allocate intermediate local buffer. */   ARRAY_ALLOC(localOutputArray,outputSize);   ARRAY_INT_ALLOC(localPeriodArray,outputSize);   /* Copy caller array of period into local buffer.    * At the same time, truncate to min/max.	*/   for( i=0; i < outputSize; i++ )   {      tempInt = (int)(inPeriods[startIdx+i]);	  if( tempInt < optInMinPeriod )		  tempInt = optInMinPeriod;	  else if( tempInt > optInMaxPeriod )          tempInt = optInMaxPeriod;      localPeriodArray[i] = tempInt;   }   /* Process each element of the input.     * For each possible period value, the MA is calculated 	* only once.	* The outReal is then fill up for all element with	* the same period.	* A local flag (value 0) is set in localPeriodArray	* to avoid doing a second time the same calculation.	*/      for( i=0; i < outputSize; i++ )   {	   curPeriod = localPeriodArray[i];	   if( curPeriod != 0 )	   {           /* TODO: This portion of the function can be slightly speed             *       optimized by making the function without unstable period 	        *       start their calculation at 'startIdx+i' instead of startIdx.				        */		   /* Calculation of the MA required. */		   retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal,			                            curPeriod, optInMAType,									    VALUE_HANDLE_OUT(localBegIdx),VALUE_HANDLE_OUT(localNbElement),localOutputArray );           if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) )		   {              ARRAY_FREE(localOutputArray);			  ARRAY_INT_FREE(localPeriodArray);              VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx);              VALUE_HANDLE_DEREF_TO_ZERO(outNBElement);              return retCode;	       }		   		   outReal[i] = localOutputArray[i];		   for( j=i+1; j < outputSize; j++ )		   {			   if( localPeriodArray[j] == curPeriod )			   {				   localPeriodArray[j] = 0; /* Flag to avoid recalculation */				   outReal[j] = localOutputArray[j];			   }		   }		   	   }   }   ARRAY_FREE(localOutputArray);   ARRAY_INT_FREE(localPeriodArray);   /* Done. Inform the caller of the success. */   VALUE_HANDLE_DEREF(outBegIdx) = startIdx;   VALUE_HANDLE_DEREF(outNBElement) = outputSize;   return ENUM_VALUE(RetCode,TA_SUCCESS,Success);}/**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****//* Generated */ /* Generated */ #define  USE_SINGLE_PRECISION_INPUT/* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA )/* Generated */    #undef   TA_PREFIX/* Generated */    #define  TA_PREFIX(x) TA_S_##x/* Generated */ #endif/* Generated */ #undef   INPUT_TYPE/* Generated */ #define  INPUT_TYPE float/* Generated */ #if defined( _MANAGED )/* Generated */ enum class Core::RetCode Core::MovingAverageVariablePeriod( int    startIdx,/* Generated */                                                             int    endIdx,/* Generated */                                                             cli::array<float>^ inReal,/* Generated */                                                             cli::array<float>^ inPeriods,/* Generated */                                                             int           optInMinPeriod, /* From 2 to 100000 *//* Generated */                                                             int           optInMaxPeriod, /* From 2 to 100000 *//* Generated */                                                             MAType        optInMAType,/* Generated */                                                             [Out]int%    outBegIdx,/* Generated */                                                             [Out]int%    outNBElement,/* Generated */                                                             cli::array<double>^  outReal )/* Generated */ #elif defined( _JAVA )/* Generated */ public RetCode movingAverageVariablePeriod( int    startIdx,/* Generated */                                             int    endIdx,/* Generated */                                             float        inReal[],/* Generated */                                             float        inPeriods[],/* Generated */                                             int           optInMinPeriod, /* From 2 to 100000 *//* Generated */                                             int           optInMaxPeriod, /* From 2 to 100000 *//* Generated */                                             MAType        optInMAType,/* Generated */                                             MInteger     outBegIdx,/* Generated */                                             MInteger     outNBElement,/* Generated */                                             double        outReal[] )/* Generated */ #else/* Generated */ TA_RetCode TA_S_MAVP( int    startIdx,/* Generated */                       int    endIdx,/* Generated */                       const float  inReal[],/* Generated */                       const float  inPeriods[],/* Generated */                       int           optInMinPeriod, /* From 2 to 100000 *//* Generated */                       int           optInMaxPeriod, /* From 2 to 100000 *//* Generated */                       TA_MAType     optInMAType,/* Generated */                       int          *outBegIdx,/* Generated */                       int          *outNBElement,/* Generated */                       double        outReal[] )/* Generated */ #endif/* Generated */ {/* Generated */    int i, j, lookbackTotal, outputSize, tempInt, curPeriod;/* Generated */    ARRAY_INT_REF(localPeriodArray);/* Generated */    ARRAY_REF(localOutputArray);/* Generated */    VALUE_HANDLE_INT(localBegIdx);/* Generated */    VALUE_HANDLE_INT(localNbElement);/* Generated */    ENUM_DECLARATION(RetCode) retCode;/* 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( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     if( !inPeriods ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #endif /* Generated */     if( (int)optInMinPeriod == TA_INTEGER_DEFAULT )/* Generated */        optInMinPeriod = 2;/* Generated */     else if( ((int)optInMinPeriod < 2) || ((int)optInMinPeriod > 100000) )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     if( (int)optInMaxPeriod == TA_INTEGER_DEFAULT )/* Generated */        optInMaxPeriod = 30;/* Generated */     else if( ((int)optInMaxPeriod < 2) || ((int)optInMaxPeriod > 100000) )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #if !defined(_MANAGED) && !defined(_JAVA)/* Generated */     if( (int)optInMAType == TA_INTEGER_DEFAULT )/* Generated */        optInMAType = (TA_MAType)0;/* Generated */     else if( ((int)optInMAType < 0) || ((int)optInMAType > 8) )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #endif /* Generated */     #if !defined(_JAVA)/* Generated */     if( !outReal )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #endif /* Generated */  #endif /* Generated */    lookbackTotal = LOOKBACK_CALL(MA)(optInMaxPeriod,optInMAType);/* 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 */    if( lookbackTotal > startIdx )/* Generated */       tempInt = lookbackTotal;/* Generated */    else/* Generated */ 	  tempInt = startIdx;/* Generated */    if( tempInt > 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 */    outputSize = endIdx - tempInt + 1;/* Generated */    ARRAY_ALLOC(localOutputArray,outputSize);/* Generated */    ARRAY_INT_ALLOC(localPeriodArray,outputSize);/* Generated */    for( i=0; i < outputSize; i++ )/* Generated */    {/* Generated */       tempInt = (int)(inPeriods[startIdx+i]);/* Generated */ 	  if( tempInt < optInMinPeriod )/* Generated */ 		  tempInt = optInMinPeriod;/* Generated */ 	  else if( tempInt > optInMaxPeriod )/* Generated */           tempInt = optInMaxPeriod;/* Generated */       localPeriodArray[i] = tempInt;/* Generated */    }/* Generated */    for( i=0; i < outputSize; i++ )/* Generated */    {/* Generated */ 	   curPeriod = localPeriodArray[i];/* Generated */ 	   if( curPeriod != 0 )/* Generated */ 	   {/* Generated */ 		   retCode = FUNCTION_CALL(MA)( startIdx, endIdx, inReal,/* Generated */ 			                            curPeriod, optInMAType,/* Generated */ 									    VALUE_HANDLE_OUT(localBegIdx),VALUE_HANDLE_OUT(localNbElement),localOutputArray );/* Generated */            if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) )/* Generated */ 		   {/* Generated */               ARRAY_FREE(localOutputArray);/* Generated */ 			  ARRAY_INT_FREE(localPeriodArray);/* Generated */               VALUE_HANDLE_DEREF_TO_ZERO(outBegIdx);/* Generated */               VALUE_HANDLE_DEREF_TO_ZERO(outNBElement);/* Generated */               return retCode;/* Generated */ 	       }/* Generated */ 		   outReal[i] = localOutputArray[i];/* Generated */ 		   for( j=i+1; j < outputSize; j++ )/* Generated */ 		   {/* Generated */ 			   if( localPeriodArray[j] == curPeriod )/* Generated */ 			   {/* Generated */ 				   localPeriodArray[j] = 0; /* Generated */ 				   outReal[j] = localOutputArray[j];/* Generated */ 			   }/* Generated */ 		   }		   /* Generated */ 	   }/* Generated */    }/* Generated */    ARRAY_FREE(localOutputArray);/* Generated */    ARRAY_INT_FREE(localPeriodArray);/* Generated */    VALUE_HANDLE_DEREF(outBegIdx) = startIdx;/* Generated */    VALUE_HANDLE_DEREF(outNBElement) = outputSize;/* Generated */    return ENUM_VALUE(RetCode,TA_SUCCESS,Success);/* Generated */ }/* Generated */ /* Generated */ #if defined( _MANAGED )/* Generated */ }}} // Close namespace TicTacTec.TA.Lib/* Generated */ #endif/**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -