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

📄 test_ma.c

📁 股票主要技术指标源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      retCode = TA_SetUnstablePeriod( TA_FUNC_UNST_T3, test->unstablePeriod );      break;   default:      retCode = TA_SUCCESS;      break;   }   if( retCode != TA_SUCCESS )      return TA_TEST_TFRR_SETUNSTABLE_PERIOD_FAIL;   /* Transform the inputs for MAMA (it is an AVGPRICE in John Ehlers book). */   if( test->optInMAType_1 == TA_MAType_MAMA )   {      TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low,                   &outBegIdx, &outNbElement, gBuffer[0].in );      TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low,                   &outBegIdx, &outNbElement, gBuffer[1].in );      /* Will be use as reference */      TA_MEDPRICE( 0, history->nbBars-1, history->high, history->low,                   &outBegIdx, &outNbElement, gBuffer[2].in );      referenceInput = gBuffer[2].in;   }   else      referenceInput = history->close;      /* Make a simple first call. */   switch( test->id )   {   case TA_ANY_MA_TEST:	  if(testMAVP)	  {         retCode = TA_MAVP( test->startIdx,                            test->endIdx,                            gBuffer[0].in,							gBuffer[2].in,							2, test->optInTimePeriod,                            (TA_MAType)test->optInMAType_1,                            &outBegIdx,                            &outNbElement,                            gBuffer[0].out0 );	  }	  else	  {         retCode = TA_MA( test->startIdx,                          test->endIdx,                          gBuffer[0].in,                          test->optInTimePeriod,                          (TA_MAType)test->optInMAType_1,                          &outBegIdx,                          &outNbElement,                          gBuffer[0].out0 );	  }      break;   case TA_MAMA_TEST:      retCode = TA_MAMA( test->startIdx,                         test->endIdx,                         gBuffer[0].in,                         0.5, 0.05,                                                &outBegIdx,                         &outNbElement,                         gBuffer[0].out0,                         gBuffer[0].out2 );     break;   case TA_FAMA_TEST:      retCode = TA_MAMA( test->startIdx,                         test->endIdx,                         gBuffer[0].in,                         0.5, 0.05,                                                &outBegIdx,                         &outNbElement,                         gBuffer[0].out2,                         gBuffer[0].out0 );     break;   }   errNb = checkDataSame( gBuffer[0].in, referenceInput, history->nbBars );   if( errNb != TA_TEST_PASS )      return errNb;   errNb = checkExpectedValue( gBuffer[0].out0,                                retCode, test->expectedRetCode,                               outBegIdx, test->expectedBegIdx,                               outNbElement, test->expectedNbElement,                               test->oneOfTheExpectedOutReal,                               test->oneOfTheExpectedOutRealIndex );      if( errNb != TA_TEST_PASS )      return errNb;   outBegIdx = outNbElement = 0;   /* Make another call where the input and the output are the    * same buffer.    */   switch( test->id )   {   case TA_ANY_MA_TEST:	  if(testMAVP)   	  {      retCode = TA_MAVP( test->startIdx,                       test->endIdx,                       gBuffer[1].in,					   gBuffer[2].in,                       2,test->optInTimePeriod,                       (TA_MAType)test->optInMAType_1,                       &outBegIdx,                       &outNbElement,                       gBuffer[1].in );	  }	  else	  {      retCode = TA_MA( test->startIdx,                       test->endIdx,                       gBuffer[1].in,                       test->optInTimePeriod,                       (TA_MAType)test->optInMAType_1,                       &outBegIdx,                       &outNbElement,                       gBuffer[1].in );	  }      break;   case TA_MAMA_TEST:      retCode = TA_MAMA( test->startIdx,                         test->endIdx,                         gBuffer[1].in,                         0.5, 0.05,                                                &outBegIdx,                         &outNbElement,                         gBuffer[1].in,                         gBuffer[0].out2 );     break;   case TA_FAMA_TEST:      retCode = TA_MAMA( test->startIdx,                         test->endIdx,                         gBuffer[1].in,                         0.5, 0.05,                                                &outBegIdx,                         &outNbElement,                         gBuffer[0].out2,                         gBuffer[1].in );     break;   }   /* The previous call to TA_MA should have the same output    * as this call.    *    * checkSameContent verify that all value different than NAN in    * the first parameter is identical in the second parameter.    */   errNb = checkSameContent( gBuffer[0].out0, gBuffer[1].in );   if( errNb != TA_TEST_PASS )      return errNb;   errNb = checkExpectedValue( gBuffer[1].in,                                retCode, test->expectedRetCode,                               outBegIdx, test->expectedBegIdx,                               outNbElement, test->expectedNbElement,                               test->oneOfTheExpectedOutReal,                               test->oneOfTheExpectedOutRealIndex );      if( errNb != TA_TEST_PASS )      return errNb;  /* Verify that the "all-purpose" TA_MA_Lookback is consistent   * with the corresponding moving average lookback function.   */   if( test->optInTimePeriod >= 2 )   {      switch( test->optInMAType_1 )      {      case TA_MAType_WMA:         temp = TA_WMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_SMA:         temp = TA_SMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_EMA:         temp = TA_EMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_DEMA:         temp = TA_DEMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_TEMA:         temp = TA_TEMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_KAMA:         temp = TA_KAMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_MAMA:         temp = TA_MAMA_Lookback( 0.5, 0.05 );         break;         case TA_MAType_TRIMA:         temp = TA_TRIMA_Lookback( test->optInTimePeriod );         break;         case TA_MAType_T3:         temp = TA_T3_Lookback( test->optInTimePeriod, 0.7 );         break;         default:         return TA_TEST_TFRR_BAD_MA_TYPE;      }         temp2 = TA_MA_Lookback( test->optInTimePeriod, (TA_MAType)test->optInMAType_1 );         if( temp != temp2 )      {         printf( "\nFailed for MA Type #%d for period %d\n", test->optInMAType_1, test->optInTimePeriod );         return TA_TEST_TFFR_BAD_MA_LOOKBACK;      }    }   /* Do a systematic test of most of the    * possible startIdx/endIdx range.    */   testParam.test  = test;   testParam.close = referenceInput;   testParam.testMAVP = testMAVP;   testParam.mavpPeriod = gBuffer[2].in;   if( test->doRangeTestFlag )   {      switch( test->optInMAType_1 )      {      case TA_MAType_TEMA:      case TA_MAType_DEMA:      case TA_MAType_EMA:         errNb = doRangeTest( rangeTestFunction,                               TA_FUNC_UNST_EMA,                              (void *)&testParam, 1, 0 );         break;      case TA_MAType_T3:         errNb = doRangeTest( rangeTestFunction,                               TA_FUNC_UNST_T3,                              (void *)&testParam, 1, 0 );         break;      case TA_MAType_KAMA:         errNb = doRangeTest( rangeTestFunction,                               TA_FUNC_UNST_KAMA,                              (void *)&testParam, 1, 0 );         break;      case TA_MAType_MAMA:         errNb = doRangeTest( rangeTestFunction,                               TA_FUNC_UNST_MAMA,                              (void *)&testParam, 2, 0 );         break;      default:         errNb = doRangeTest( rangeTestFunction,                               TA_FUNC_UNST_NONE,                              (void *)&testParam, 1, 0 );      }      if( errNb != TA_TEST_PASS )         return errNb;   }   return TA_TEST_PASS;}

⌨️ 快捷键说明

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