路路发智能交易研发中心

 找回密码
 立即注册
查看: 3370|回复: 0

MT4智能交易编程教程-价格常数

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6521
帖子
2771
主题
2761
QQ
发表于 2014-3-27 08:06:37 | 显示全部楼层 |阅读模式
MT4智能交易编程教程-价格常数
技术指标的计算要求价格价值和成交量价值,该计算将执行,有7个预先的标识符在ENUM_APPLIED_PRICE 项目中,以指定计算的期望价值基础。
ENUM_APPLIED_PRICE
ID
描述
PRICE_CLOSE
收盘价格
PRICE_OPEN
开盘价格
PRICE_HIGH
一个时期的最高价格
PRICE_LOW
一个时期的最低价格
PRICE_MEDIAN
中间值(高+低)/2
PRICE_TYPICAL
典型价格(高+低+收盘价)/3
PRICE_WEIGHTED
平均价格(高+低+收盘价格+开盘价格)/4

如果成交量用于计算,必要在 ENUM_APPLIED_VOLUME 中列举出一两个值
ENUM_APPLIED_VOLUME
ID
描述
VOLUME_TICK
赊欠成交量
VOLUME_REAL
交易成交量

iStochastic() 技术指标以两种方式计算使用:
·或者只以收盘价;
·或者以最高或最低价;
为计算选择必须变量,指定ENUM_STO_PRICE 计算中的一种值
ENUM_STO_PRICE
ID
描述
STO_LOWHIGH
基于最低价/最高价的计算
STO_CLOSECLOSE
基于开盘价/收盘价的计算

如果技术指标使用价格数据的计算,建立ENUM_APPLIED_PRICE类型,然后任何指标处理(内置在终端里或者使用者输入)都能用来输入价格序列。在此情况下,指标中零缓冲器的值会用来计算,这样就很容易使用另一指标建造该指标的值,自定义指标的处理需要调用 iCustom() 函数处理。
示例:
  1. #property indicator_separate_window
  2. #property indicator_buffers 2
  3. #property indicator_plots   2
  4. //--- 输入函数
  5. input int      RSIperiod=14;         // 计算RSI的周期
  6. input int      Smooth=8;             // 平滑RSI周期
  7. input ENUM_MA_METHOD meth=MODE_SMMA; // 修匀法
  8. //---- 图 RSI
  9. #property indicator_label1  "RSI"
  10. #property indicator_type1   DRAW_LINE
  11. #property indicator_color1  clrRed
  12. #property indicator_style1  STYLE_SOLID
  13. #property indicator_width1  1
  14. //---- 图 RSI_Smoothed
  15. #property indicator_label2  "RSI_Smoothed"
  16. #property indicator_type2   DRAW_LINE
  17. #property indicator_color2  clrNavy
  18. #property indicator_style2  STYLE_SOLID
  19. #property indicator_width2  1
  20. //--- 指标缓冲区
  21. double         RSIBuffer[];          // 这里存储 RSI值
  22. double         RSI_SmoothedBuffer[]; //  RSI平滑值
  23. int            RSIhandle;            // 处理 RSI 指标
  24. //+------------------------------------------------------------------+
  25. //| 自定义指标初始化函数                                                |
  26. //+------------------------------------------------------------------+
  27. void OnInit()
  28.   {
  29. //--- 指标缓冲区绘图indicator buffers mapping
  30.    SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
  31.    SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
  32.    IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
  33.    IndicatorSetInteger(INDICATOR_DIGITS,2);
  34. //---
  35.    RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
  36. //---
  37.   }
  38. //+------------------------------------------------------------------+
  39. //| 自定义指标重复函数                                                 |
  40. //+------------------------------------------------------------------+
  41. int OnCalculate(const int rates_total,
  42.                  const int prev_calculated,
  43.                  const int begin,
  44.                  const double &price[]
  45.                  )

  46.   {
  47. //---  重置上一个错误值
  48.    ResetLastError();
  49. //--- 数组RSIBuffer []中获得 RSI 指标数据
  50.    int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
  51.    if(copied<=0)
  52.      {
  53.       Print("Unable to copy the values of the indicator RSI. Error = ",
  54.             GetLastError(),",  copied =",copied);
  55.       return(0);
  56.      }
  57. //--- 创建使用RSI值的平均值的指标
  58.    int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
  59.    copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
  60.    if(copied<=0)
  61.      {
  62.       Print("Unable to copy the smoothed indicator of RSI. Error = ",
  63.             GetLastError(),",  copied =",copied);
  64.       return(0);
  65.      }
  66. //--- 为下次调用返回prev_calculated值
  67.    return(rates_total);
  68.   }
复制代码




外汇智能交易,成就财富梦想!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|路路发智能交易研发中心

GMT+8, 2024-12-22 22:14 , Processed in 0.144415 second(s), 26 queries .

© 2009-2022 520EA.com EA668.com

快速回复 返回顶部 返回列表