欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 论坛上的SAR算法如何理解

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4231人关注过本帖树形打印复制链接

主题:论坛上的SAR算法如何理解

帅哥哟,离线,有人找我吗?
sadrick
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
论坛上的SAR算法如何理解  发帖心情 Post By:2015/5/27 18:35:53    Post IP:112.16.94.165[显示全部帖子]

下面的黄色部分  我觉得有点多余  但去掉的话又和原图偏离  请指教!!!!




INPUT:CYC(10,1,100,2);
RUNMODE:0; //使用逐周期运行模式

 

//保证variable声明的变量都尽量在公式的最前面,防止带有IF语句的分支执行影响变量的初始化
variable:Step = 2 / 100; //步长
variable:fMax = 20 / 100; //最大值

 

variable:sarx=0;
variable:Trend=0;
variable:EP=0;
variable:AF=0;

 

//计算高点低点的值放到IF前面,防止前面语句直接退出导致最前CYC个周期的数据无法统计到
highprice:=ref(hhv(high,cyc),1);
lowPrice:=ref(llv(low,cyc),1);

 

原始SAR:SAR(10,2,20);

 

if barpos <= Cyc then
 exit;//不到CYC的统计周期,直接退出等待下个周期再做判断

if barpos = cyc+1 then
begin
 af:=Step;
 ep:=-1;
 if (high[barpos]-high[barpos-1])+(low[barpos]-low[barpos-1]) > 0 then
 begin
  //看跌
  Trend:= -1;
  sarx:=highprice;
 end
 else
 begin
  //看涨
  Trend:= 1;
  sarx:=lowPrice;
 end
 GOTO ENDANDSHOW;//跳转到末尾直接显示
End

//判断出这些日子数据的上涨,或者下跌
if Trend > 0 then
begin
 //是否为跳转标志
 if ep > 0 then
 begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
 end

 
 //如果今日最高价大于前N的最高价,加速因子需要增加
 if high > highprice then
 begin
  af := af+step;
  if af > fmax then
    af := fmax;
 end
 
 fsar := sarx + af * (highprice - sarx);
 //是否跳转
 if fsar > low then
 begin
  trend:=-1;
  ep:=1;
  af:=step;
 end
 sarx:=fsar;
end
else
begin
 if ep > 0 then
 begin
  sarx:=highprice;
  ep:=-1;
  GOTO ENDANDSHOW; //跳转到末尾直接显示
 end

 
 //看跌
 if low < lowPrice then
 begin
  af := af + step;
  if af > fmax then
    af := fmax;
 end
 
 fsar := sarx + af * (lowprice-sarx);
 
 //是否跳转
 if fSar < High then
 begin
  Trend := 1;
  EP := 1;
  AF := Step;
 end
 sarx := fSar;
end

//显示变量
ENDANDSHOW@; //此为语句标号,GOGO语句可以用这个标号直接跳转到这里
ShowSar:sarx;


 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
如下如题如下  发帖心情 Post By:2015/5/28 9:43:16    Post IP:112.16.94.161[显示全部帖子]

老师  ,或者这样说吧   ,因为sar的算法有很多种 ,特别是转折点的定义 , 所以我可以接受金字塔的写法 ,但我还没弄清楚金字塔控制语句的语法机制,所以感觉怪怪的  ,,,
比如说当某个点的SAR满足最后的的那段条件并执行
if fSar < High then
 begin
  YTrend := 1;
  EP := 1;
  AF := Step;
 end
 sarx := fSar;


此时的ytrend和EP 被重新赋予1的值 

当计算下一个点时 ,公式是否从头到尾再算一遍????如果又重新整个公式算一遍  ,那么上面这样的赋值好像没意义  因为公式的一开始
又执行了一遍 
 if barpos = cyc+1 then
 begin
 af:=Step;
 ep:=-1;

或者新的点计算是从哪里开始 ,,, 从我自己手工计算比照了一下  ,似乎新的点是从下面那里开始的,,为什么可以这样
if YTrend > 0 then
begin
 //是否为跳转标志
 if ep > 0 then
 begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
 end
 麻烦老师解答   因为我想将文华的模型里的sar改成金字塔语言的,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
如下如题如下  发帖心情 Post By:2015/5/28 11:07:55    Post IP:112.16.94.161[显示全部帖子]

这里的限制条件弄明白了

但上面的例子还有疑惑

当上一个点满足最后的那段条件
if fSar < High then
 begin
  YTrend := 1;
  EP := 1;
  AF := Step;
 end
 sarx := fSar;
此时的ytrend和EP 被重新赋予1的值 


到下一个点计算时 , 为什么可以用上一个点被新赋值的ytrend和ep(等于1)作为条件     从下面的句子开始重新判断计算  这里有什么机制  有种循环的现象
if YTrend > 0 then
begin
 //是否为跳转标志
 if ep > 0 then
 begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
 end



这里是最不明白的  麻烦老师讲解一下
[此贴子已经被作者于2015/5/28 11:09:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
如下如题如下  发帖心情 Post By:2015/5/28 12:37:17    Post IP:112.16.94.161[显示全部帖子]

不好意思  我表达不清楚

我是说假设上个点已经满足条件fSar < High并重新赋值 
    trend1 := 1;
    EP := 1;

新的一根BAR时,再次从下面代码开始计算 ,  为什么可以用上一个点的ytrend和EP(重新被赋值等于1)的值作为新的一个点的判断条件, 是IF的机制可以可样使用吗
if YTrend > 0 then
begin
 //是否为跳转标志
 if ep > 0 then
 begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
 end
 。。。

。。。

。。。



  


  

 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
如下如题如下  发帖心情 Post By:2015/5/28 13:25:43    Post IP:112.16.94.161[显示全部帖子]

因为一般我们学的简单模型语句都是根据这根K已定义的变量来计算 ,要判断条件 也是使用这根K的值 , 很少用上一根K的变量的值 , 要用的话又要重新定义一次变量  ;而这里似乎就可以循环使用 

按照老师的说法  我举个例子


我原本的想法是 ,5 10 均线金叉就将1的值赋予A和B  ,之后每一根bar b的值加1  ,直到新的金叉产生 ,又重新将1赋值给AB  但写出来之后   B的值指挥不断增加 ,即新的金叉条件成立 也一样  请问哪里出问题了,,麻烦老师!  



VARIABLE:A=0;
VARIABLE:B=0;


ma5:=ma(c,5);
ma10:=ma(C,10);


IF  CROSS(MA5,MA10) THEN
 BEGIN
 A:=1;
 B:=1:
  GOTO ENDANDSHOW;/
 END

IF A>0 THEN
 B:=1+B;

ENDANDSHOW@; 
SA:A;
SB:B; 
 
 
 

 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
如下如题如下  发帖心情 Post By:2015/5/28 13:37:13    Post IP:112.16.94.161[显示全部帖子]

老师,我上面举的例子就是按照这样的逻辑设计 ,5 10 均线金叉就将1的值赋予A和B  ,之后每一根bar b的值加1  ,直到新的金叉产生 , 可是B的值只会一路增加  哪里出错了,帮忙改一下  搞清楚这个例子我想应该可以弄明白这一系列问题了 

 回到顶部