分享

stc指标源码

 老财秘 2021-10-31

int start()

{

   if (Bars <= BarsRequired) return(0);

   int counted_bars = IndicatorCounted();

   double LLV, HHV;

   int shift, n = 1, i;

   // Static variables are used to flag that we already have calculated curves from the previous indicator run

   static bool st1_pass = false;

   static bool st2_pass = false;

   int st1_count = 0;

   bool check_st1 = false, check_st2 = false;

   if (counted_bars < BarsRequired)

   {

      for (i = 1; i <= BarsRequired; i++) ST2[Bars - i] = 0;

      for (i = 1; i <= BarsRequired; i++) ST[Bars - i] = 0;

   }

   if (counted_bars > 0) counted_bars--;

   shift = Bars - counted_bars + BarsRequired - MALong;

   if (shift > Bars - 1) shift = Bars - 1;

   while (shift >= 0)

   {

      double MA_Short = iMA(NULL, 0, MAShort, 0, MODE_EMA, PRICE_CLOSE, shift);

   double MA_Long = iMA(NULL, 0, MALong, 0, MODE_EMA, PRICE_CLOSE, shift);

   MACD[shift] = MA_Short - MA_Long;

      if (n >= Cycle) check_st1 = true;

      else n++;

      if (check_st1)  

      {

         // Finding Max and Min on Cycle of MA differrences (MACD)

         for (i = 0; i < Cycle; i++)

         {

            if (i == 0)

            {

               LLV = MACD[shift + i];

               HHV = MACD[shift + i];

            }

            else

            {

               if (LLV > MACD[shift + i]) LLV = MACD[shift + i];

               if (HHV < MACD[shift + i]) HHV = MACD[shift + i];

            }

         }

         // Calculating first Stochastic

         if (HHV - LLV != 0) ST[shift] = ((MACD[shift] - LLV) / (HHV - LLV)) * 100;

         else {ST[shift] = ST[shift + 1];}

         // Smoothing first Stochastic

         if (st1_pass) ST[shift] = Factor * (ST[shift] - ST[shift + 1]) + ST[shift + 1];

         st1_pass = true;

         // Have enough elements of first Stochastic to proceed to second

         if (st1_count >= Cycle) check_st2 = true;

         else st1_count++;

         if (check_st2)

         {

            // Finding Max and Min on Cycle of first smoothed Stoch

            for (i = 0; i < Cycle; i++)

            {

               if (i == 0)

               {

                  LLV = ST[shift + i];

                  HHV = ST[shift + i];

               }

               else

               {

                  if (LLV > ST[shift + i]) LLV = ST[shift + i];

                  if (HHV < ST[shift + i]) HHV = ST[shift + i];

               }

            }

            // Calculating second Stochastic

            if (HHV - LLV != 0) ST2[shift] = ((ST[shift] - LLV) / (HHV - LLV)) * 100;

            else {ST2[shift] = ST2[shift + 1];}

            // Smoothing second Stochastic

            if (st2_pass) ST2[shift] = Factor * (ST2[shift] - ST2[shift + 1]) + ST2[shift + 1];

            st2_pass = true;

         }

      }

      shift--;

   }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约