Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TA-LIB Copyright (c) 1999-2007, Mario Fortier
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * - Neither name of author nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /* List of contributors:
- *
- * Initial Name/description
- * -------------------------------------------------------------------
- * MF Mario Fortier
- *
- *
- * Change history:
- *
- * MMDDYY BY Description
- * -------------------------------------------------------------------
- * 112400 MF Template creation.
- * 052603 MF Adapt code to compile with .NET Managed C++
- *
- */
- /**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/
- /* All code within this section is automatically
- * generated by gen_code. Any modification will be lost
- * next time gen_code is run.
- */
- /* Generated */
- /* Generated */ #if defined( _MANAGED )
- /* Generated */ #include "TA-Lib-Core.h"
- /* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError)
- /* Generated */ namespace TicTacTec { namespace TA { namespace Library {
- /* Generated */ #elif defined( _JAVA )
- /* Generated */ #include "ta_defs.h"
- /* Generated */ #include "ta_java_defs.h"
- /* Generated */ #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError)
- /* Generated */ #else
- /* Generated */ #include <string.h>
- /* Generated */ #include <math.h>
- /* Generated */ #include "ta_func.h"
- /* Generated */ #endif
- /* Generated */
- /* Generated */ #ifndef TA_UTILITY_H
- /* Generated */ #include "ta_utility.h"
- /* Generated */ #endif
- /* Generated */
- /* Generated */ #ifndef TA_MEMORY_H
- /* Generated */ #include "ta_memory.h"
- /* Generated */ #endif
- /* Generated */
- /* Generated */ #define TA_PREFIX(x) TA_##x
- /* Generated */ #define INPUT_TYPE double
- /* Generated */
- /* Generated */ #if defined( _MANAGED )
- /* Generated */ int Core::SmaLookback( int optInTimePeriod ) /* From 2 to 100000 */
- /* Generated */
- /* Generated */ #elif defined( _JAVA )
- /* Generated */ public int smaLookback( int optInTimePeriod ) /* From 2 to 100000 */
- /* Generated */
- /* Generated */ #else
- /* Generated */ int TA_SMA_Lookback( int optInTimePeriod ) /* From 2 to 100000 */
- /* Generated */
- /* Generated */ #endif
- /**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/
- {
- /* insert local variable here */
- /**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/
- /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK
- /* Generated */ /* min/max are checked for optInTimePeriod. */
- /* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
- /* Generated */ optInTimePeriod = 30;
- /* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
- /* Generated */ return -1;
- /* Generated */
- /* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */
- /**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/
- /* insert lookback code here. */
- return optInTimePeriod - 1;
- }
- /**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/
- /*
- * TA_SMA - Simple Moving Average
- *
- * Input = double
- * Output = double
- *
- * Optional Parameters
- * -------------------
- * optInTimePeriod:(From 2 to 100000)
- * Number of period
- *
- *
- */
- /* Generated */
- /* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY )
- /* Generated */ enum class Core::RetCode Core::Sma( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ SubArray^ inReal,
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ [Out]int% outBegIdx,
- /* Generated */ [Out]int% outNBElement,
- /* Generated */ cli::array<double>^ outReal )
- /* Generated */ #elif defined( _MANAGED )
- /* Generated */ enum class Core::RetCode Core::Sma( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ cli::array<double>^ inReal,
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ [Out]int% outBegIdx,
- /* Generated */ [Out]int% outNBElement,
- /* Generated */ cli::array<double>^ outReal )
- /* Generated */ #elif defined( _JAVA )
- /* Generated */ public RetCode sma( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ double inReal[],
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ MInteger outBegIdx,
- /* Generated */ MInteger outNBElement,
- /* Generated */ double outReal[] )
- /* Generated */ #else
- /* Generated */ TA_RetCode TA_SMA( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ const double inReal[],
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ int *outBegIdx,
- /* Generated */ int *outNBElement,
- /* Generated */ double outReal[] )
- /* Generated */ #endif
- /**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/
- {
- /* Insert local variables here. */
- /**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/
- /* Generated */
- /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK
- /* Generated */
- /* Generated */ /* Validate the requested output range. */
- /* 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 */
- /* Generated */ #if !defined(_JAVA)
- /* Generated */ if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
- /* Generated */ #endif /* !defined(_JAVA)*/
- /* Generated */ /* min/max are checked for optInTimePeriod. */
- /* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
- /* Generated */ optInTimePeriod = 30;
- /* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
- /* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
- /* Generated */
- /* Generated */ #if !defined(_JAVA)
- /* Generated */ if( !outReal )
- /* Generated */ return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
- /* Generated */
- /* Generated */ #endif /* !defined(_JAVA) */
- /* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */
- /* Generated */
- /**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/
- return FUNCTION_CALL(INT_SMA)( startIdx, endIdx,
- inReal, optInTimePeriod,
- outBegIdx, outNBElement, outReal );
- }
- #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT)
- enum class Core::RetCode Core::TA_INT_SMA( int startIdx,
- int endIdx,
- SubArray^ inReal,
- int optInTimePeriod,
- [Out]int% outBegIdx,
- [Out]int% outNBElement,
- cli::array<double>^ outReal)
- #elif defined( _MANAGED )
- enum class Core::RetCode Core::TA_INT_SMA( int startIdx,
- int endIdx,
- cli::array<INPUT_TYPE>^ inReal,
- int optInTimePeriod,
- [Out]int% outBegIdx,
- [Out]int% outNBElement,
- cli::array<double>^ outReal)
- #elif defined( _JAVA )
- RetCode TA_INT_SMA( int startIdx,
- int endIdx,
- INPUT_TYPE inReal[],
- int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */
- MInteger outBegIdx,
- MInteger outNBElement,
- double outReal[] )
- #else
- TA_RetCode TA_PREFIX(INT_SMA)( int startIdx,
- int endIdx,
- const INPUT_TYPE *inReal,
- int optInTimePeriod, /* From 1 to TA_INTEGER_MAX */
- int *outBegIdx,
- int *outNBElement,
- double *outReal )
- #endif
- {
- double periodTotal, tempReal;
- int i, outIdx, trailingIdx, lookbackTotal;
- /* Identify the minimum number of price bar needed
- * to calculate at least one output.
- */
- lookbackTotal = (optInTimePeriod-1);
- /* Move up the start index if there is not
- * 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);
- }
- /* Do the MA calculation using tight loops. */
- /* Add-up the initial period, except for the last value. */
- periodTotal = 0;
- trailingIdx = startIdx-lookbackTotal;
- i=trailingIdx;
- if( optInTimePeriod > 1 )
- {
- while( i < startIdx )
- periodTotal += inReal[i++];
- }
- /* Proceed with the calculation for the requested range.
- * Note that this algorithm allows the inReal and
- * outReal to be the same buffer.
- */
- outIdx = 0;
- do
- {
- periodTotal += inReal[i++];
- tempReal = periodTotal;
- periodTotal -= inReal[trailingIdx++];
- outReal[outIdx++] = tempReal / optInTimePeriod;
- } while( i <= endIdx );
- /* All done. Indicate the output limits and return. */
- VALUE_HANDLE_DEREF(outNBElement) = outIdx;
- VALUE_HANDLE_DEREF(outBegIdx) = startIdx;
- 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::Sma( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ cli::array<float>^ inReal,
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ [Out]int% outBegIdx,
- /* Generated */ [Out]int% outNBElement,
- /* Generated */ cli::array<double>^ outReal )
- /* Generated */ #elif defined( _JAVA )
- /* Generated */ public RetCode sma( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ float inReal[],
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ MInteger outBegIdx,
- /* Generated */ MInteger outNBElement,
- /* Generated */ double outReal[] )
- /* Generated */ #else
- /* Generated */ TA_RetCode TA_S_SMA( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ const float inReal[],
- /* Generated */ int optInTimePeriod, /* From 2 to 100000 */
- /* Generated */ int *outBegIdx,
- /* Generated */ int *outNBElement,
- /* Generated */ double outReal[] )
- /* Generated */ #endif
- /* Generated */ {
- /* 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 */ #endif
- /* Generated */ if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
- /* Generated */ optInTimePeriod = 30;
- /* Generated */ else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
- /* 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 */ return FUNCTION_CALL(INT_SMA)( startIdx, endIdx,
- /* Generated */ inReal, optInTimePeriod,
- /* Generated */ outBegIdx, outNBElement, outReal );
- /* Generated */ }
- /* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT)
- /* Generated */ enum class Core::RetCode Core::TA_INT_SMA( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ SubArray^ inReal,
- /* Generated */ int optInTimePeriod,
- /* Generated */ [Out]int% outBegIdx,
- /* Generated */ [Out]int% outNBElement,
- /* Generated */ cli::array<double>^ outReal)
- /* Generated */ #elif defined( _MANAGED )
- /* Generated */ enum class Core::RetCode Core::TA_INT_SMA( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ cli::array<INPUT_TYPE>^ inReal,
- /* Generated */ int optInTimePeriod,
- /* Generated */ [Out]int% outBegIdx,
- /* Generated */ [Out]int% outNBElement,
- /* Generated */ cli::array<double>^ outReal)
- /* Generated */ #elif defined( _JAVA )
- /* Generated */ RetCode TA_INT_SMA( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ INPUT_TYPE inReal[],
- /* Generated */ int optInTimePeriod,
- /* Generated */ MInteger outBegIdx,
- /* Generated */ MInteger outNBElement,
- /* Generated */ double outReal[] )
- /* Generated */ #else
- /* Generated */ TA_RetCode TA_PREFIX(INT_SMA)( int startIdx,
- /* Generated */ int endIdx,
- /* Generated */ const INPUT_TYPE *inReal,
- /* Generated */ int optInTimePeriod,
- /* Generated */ int *outBegIdx,
- /* Generated */ int *outNBElement,
- /* Generated */ double *outReal )
- /* Generated */ #endif
- /* Generated */ {
- /* Generated */ double periodTotal, tempReal;
- /* Generated */ int i, outIdx, trailingIdx, lookbackTotal;
- /* Generated */ lookbackTotal = (optInTimePeriod-1);
- /* 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 */ periodTotal = 0;
- /* Generated */ trailingIdx = startIdx-lookbackTotal;
- /* Generated */ i=trailingIdx;
- /* Generated */ if( optInTimePeriod > 1 )
- /* Generated */ {
- /* Generated */ while( i < startIdx )
- /* Generated */ periodTotal += inReal[i++];
- /* Generated */ }
- /* Generated */ outIdx = 0;
- /* Generated */ do
- /* Generated */ {
- /* Generated */ periodTotal += inReal[i++];
- /* Generated */ tempReal = periodTotal;
- /* Generated */ periodTotal -= inReal[trailingIdx++];
- /* Generated */ outReal[outIdx++] = tempReal / optInTimePeriod;
- /* 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 */
- /* Generated */ #if defined( _MANAGED )
- /* Generated */ }}} // Close namespace TicTacTec.TA.Lib
- /* Generated */ #endif
- /**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement