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

📄 ta_abstract.c

📁 股票主要技术指标源码
💻 C
📖 第 1 页 / 共 3 页
字号:
   const TA_FuncDef *funcDef;   if( !funcInfo || !handle )   {      return TA_BAD_PARAM;   }   /* Validate that this is a valid funcHandle. */   funcDef = (const TA_FuncDef *)handle;   if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB )   {      return TA_INVALID_HANDLE;   }   *funcInfo = funcDef->funcInfo;     if( !funcDef->funcInfo )      return TA_INVALID_HANDLE;   return TA_SUCCESS;}TA_RetCode TA_GetInputParameterInfo( const TA_FuncHandle *handle,                                     unsigned int paramIndex,                                     const TA_InputParameterInfo **info ){   const TA_FuncDef  *funcDef;   const TA_FuncInfo *funcInfo;   const TA_InputParameterInfo **inputTable;   if( (handle == NULL) || (info == NULL) )   {      return TA_BAD_PARAM;   }   *info = NULL;   /* Validate that this is a valid funcHandle. */   funcDef = (const TA_FuncDef *)handle;   if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB )   {      return TA_INVALID_HANDLE;   }   funcInfo = funcDef->funcInfo;   if( !funcInfo ) return TA_INVALID_HANDLE;   if( paramIndex >= funcInfo->nbInput )   {      return TA_BAD_PARAM;   }   inputTable = (const TA_InputParameterInfo **)funcDef->input;   if( !inputTable )      return TA_INTERNAL_ERROR(2);   *info = inputTable[paramIndex];   if( !(*info) )      return TA_INTERNAL_ERROR(3);   return TA_SUCCESS;}TA_RetCode TA_GetOptInputParameterInfo( const TA_FuncHandle *handle,                                        unsigned int paramIndex,                                        const TA_OptInputParameterInfo **info ){   const TA_FuncDef  *funcDef;   const TA_FuncInfo *funcInfo;   const TA_OptInputParameterInfo **inputTable;   if( (handle == NULL) || (info == NULL) )   {      return TA_BAD_PARAM;   }   *info = NULL;   /* Validate that this is a valid funcHandle. */   funcDef = (const TA_FuncDef *)handle;   if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB )   {      return TA_INVALID_HANDLE;   }   funcInfo = funcDef->funcInfo;   if( !funcInfo )      return TA_INVALID_HANDLE;   if( paramIndex >= funcInfo->nbOptInput )   {      return TA_BAD_PARAM;   }   inputTable = (const TA_OptInputParameterInfo **)funcDef->optInput;   if( !inputTable )      return TA_INTERNAL_ERROR(3);   *info = inputTable[paramIndex];   if( !(*info) )      return TA_INTERNAL_ERROR(4);   return TA_SUCCESS;}TA_RetCode TA_GetOutputParameterInfo( const TA_FuncHandle *handle,                                      unsigned int paramIndex,                                      const TA_OutputParameterInfo **info ){      const TA_FuncDef  *funcDef;   const TA_FuncInfo *funcInfo;   const TA_OutputParameterInfo **outputTable;   if( (handle == NULL) || (info == NULL) )   {      return TA_BAD_PARAM;   }   *info = NULL;   /* Validate that this is a valid funcHandle. */   funcDef = (const TA_FuncDef *)handle;   if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB )   {      return TA_INVALID_HANDLE;   }   funcInfo = funcDef->funcInfo;   if( !funcInfo )   {      return TA_INVALID_HANDLE;   }   if( paramIndex >= funcInfo->nbOutput )   {      return TA_BAD_PARAM;   }   outputTable = (const TA_OutputParameterInfo **)funcDef->output;   if( !outputTable )   {      return TA_INTERNAL_ERROR(4);   }   *info = outputTable[paramIndex];   if( !(*info) )   {      return TA_INTERNAL_ERROR(5);   }   return TA_SUCCESS;}TA_RetCode TA_ParamHolderAlloc( const TA_FuncHandle *handle,                                TA_ParamHolder **allocatedParams ){      TA_FuncDef *funcDef;   unsigned int allocSize, i;   TA_ParamHolderInput    *input;   TA_ParamHolderOptInput *optInput;   TA_ParamHolderOutput   *output;   const TA_FuncInfo *funcInfo;   TA_ParamHolder *newParams;   TA_ParamHolderPriv *newParamsPriv;   const TA_InputParameterInfo    **inputInfo;   const TA_OptInputParameterInfo **optInputInfo;   const TA_OutputParameterInfo   **outputInfo;   /* Validate the parameters. */   if( !handle || !allocatedParams)   {      return TA_BAD_PARAM;   }   /* Validate that this is a valid funcHandle. */   funcDef = (TA_FuncDef *)handle;   if( funcDef->magicNumber != TA_FUNC_DEF_MAGIC_NB )   {      *allocatedParams = NULL;      return TA_INVALID_HANDLE;   }   /* Get the TA_FuncInfo. */   funcInfo = funcDef->funcInfo;   if( !funcInfo ) return TA_INVALID_HANDLE;   /* Allocate the TA_ParamHolder. */   newParams = (TA_ParamHolder *)TA_Malloc( sizeof(TA_ParamHolder) + sizeof(TA_ParamHolderPriv));   if( !newParams )   {      *allocatedParams = NULL;      return TA_ALLOC_ERR;   }   memset( newParams, 0, sizeof(TA_ParamHolder) + sizeof(TA_ParamHolderPriv) );   newParamsPriv = (TA_ParamHolderPriv *)(((char *)newParams)+sizeof(TA_ParamHolder));   newParamsPriv->magicNumber = TA_PARAM_HOLDER_PRIV_MAGIC_NB;   newParams->hiddenData = newParamsPriv;   /* From this point, TA_ParamHolderFree can be safely called. */   /* Allocate the array of structure holding the info    * for each parameter.    */   if( funcInfo->nbInput == 0 ) return TA_INTERNAL_ERROR(2);   allocSize = (funcInfo->nbInput) * sizeof(TA_ParamHolderInput);   input = (TA_ParamHolderInput *)TA_Malloc( allocSize );   if( !input )   {      TA_ParamHolderFree( newParams );      *allocatedParams = NULL;      return TA_ALLOC_ERR;   }   memset( input, 0, allocSize );   newParamsPriv->in = input;   if( funcInfo->nbOptInput == 0 )      optInput = NULL;   else   {      allocSize = (funcInfo->nbOptInput) * sizeof(TA_ParamHolderOptInput);      optInput = (TA_ParamHolderOptInput *)TA_Malloc( allocSize );      if( !optInput )      {         TA_ParamHolderFree( newParams );         *allocatedParams = NULL;         return TA_ALLOC_ERR;      }      memset( optInput, 0, allocSize );   }   newParamsPriv->optIn = optInput;   allocSize = (funcInfo->nbOutput) * sizeof(TA_ParamHolderOutput);   output = (TA_ParamHolderOutput *)TA_Malloc( allocSize );   if( !output )   {      TA_ParamHolderFree( newParams );      *allocatedParams = NULL;      return TA_ALLOC_ERR;   }   memset( output, 0, allocSize );   newParamsPriv->out = output;   newParamsPriv->funcInfo = funcInfo;   inputInfo    = (const TA_InputParameterInfo **)funcDef->input;   optInputInfo = (const TA_OptInputParameterInfo **)funcDef->optInput;   outputInfo   = (const TA_OutputParameterInfo   **)funcDef->output;   for( i=0; i < funcInfo->nbInput; i++ )   {      input[i].inputInfo = inputInfo[i];      newParamsPriv->inBitmap <<= 1;      newParamsPriv->inBitmap |= 1;   }   for( i=0; i < funcInfo->nbOptInput; i++ )   {      optInput[i].optInputInfo = optInputInfo[i];      if( optInput[i].optInputInfo->type == TA_OptInput_RealRange )         optInput[i].data.optInReal = optInputInfo[i]->defaultValue;      else         optInput[i].data.optInInteger = (TA_Integer)optInputInfo[i]->defaultValue;   }   for( i=0; i < funcInfo->nbOutput; i++ )   {      output[i].outputInfo = outputInfo[i];      newParamsPriv->outBitmap <<= 1;      newParamsPriv->outBitmap |= 1;   }   /* Succcess, return the result to the caller. */   *allocatedParams = newParams;   return TA_SUCCESS;}TA_RetCode TA_ParamHolderFree( TA_ParamHolder *paramsToFree ){   TA_ParamHolderPriv     *paramPriv;   TA_ParamHolderInput    *input;   TA_ParamHolderOptInput *optInput;   TA_ParamHolderOutput   *output;   if( !paramsToFree )   {      return TA_SUCCESS;   }   paramPriv = paramsToFree->hiddenData;   if( !paramPriv )   {      return TA_INVALID_PARAM_HOLDER;   }   if( paramPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB )   {      return TA_INVALID_PARAM_HOLDER;   }   optInput = paramPriv->optIn;   if( optInput )      TA_Free( optInput );   input = paramPriv->in;   if( input )      TA_Free( input );   output = paramPriv->out;   if( output )      TA_Free( output );   TA_Free( paramsToFree );   return TA_SUCCESS;}TA_RetCode TA_SetInputParamIntegerPtr( TA_ParamHolder *param,                                                                              unsigned int paramIndex,                                       const TA_Integer *value ){      TA_ParamHolderPriv *paramHolderPriv;   const TA_InputParameterInfo *paramInfo;   const TA_FuncInfo *funcInfo;   if( (param == NULL) || (value == NULL) )   {      return TA_BAD_PARAM;   }   paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData);   if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB )   {      return TA_INVALID_PARAM_HOLDER;   }   /* Make sure this index really exist. */   funcInfo = paramHolderPriv->funcInfo;   if( !funcInfo ) return TA_INVALID_HANDLE;   if( paramIndex >= funcInfo->nbInput )   {      return TA_BAD_PARAM;   }      /* Verify the type of the parameter. */   paramInfo = paramHolderPriv->in[paramIndex].inputInfo;   if( !paramInfo ) return TA_INTERNAL_ERROR(2);   if( paramInfo->type != TA_Input_Integer )   {      return TA_INVALID_PARAM_HOLDER_TYPE;   }   /* keep a copy of the provided parameter. */   paramHolderPriv->in[paramIndex].data.inInteger = value;    /* This parameter is now initialized, clear the corresponding bit. */   paramHolderPriv->inBitmap &= ~(1<<paramIndex);   return TA_SUCCESS;}TA_RetCode TA_SetInputParamRealPtr( TA_ParamHolder *param,                                    unsigned int paramIndex,                                    const TA_Real *value ){      TA_ParamHolderPriv *paramHolderPriv;   const TA_InputParameterInfo *paramInfo;   const TA_FuncInfo *funcInfo;   if( (param == NULL) || (value == NULL) )   {      return TA_BAD_PARAM;   }   paramHolderPriv = (TA_ParamHolderPriv *)(param->hiddenData);   if( paramHolderPriv->magicNumber != TA_PARAM_HOLDER_PRIV_MAGIC_NB )   {      return TA_INVALID_PARAM_HOLDER;   }   /* Make sure this index really exist. */   funcInfo = paramHolderPriv->funcInfo;   if( !funcInfo ) return TA_INVALID_HANDLE;   if( paramIndex >= funcInfo->nbInput )   {      return TA_BAD_PARAM;   }      /* Verify the type of the parameter. */   paramInfo = paramHolderPriv->in[paramIndex].inputInfo;   if( !paramInfo ) return TA_INTERNAL_ERROR(2);   if( paramInfo->type != TA_Input_Real )   {      return TA_INVALID_PARAM_HOLDER_TYPE;   }   /* keep a copy of the provided parameter. */   paramHolderPriv->in[paramIndex].data.inReal = value;    /* This parameter is now initialized, clear the corresponding bit. */   paramHolderPriv->inBitmap &= ~(1<<paramIndex);   return TA_SUCCESS;}TA_RetCode TA_SetInputParamPricePtr( TA_ParamHolder     *param,                                     unsigned int        paramIndex,                                     const TA_Real      *open,                                     const TA_Real      *high,                                     const TA_Real      *low,                                     const TA_Real      *close,                                     const TA_Real      *volume,                                     const TA_Real      *openInterest ){      TA_ParamHolderPriv *paramHolderPriv;   const TA_InputParameterInfo *paramInfo;

⌨️ 快捷键说明

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