5[i过]系统自带Parabolic 汉译SAR

//[i]试译SAR

property indicator_chart_window

property indicator_buffers 1

property indicator_color1 Yellow

input double 增速因子= 0.008;
input double 增速极限= 0.3;

double 箭头组[];
double 增幅;
double 幅极值;
int 最后反转时;
bool 看涨方向;
double 最后保存步幅,
最后保存对比值,
最后保存SAR值;
double 最后保存高,
最后保存低;

//+-----------------初始化-----------------+

void OnInit()
{
//---检查参数
if(增速因子<0.0){
增幅= 0.02;
Print("输入的步幅参数为无效值. 参数将恢复为:",增幅);
}
else
增幅= 增速因子;

if(增速极限<0.0){
幅极值= 0.2;
Print("输入的最大限参数为无效值. 参数将恢复为:",幅极值);
}
else
幅极值= 增速极限;

//--- 设置绘图参数
IndicatorDigits(Digits);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,159);

//----指标缓存组
SetIndexBuffer(0,箭头组);
//--- 设置指标名称
IndicatorShortName("SAR("+DoubleToString(增幅,2)+","+DoubleToString(幅极值,2)+")");

//--- 设置全局初值
最后反转时= 0;
看涨方向= false;
最后保存步幅= 最后保存对比值= 最后保存SAR值= 0.0;
最后保存高= 最后保存低= 0.0;
}

//+-------------------主函数---------------------+

int OnCalculate(const int 总棒数, const int 前已计,
const datetime &time[],
const double &open[], const double &high[],
const double &low[], const double &close[],
const long& tick_volume[], const long& volume[],
const int& spread[]){
bool 现为涨;
double 最后高,
最后低,
标记值, // 用于对比的前一个标记值
SAR值,
步幅;
int i;

//--- 检查最少的K线数
if(总棒数<3)
return(0);

//--- 从0到K线总数计数
ArraySetAsSeries(箭头组,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);

//--- 当前位置
i= 前已计-1;

//--- 从主函数里开始计算?
if(i<1){
最后反转时= 0;
现为涨= true;
步幅= 增幅;
最后高= -10000000.0;
最后低= 10000000.0;
SAR值= 0;
i= 1;

  while(i<总棒数-1){
     最后反转时= i;
     if(最后低>low[i])
        最后低= low[i];
     if(最后高<high[i])
        最后高= high[i];
     if(high[i]>high[i-1] && low[i]>low[i-1])
        break;

     if(high[i]<high[i-1] && low[i]<low[i-1]){
        现为涨= false;
        break;
       }

     i++;
    }

  //--- 初始化归0
  ArrayInitialize(箭头组,0.0);

  //--- go check
  if(现为涨){
     箭头组[i]= low[i-1];
     标记值= high[i];
    }
  else{
     箭头组[i]= high[i-1];
     标记值= low[i];
    }
    
  i++;
 }

else{
//---恢复成最后值
i= 最后反转时;
步幅= 最后保存步幅;
现为涨= 看涨方向;
最后高= 最后保存高;
最后低= 最后保存低;
标记值= 最后保存对比值;
SAR值= 最后保存SAR值;
}

//---主要步骤
while(i<总棒数){
//--涨转跌
if(现为涨 && low[i]<箭头组[i-1]){
最后保存记录子(i,true,步幅,low[i],最后高,标记值,SAR值);
步幅= 增幅;
现为涨= false;
标记值= low[i];
最后低= low[i];
箭头组[i++]= 最后高;
continue;
}

  //--跌转涨
  if(!现为涨 && high[i]>箭头组[i-1]){
     最后保存记录子(i,false,步幅,最后低,high[i],标记值,SAR值);
     步幅= 增幅;
     现为涨= true;
     标记值= high[i];
     最后高= high[i];
     箭头组[i++]= 最后低;
     continue;
    }

  //---
  SAR值= 箭头组[i-1]+步幅*(标记值-箭头组[i-1]);

  //---涨势时
  if(现为涨){
     if(标记值<high[i]){
        if(步幅+增幅<=幅极值)
           步幅+=增幅;
       }

     if(high[i]<high[i-1] && i==2)
        SAR值= 箭头组[i-1];

     if(SAR值>low[i-1])
        SAR值= low[i-1];

     if(SAR值>low[i-2])
        SAR值= low[i-2];

     //--

     if(low[i]<SAR值){
        最后保存记录子(i,true,步幅,low[i],最后高,标记值,SAR值);
        步幅= 增幅;
        现为涨= false;
        标记值= low[i];
        最后低= low[i];
        箭头组[i++]= 最后高;
        continue;
       }
     if(标记值<high[i])
        标记值= 最后高= high[i];
    }
  //---跌势时
  else{
     if(标记值>low[i]){
        if((步幅+增幅)<=幅极值)
           步幅 += 增幅;
      }
     //--
     if(low[i]<low[i-1] && i==2)
        SAR值= 箭头组[i-1];
     if(SAR值<high[i-1])
        SAR值= high[i-1];

     if(SAR值<high[i-2])
        SAR值= high[i-2];

     //--
     if(SAR值<high[i]){
        最后保存记录子(i,false,步幅,最后低,high[i],标记值,SAR值);
        步幅= 增幅;
        现为涨= true;
        标记值= high[i];
        最后高= high[i];
        箭头组[i++]= 最后低;
        continue;
       }

     if(标记值>low[i])
        标记值= 最后低= low[i];
    }



  //--数组赋值

  箭头组[i++]= SAR值;
 }

//---- 主运算成功后. 返回新的前己计算棒数.

return(总棒数);
}

//+-----------保存最后值结果 (为新计算做准备)------------+

void 最后保存记录子(int reverse,bool 涨向否,double 步幅参,double 最后低参,double 最后高参,double 标记值,double SAR参)
{
最后反转时=reverse;
if(最后反转时<2)
最后反转时= 2;
看涨方向= 涨向否;
最后保存步幅= 步幅参;
最后保存低= 最后低参;
最后保存高= 最后高参;
最后保存对比值= 标记值;
最后保存SAR值= SAR参;
}

//+--------------------------------谢谢点赞----------------------------------+

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,952评论 0 38
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,426评论 0 2
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,242评论 6 13
  • 开始之前,先来看一段话: 商业中的战略概念源自军事领域,本义是“驱动军队抵达决战地点”。杰克·特劳特根据军事中“选...
    郭小果子阅读 323评论 2 1
  • 有一言 已过三日 葬一语 华霓与我 夜不怠 夜为伴 尘土依旧 唯迹难寻 浩瀚追忆 黄尘清水 我在走 黢黢声声 伴奏...
    背风听雨阅读 269评论 0 0