均线上穿下穿检查函数

by  faruto

检测两根均线上穿、下破的函数,一些基本的东西,高手绕行。

这里上穿定义:



% 上穿定义:

%   Price1(Index)<Price2(Index) && Price1(Index-1)<Price2(Index-1) 

%   &&  Price1(Index-2)>=Price2(Index-2)

举例来说:对于 5 日均线 MA5 和 20 日均线 MA20,对于检查点 Index,要求

在检查点 Index,MA5>MA20,

前一个点 Index-1,MA5>MA20,

前两个点 Index-2,MA5<=MA20。

因为上穿是一个动作(表示 MA5 从 MA20 的下方穿到其上方),并不是静态当前点 MA5>MA20 就是上穿,之所以要求 前一个点 Index-1,MA5>MA20,和 在检查点 Index,MA5>MA20,是为了对于上穿进行确认,防止假突破。

对于下穿(下破),类似。

上穿检查 MATLA 代码:



function CrossOver_Flag = CrossOver(Price1, Price2, Index)

% 上穿检查

% by liyang 2011/12/13

% farutoliyang@gmail.com

% Input:

%       Price1: 输入的序列1

%       Price2: 输入的序列2

%       Index: 检查位置 

% Output:

%       CrossOver_Flag: 上穿检查结果

%            CrossOver_Flag = 1 在Index索引处上穿

%            CrossOver_Flag = 0 在Index索引处没有上穿

% 上穿定义:

%   Price1(Index)>Price2(Index) && Price1(Index-1)>Price2(Index-1) 

%   &&  Price1(Index-2)<=Price2(Index-2)



%% 输入参数检查

error(nargchk(3, 3, nargin));

if Index < 3

    error('Index should >= 3');

end

%% 上穿检查

CrossOver_Flag = Price1(Index) > Price2(Index) ...

                && Price1(Index-1) > Price2(Index-1) ...

                &&  Price1(Index-2) <= Price2(Index-2);

下穿检查(下破检查)matlab 代码:



function CrossUnder_Flag = CrossUnder(Price1, Price2, Index)

% 下穿检查(下破检查)

% by liyang 2011/12/13

% farutoliyang@gmail.com

% Input:

%       Price1: 输入的序列1

%       Price2: 输入的序列2

%       Index: 检查位置 

% Output:

%       CrossUnder_Flag: 上穿检查结果

%            CrossUnder_Flag = 1 在Index索引处下穿

%            CrossUnder_Flag = 0 在Index索引处没有下穿

% 上穿定义:

%   Price1(Index)<Price2(Index) && Price1(Index-1)<Price2(Index-1) 

%   &&  Price1(Index-2)>=Price2(Index-2)



%% 输入参数检查

error(nargchk(3, 3, nargin));

if Index < 3

    error('Index should >= 3');

end

%% 下穿检查

CrossUnder_Flag = Price1(Index) < Price2(Index) ...

                && Price1(Index-1) < Price2(Index-1) ...

                &&  Price1(Index-2) >= Price2(Index-2);

下穿检查(下破检查)matlab 代码:



function CrossUnder_Flag = CrossUnder(Price1, Price2, Index)

% 下穿检查(下破检查)

% by liyang 2011/12/13

% farutoliyang@gmail.com

% Input:

%       Price1: 输入的序列1

%       Price2: 输入的序列2

%       Index: 检查位置 

% Output:

%       CrossUnder_Flag: 上穿检查结果

%            CrossUnder_Flag = 1 在Index索引处下穿

%            CrossUnder_Flag = 0 在Index索引处没有下穿

% 上穿定义:

%   Price1(Index)<Price2(Index) && Price1(Index-1)<Price2(Index-1) 

%   &&  Price1(Index-2)>=Price2(Index-2)



%% 输入参数检查

error(nargchk(3, 3, nargin));

if Index < 3

    error('Index should >= 3');

end

%% 下穿检查

CrossUnder_Flag = Price1(Index) < Price2(Index) ...

                && Price1(Index-1) < Price2(Index-1) ...

                &&  Price1(Index-2) >= Price2(Index-2);

再看一下 TB 平台下上穿和下破的代码:

TB_CrossOver



//------------------------------------------------------------------------

// 简称: CrossOver

// 名称: 求是否上穿

// 类别: 用户函数

// 类型: 内建函数

// 输出: 布尔型

//------------------------------------------------------------------------



Params

        NumericSeries Price1(1); 

        NumericSeries Price2(1);

Vars

        Bool Con1(False);

        Bool PreCon(False);

        Numeric Counter(0);

Begin

        If(Price1 > Price2)

        {

                Counter = 1;        

                Con1 = Price1[1] == Price2[1];                

                While (Con1 and Counter < CurrentBar)

                {                        

                        Counter = Counter + 1;                         

                        Con1 = Price1[Counter] == Price2[Counter];        

                }

                PreCon = Price1[Counter] < Price2[Counter];

                Return PreCon;

        }Else

        {

                Return False;

        }

End



//------------------------------------------------------------------------

// 编译版本        GS2010.12.08

// 版权所有        TradeBlazer Software 2003-2010

// 更改声明        TradeBlazer Software保留对TradeBlazer平

//                        台每一版本的TradeBlazer公式修改和重写的权利

//------------------------------------------------------------------------

TB_CrossUnder



//------------------------------------------------------------------------

// 简称: CrossUnder

// 名称: 求是否下破

// 类别: 用户函数

// 类型: 内建函数

// 输出: 布尔型

//------------------------------------------------------------------------



Params

        NumericSeries Price1(1); 

        NumericSeries Price2(1);

Vars

        Bool Con1(False);

        Bool PreCon(False);

        Numeric Counter(0);

Begin

        If(Price1 < Price2)

        {

                Counter = 1;        

                Con1 = Price1[1] == Price2[1];                

                While (Con1 and Counter < CurrentBar)

                {                        

                        Counter = Counter + 1;                         

                        Con1 = Price1[Counter] == Price2[Counter];        

                }

                PreCon = Price1[Counter] > Price2[Counter];

                Return PreCon;

        }Else

        {

                Return False;

        }

End



//------------------------------------------------------------------------

// 编译版本        GS2010.12.08

// 版权所有        TradeBlazer Software 2003-2010

// 更改声明        TradeBlazer Software保留对TradeBlazer平

//                        台每一版本的TradeBlazer公式修改和重写的权利

//------------------------------------------------------------------------