Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将反向移动平均公式转换为C#_C#_Moving Average_Trading_Algorithmic Trading_Quantitative Finance - Fatal编程技术网

将反向移动平均公式转换为C#

将反向移动平均公式转换为C#,c#,moving-average,trading,algorithmic-trading,quantitative-finance,C#,Moving Average,Trading,Algorithmic Trading,Quantitative Finance,我一直绞尽脑汁想把这个公式转换成C,但没有成功 。 我擅长编程,但不擅长数学 其中0

我一直绞尽脑汁想把这个公式转换成C,但没有成功


我擅长编程,但不擅长数学

其中0<λ≤ 1是衰减因子。
当λ<1时,指数加权移动平均值为价格分配更大的权重

与常规的指数移动平均线相反,指数移动平均线 加权到最近的价格,逆指数移动 average为最早的价格和价格分配更大的权重 降低最近价格的重要性


在我看来,这是一个和除以另一个。以下是我试图给出的直截了当的答案。我的结果绝对是平均值,更倾向于列表中较早的条目,但我不知道它们是否正确

double[] m_prices;

public double Rema(int k, double lambda)
{
    // Simple parameter validation
    if(lambda == 0.0 || k == 0)
        return 0.0;

    // Ensure the iteration will not be larger than the number of entries
    int t = m_prices.Length - 1;
    k = Math.Min(t, k);

    double numerator = 0;
    double denominator = 0;
    for (int j = 0; j <= k; j++)
    {
        // Preform the 2 sigma operations from the formula
        numerator += Math.Pow(lambda, k-j) * m_prices[t - j];
        denominator += Math.Pow(lambda, k-j);
    }

    // Simple error check
    if (denominator == 0.0)
        return 0.0;
    return numerator / denominator;
}
double[]m_价格;
公共双Rema(整数k,双λ)
{
//简单参数验证
如果(λ=0.0 | | k==0)
返回0.0;
//确保迭代次数不会大于条目数
int t=m_.Length-1;
k=数学最小值(t,k);
双分子=0;
双分母=0;
对于(int j=0;j高效
REMA()
,带有错误检查和特定于上下文的返回值 高效?是的,避免重复昂贵的操作(或依赖编译器优化技巧)

带有错误检查功能?是的,几乎是Q/a程序的必备功能

特定于上下文?是,返回
{-1.|REMA(k,lambda)}
,允许调用方处理输入错误的情况

double[]fTimeSeriesPRICE;//一个正向步进存储器(与MT4反向步进模型相比)
公共双REMA(整数k,双λ)
{   
如果(λ1.0/)不应超过1.0

||感谢您提出有关堆栈溢出的问题!为了让我们帮助您,您必须发布一些您尝试过的代码,并更具体地说明您遇到的一些问题。如果int k<0(由于指针代数)和lambda<0,建议的方案将失败(由于下溢,定义范围给出的上限)和int j永远不会低于0(由于大k-s的反向访问m_价格[]的指针下溢限制),定义失败。如果k感谢您的用户。基本上我想将其转换为忍者脚本(忍者交易平台)这与MT4在引用图表上的条形图(当前条形图为[0])时类似。如何使用反向步进编码。StackOverflow鼓励用户将问题集中在单个原始主题上。请毫不犹豫地[Accept]这是第一个原始问题的答案,并打开下一个新问题,如您所示。
double[] fTimeSeriesPRICE;     // a forward-stepping storage ( vs. a MT4 reversed-stepping model )

public double REMA( int k, double lambda )
{   
    if (  lambda <= 0.0        // lambda shall not fall on/under  0.0
       || lambda >  1.0        //        shall not grow beyond    1.0
       || k      <= 0          // depth  shall not be negative or 0
       )
       return -1.0;            // context-protecting RET value

    int aCurrentPricePTR  = fTimeSeriesPRICE.Length - 1;
    int aMaxIterableDEPTH = Math.Min( aCurrentPricePTR, k );

    double numerator   = 0.0;
    double denominator = 0.0;  // REMA formula-expansion contains +1 at the end, never less, never negative
    double lambdator   = 1.0;  // lambda ^ ( ( k - j ) == 0 ) == 1.0

    for ( int aReverseSteppingPTR  = 0;
              aReverseSteppingPTR <= aMaxIterableDEPTH;
              aReverseSteppingPTR++
              )
    {   numerator   += lambdator * fTimeSeriesPRICE[aCurrentPricePTR - aReverseSteppingPTR];
        denominator += lambdator;
        lambdator   *= lambda;
    }
    return numerator / denominator; // numerically fair, denominator never < +1.0
}