[i]Custom Moving Averages汉译各类可选均线 0._

//[i]Custom Moving Averages 汉译各类可选择均线

property copyright "2005-2015, MetaQuotes Software Corp."

property link "http://www.mql4.com"

property description "Moving Average"

property strict

property indicator_chart_window

property indicator_buffers 1

property indicator_color1 Red

//--- 可输入参数
input int 周期= 13;
input int 偏移= 0;
input ENUM_MA_METHOD 使用均线类型= MODE_SMA;

//--- 缓存组
double 均线组[];
//+------------------------------------------------------------------+
//| 初始化 |
//+------------------------------------------------------------------+
int OnInit(void)
{
string 名称;
int 始绘位=周期-1;

//--- 设置名称
switch(使用均线类型)
{
case MODE_SMA : 名称= "SMA("; break;
case MODE_EMA : 名称= "EMA("; 始绘位=0; break;
case MODE_SMMA : 名称= "SMMA("; break;
case MODE_LWMA : 名称= "LWMA("; break;
default : return(INIT_FAILED);
}
IndicatorShortName(名称+string(周期)+")");
IndicatorDigits(Digits);
//--- 检查参数
if(周期<2)
return(INIT_FAILED);
//--- 绘线设置
SetIndexStyle(0,DRAW_LINE);
SetIndexShift(0,偏移);
SetIndexDrawBegin(0,始绘位);
//--- indicator buffers mapping
SetIndexBuffer(0,均线组);
//--- 初始化成功
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 主函数 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
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[])
{
//--- 检查棒数是否足够
if(rates_total<周期-1 || 周期<2)
return(0);
//--- 从0到rates_total计数
ArraySetAsSeries(均线组,false);
ArraySetAsSeries(close,false);
//--- 棒数改变后第一次计算
if(prev_calculated==0)
ArrayInitialize(均线组,0);
//--- 选择后的子函数计算
switch(使用均线类型)
{
case MODE_EMA: EMA子(rates_total,prev_calculated,close); break;
case MODE_LWMA: LWMA子(rates_total,prev_calculated,close); break;
case MODE_SMMA: SMA子(rates_total,prev_calculated,close); break;
case MODE_SMA: MA子(rates_total,prev_calculated,close); break;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| 简单均线MA子 |
//+------------------------------------------------------------------+
void MA子(int rates_total,int prev_calculated,const double &price[])
{
int i,limit;
//--- first calculation or number of bars was changed
if(prev_calculated==0)

 {
  limit=周期;
  //--- calculate first visible value
  double 首值=0;
  for(i=0; i<limit; i++)
     首值+=price[i];
  首值/=周期;
  均线组[limit-1]=首值;
 }

else
limit=prev_calculated-1;
//--- main loop
for(i=limit; i<rates_total && !IsStopped(); i++)
均线组[i]= 均线组[i-1]+(price[i]-price[i-周期])/周期;
//---
}
//+------------------------------------------------------------------+
//| EMA子 |
//+------------------------------------------------------------------+
void EMA子(int rates_total,int prev_calculated,const double &price[])
{
int i,limit;
double 平滑因子=2.0/(1.0+周期);
//--- 首次计算
if(prev_calculated==0)
{
limit=周期;
均线组[0]=price[0];
for(i=1; i<limit; i++)
均线组[i]= price[i]平滑因子+均线组[i-1](1.0-平滑因子);
}
else
limit= prev_calculated-1;
//--- 主循环部分
for(i=limit; i<rates_total && !IsStopped(); i++)
均线组[i]= price[i]平滑因子+均线组[i-1](1.0-平滑因子);
//---
}
//+------------------------------------------------------------------+
//| 线型权重MA子 |
//+------------------------------------------------------------------+
void LWMA子(int rates_total,int prev_calculated,const double &price[])
{
int i,limit;
static int 权重和;
double 值和;
//--- 首次计算
if(prev_calculated==0)
{
权重和=0;
limit=周期;
//--- 首个图表值
double 首值=0;
for(i=0;i<limit;i++)
{
int k=i+1;
权重和+=k;
首值+=kprice[i];
}
首值/=(double)权重和;
均线组[limit-1]= 首值;
}
else
limit=prev_calculated-1;
//--- 主循环部分
for(i=limit; i<rates_total && !IsStopped(); i++)
{
值和=0;
for(int j=0;j<周期;j++)
值和 += (周期-j)
price[i-j];
均线组[i]= 值和/权重和;
}
//---
}
//+------------------------------------------------------------------+
//| 平滑均线SMA子 |
//+------------------------------------------------------------------+
void SMA子(int rates_total,int prev_calculated,const double &price[])
{
int i,limit;
//--- 首次计算
if(prev_calculated==0)
{
limit=周期;
double 首值=0;
for(i=0; i<limit; i++)
首值+=price[i];
首值/=周期;
均线组[limit-1]=首值;
}
else
limit=prev_calculated-1;

//--- 主循环部分
for(i=limit; i<rates_total && !IsStopped(); i++)
均线组[i]=(均线组[i-1]*(周期-1)+price[i])/周期;
//---
}
//+------------------------------------------------------------------+

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

推荐阅读更多精彩内容

  • Overview The ccxt library is a collection of available cr...
    郭蝈儿蝈儿阅读 9,249评论 0 1
  • //[i]Bands 汉译布林 include <MovingAverages.mqh> property ind...
    牛在汇上飞阅读 1,683评论 0 0
  • //[i]ATR汉译 property indicator_separate_window property in...
    牛在汇上飞阅读 2,047评论 0 0
  • 第三章 初登皇位 南征 老爸死了,根据遗嘱,刘禅同学继承皇帝位。 五月,刘禅在成都称帝,阿斗同学经过千辛万苦终...
    kentarou阅读 2,976评论 0 1
  • 梦/大漠 昨晚下雪了 雪不大 北风很温柔 梦里霾散了 天很蓝 家乡很遥远
    大漠qxy阅读 1,547评论 0 1