您现在的位置:程序化交易>> 期货公式>> (MC)multicharts>> MC知识>>正文内容

麻烦编一个股票软件中WINNER,COST的函数 [MC]

  • MC用户求助:

    在股票软件中经常用到,用MC时,有时候会用到谢谢。

     

  • MC回复讨论一:

    您好,您的需求可能需要一点时间,因为需要确定这两个函数的执行逻辑,请您继续关注论坛!

    (未被解决的帖子都会一直置顶)

     

  • MC回复讨论二:

    cost和winner两个函数见如下代码:

    //winner

    input: pricevalue(numericsimple);

    var: var_down(0), var_total(0), max_back(0);

    max_back=maxbarsback+currentbar-1;

    var_total=0;

    var_down=0;

    for value1=0 to max_back begin

    var_total=var_total+symbol_ticks[value1];

    if pricevalue<=symbol_high[value1] and pricevalue>symbol_low[value1] then

    var_down=var_down+symbol_ticks[value1]*(pricevalue-symbol_low[value1])/(symbol_high[value1]-symbol_low[value1])

    else if pricevalue>symbol_high[value1] or (symbol_high[value1]=symbol_low[value1] and pricevalue=symbol_high[value1]) then

    var_down=var_down+symbol_ticks[value1];

    end;

    winner=var_down/var_total;

     

    //cost

    input: ratio(numericsimple);

    array: arr[](0), arr_p[](0);

    var: max_back(0), price_ratio(0), cost_sum(0);

    max_back=maxbarsback+currentbar;

    array_setmaxindex(arr,max_back-1);

    array_setmaxindex(arr_p,max_back-1);

    if currentbar=1 then begin

    for value1=max_back-1 downto 0 begin

    arr[max_back-1-value1]=symbol_ticks[max_back-1-value1]*(symbol_open[max_back-1-value1]+symbol_close[max_back-1-value1])/2;

    arr_p[max_back-1-value1]=(symbol_open[max_back-1-value1]+symbol_close[max_back-1-value1])/2;

    end;

    end

    else begin

    arr[max_back-1]=symbol_ticks*(symbol_open+symbol_close)/2;

    arr_p[max_back-1]=(symbol_open+symbol_close)/2;

    end;

     

    for value4=0 to max_back-1 begin

    for value5=value4+1 to max_back-1 begin

    if arr_p[value4]>arr_p[value5] then begin

    value6=arr_p[value5];

    arr_p[value5]=arr_p[value4];

    arr_p[value4]=value6;

    value6=arr[value5];

    arr[value5]=arr[value4];

    arr[value4]=value6;

    end;

    end;

    end;

    price_ratio=0;

    cost_sum=array_sum(arr,0,max_back-1);

    for value1=0 to max_back-1 begin

    price_ratio=price_ratio+arr[value1];

    if price_ratio/cost_sum>=ratio*0.01 then begin

    cost=arr_p[value1];

    break;

    end;

     

    end;

    简要说明:

    1.winner(price)函数主要是从图表上最左边的bar开始统计到当根bar,统计小于等于价格price的成交量与所有已经统计的bar的成交量之比。
    2. cost(1)函数主要是从图表上最左边的bar开始统计到当根bar,每根bar取一个价格样本(这里取的是开盘价与收盘价的中间价作为样本)和成交量样本,建立两个数组分别存储价格样本、成交量样本与价格样本的乘积;之后对价格样本进行排序,然后通过对价格样本for循环来查找使1%的获利盘的价格。
    3.这里使用了symbol系列关键字,所以无论最大bar数量设置成多少,都不会提示出现最大bar数量错误;另外,使用了动态数组,使数组能动态的调整以便存储当根bar的样本。
    4.函数中使用了较大的数组以及多次for循环,所以有一定的计算量,建议使用日线周期。
    5.由于函数是从图表上最左边一根bar开始统计,所以图表数据的初始日期有一定影响返回的值。
    6.这两个函数使用的算法和其它软件上不太一样,但是基本原理类似;没有哪一个算法是准确的,只是一个对现实市场的建模。
    7.下面的链接中提供了三个函数,除了上面两个函数,还有一个是cost_expand,这个函数与cost相比,只是对每根bar取了三个价格样本,使结果更精确,但是计算量也更大。
    8.尽管没有从股票上市那一天开始统计,但是随着市场的进行,初始的值对这两个函数的影响会越来越小,所以这两个函数不用特别要求图表的开始日期从股票的上市日开始。

     

    cost和winner函数代码下载链接:

    http://dl.icetech.com.cn/download/forums/cost%20and%20winner.rar

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容