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

📄 ta_sar.c

📁 股票主要技术指标源码
💻 C
📖 第 1 页 / 共 2 页
字号:
      prevLow  = newLow;      prevHigh = newHigh;      newLow  = inLow[todayIdx];      newHigh = inHigh[todayIdx];         todayIdx++;      SAR_ROUNDING(newLow);      SAR_ROUNDING(newHigh);      if( isLong == 1 )      {           /* Switch to short if the low penetrates the SAR value. */         if( newLow <= sar )         {            /* Switch and Overide the SAR with the ep */            isLong = 0;            sar = ep;            /* Make sure the overide SAR is within             * yesterday's and today's range.             */            if( sar < prevHigh )               sar = prevHigh;                        if( sar < newHigh )               sar = newHigh;            /* Output the overide SAR  */            outReal[outIdx++] = sar;            /* Adjust af and ep */            af = optInAcceleration;            ep = newLow;             /* Calculate the new SAR */            sar = sar + af * (ep - sar);            SAR_ROUNDING( sar );            /* Make sure the new SAR is within             * yesterday's and today's range.             */            if( sar < prevHigh )               sar = prevHigh;                        if( sar < newHigh )               sar = newHigh;         }         else         {            /* No switch */            /* Output the SAR (was calculated in the previous iteration) */            outReal[outIdx++] = sar;             /* Adjust af and ep. */            if( newHigh > ep )            {               ep = newHigh;               af += optInAcceleration;               if( af > optInMaximum )                  af = optInMaximum;            }            /* Calculate the new SAR */            sar = sar + af * (ep - sar);            SAR_ROUNDING( sar );            /* Make sure the new SAR is within             * yesterday's and today's range.             */            if( sar > prevLow )               sar = prevLow;                        if( sar > newLow )               sar = newLow;         }      }      else      {         /* Switch to long if the high penetrates the SAR value. */         if( newHigh >= sar )         {            /* Switch and Overide the SAR with the ep */            isLong = 1;            sar = ep;            /* Make sure the overide SAR is within             * yesterday's and today's range.             */            if( sar > prevLow )               sar = prevLow;                        if( sar > newLow )               sar = newLow;            /* Output the overide SAR  */            outReal[outIdx++] = sar;            /* Adjust af and ep */            af = optInAcceleration;            ep = newHigh;            /* Calculate the new SAR */            sar = sar + af * (ep - sar);            SAR_ROUNDING( sar );            /* Make sure the new SAR is within             * yesterday's and today's range.             */            if( sar > prevLow )               sar = prevLow;                        if( sar > newLow )               sar = newLow;         }         else         {            /* No switch */            /* Output the SAR (was calculated in the previous iteration) */            outReal[outIdx++] = sar;            /* Adjust af and ep. */            if( newLow < ep )            {               ep = newLow;               af += optInAcceleration;               if( af > optInMaximum )                  af = optInMaximum;            }            /* Calculate the new SAR */            sar = sar + af * (ep - sar);            SAR_ROUNDING( sar );            /* Make sure the new SAR is within             * yesterday's and today's range.             */            if( sar < prevHigh )               sar = prevHigh;                        if( sar < newHigh )               sar = newHigh;         }      }   }   VALUE_HANDLE_DEREF(outNBElement) = outIdx;   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::Sar( int    startIdx,/* Generated */                                     int    endIdx,/* Generated */                                     cli::array<float>^ inHigh,/* Generated */                                     cli::array<float>^ inLow,/* Generated */                                     double        optInAcceleration, /* From 0 to TA_REAL_MAX *//* Generated */                                     double        optInMaximum, /* From 0 to TA_REAL_MAX *//* Generated */                                     [Out]int%    outBegIdx,/* Generated */                                     [Out]int%    outNBElement,/* Generated */                                     cli::array<double>^  outReal )/* Generated */ #elif defined( _JAVA )/* Generated */ public RetCode sar( int    startIdx,/* Generated */                     int    endIdx,/* Generated */                     float        inHigh[],/* Generated */                     float        inLow[],/* Generated */                     double        optInAcceleration, /* From 0 to TA_REAL_MAX *//* Generated */                     double        optInMaximum, /* From 0 to TA_REAL_MAX *//* Generated */                     MInteger     outBegIdx,/* Generated */                     MInteger     outNBElement,/* Generated */                     double        outReal[] )/* Generated */ #else/* Generated */ TA_RetCode TA_S_SAR( int    startIdx,/* Generated */                      int    endIdx,/* Generated */                      const float  inHigh[],/* Generated */                      const float  inLow[],/* Generated */                      double        optInAcceleration, /* From 0 to TA_REAL_MAX *//* Generated */                      double        optInMaximum, /* From 0 to TA_REAL_MAX *//* Generated */                      int          *outBegIdx,/* Generated */                      int          *outNBElement,/* Generated */                      double        outReal[] )/* Generated */ #endif/* Generated */ {/* Generated */    ENUM_DECLARATION(RetCode) retCode;/* Generated */    int isLong; /* Generated */    int todayIdx, outIdx;/* Generated */    VALUE_HANDLE_INT(tempInt);/* Generated */    double newHigh, newLow, prevHigh, prevLow;/* Generated */    double af, ep, sar;/* Generated */    ARRAY_LOCAL(ep_temp,1);/* 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(!inHigh||!inLow)/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #endif /* Generated */     if( optInAcceleration == TA_REAL_DEFAULT )/* Generated */        optInAcceleration = 2.000000e-2;/* Generated */     else if( (optInAcceleration < 0.000000e+0) ||  (optInAcceleration > 3.000000e+37) )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     if( optInMaximum == TA_REAL_DEFAULT )/* Generated */        optInMaximum = 2.000000e-1;/* Generated */     else if( (optInMaximum < 0.000000e+0) ||  (optInMaximum > 3.000000e+37) )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #if !defined(_JAVA)/* Generated */     if( !outReal )/* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);/* Generated */     #endif /* Generated */  #endif /* Generated */    if( startIdx < 1 )/* Generated */       startIdx = 1;/* 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 */    af = optInAcceleration;/* Generated */    if( af > optInMaximum )/* Generated */       af = optInAcceleration = optInMaximum;/* Generated */    retCode = FUNCTION_CALL(MINUS_DM)( startIdx, startIdx, inHigh, inLow, 1,/* Generated */                                       VALUE_HANDLE_OUT(tempInt), VALUE_HANDLE_OUT(tempInt),/* Generated */ 								      ep_temp );/* Generated */    if( ep_temp[0] > 0 )/* Generated */       isLong = 0;/* Generated */    else/* Generated */       isLong = 1;/* Generated */    if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,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 */    outIdx = 0;/* Generated */    todayIdx = startIdx;/* Generated */    newHigh = inHigh[todayIdx-1];/* Generated */    newLow  = inLow[todayIdx-1];/* Generated */    SAR_ROUNDING(newHigh);/* Generated */    SAR_ROUNDING(newLow);/* Generated */    if( isLong == 1 )/* Generated */    {/* Generated */       ep  = inHigh[todayIdx];/* Generated */       sar = newLow;/* Generated */    }/* Generated */    else/* Generated */    {/* Generated */       ep  = inLow[todayIdx];/* Generated */       sar = newHigh;/* Generated */    }/* Generated */    SAR_ROUNDING(sar);/* Generated */    newLow  = inLow[todayIdx];/* Generated */    newHigh = inHigh[todayIdx];/* Generated */    while( todayIdx <= endIdx )/* Generated */    {/* Generated */       prevLow  = newLow;/* Generated */       prevHigh = newHigh;/* Generated */       newLow  = inLow[todayIdx];/* Generated */       newHigh = inHigh[todayIdx];   /* Generated */       todayIdx++;/* Generated */       SAR_ROUNDING(newLow);/* Generated */       SAR_ROUNDING(newHigh);/* Generated */       if( isLong == 1 )/* Generated */       {  /* Generated */          if( newLow <= sar )/* Generated */          {/* Generated */             isLong = 0;/* Generated */             sar = ep;/* Generated */             if( sar < prevHigh )/* Generated */                sar = prevHigh;            /* Generated */             if( sar < newHigh )/* Generated */                sar = newHigh;/* Generated */             outReal[outIdx++] = sar;/* Generated */             af = optInAcceleration;/* Generated */             ep = newLow;/* Generated */             sar = sar + af * (ep - sar);/* Generated */             SAR_ROUNDING( sar );/* Generated */             if( sar < prevHigh )/* Generated */                sar = prevHigh;            /* Generated */             if( sar < newHigh )/* Generated */                sar = newHigh;/* Generated */          }/* Generated */          else/* Generated */          {/* Generated */             outReal[outIdx++] = sar;/* Generated */             if( newHigh > ep )/* Generated */             {/* Generated */                ep = newHigh;/* Generated */                af += optInAcceleration;/* Generated */                if( af > optInMaximum )/* Generated */                   af = optInMaximum;/* Generated */             }/* Generated */             sar = sar + af * (ep - sar);/* Generated */             SAR_ROUNDING( sar );/* Generated */             if( sar > prevLow )/* Generated */                sar = prevLow;            /* Generated */             if( sar > newLow )/* Generated */                sar = newLow;/* Generated */          }/* Generated */       }/* Generated */       else/* Generated */       {/* Generated */          if( newHigh >= sar )/* Generated */          {/* Generated */             isLong = 1;/* Generated */             sar = ep;/* Generated */             if( sar > prevLow )/* Generated */                sar = prevLow;            /* Generated */             if( sar > newLow )/* Generated */                sar = newLow;/* Generated */             outReal[outIdx++] = sar;/* Generated */             af = optInAcceleration;/* Generated */             ep = newHigh;/* Generated */             sar = sar + af * (ep - sar);/* Generated */             SAR_ROUNDING( sar );/* Generated */             if( sar > prevLow )/* Generated */                sar = prevLow;            /* Generated */             if( sar > newLow )/* Generated */                sar = newLow;/* Generated */          }/* Generated */          else/* Generated */          {/* Generated */             outReal[outIdx++] = sar;/* Generated */             if( newLow < ep )/* Generated */             {/* Generated */                ep = newLow;/* Generated */                af += optInAcceleration;/* Generated */                if( af > optInMaximum )/* Generated */                   af = optInMaximum;/* Generated */             }/* Generated */             sar = sar + af * (ep - sar);/* Generated */             SAR_ROUNDING( sar );/* Generated */             if( sar < prevHigh )/* Generated */                sar = prevHigh;            /* Generated */             if( sar < newHigh )/* Generated */                sar = newHigh;/* Generated */          }/* Generated */       }/* Generated */    }/* Generated */    VALUE_HANDLE_DEREF(outNBElement) = outIdx;/* 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 + -