📄 ta_sar.c
字号:
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 + -