深入理解OnCalculate函数的运行机制

一、学习 OnCalculate 函数的运行原理的意义

OnCalculate函数是MQL语言中的一个重要函数,它用于计算技术指标的值。

  • 实现自定义指标:通过编写OnCalculate函数,可以根据自己的需求计算出各种技术指标的值,如移动平均线、相对强弱指标等。这样可以满足个性化的交易策略需求。
  • 提高计算效率:OnCalculate函数是在每个新的价格数据到达时被调用的,它只计算最新的价格数据,而不是对整个历史数据进行计算。这样可以大大提高计算效率,减少计算时间。
  • 实现自动化交易:通过OnCalculate函数,可以根据计算出的指标值来触发交易信号,实现自动化交易。这样可以消除人为情绪的干扰,提高交易的准确性和效率。

通过学习OnCalculate函数的运行原理,可以更好地理解MQL语言的编程思想和交易平台的运行机制,从而更好地开发自己的交易策略和指标

二、OnCalculate 函数原型

基于数据数组的计算

int  OnCalculate( 
   const int        rates_total,       // price[]数组大小 
   const int        prev_calculated,   // 在前一个调用中处理过的柱形图数量 
   const int        begin,             //price[]数组中,有意义数据开始的索引编号 
   const double&    price[]            // 计算值数组 
   );

基于当前时间周期时间序列的计算

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[]           // 点差数组 
   );

三、OnCalculate 函数在MT4与MT5区别

在MT4和MT5中,OnCalculate函数中的数组顺序是不一样的。在MT4中,OnCalculate函数中的数组是反序的,即最新的数据在数组的最前面,而最旧的数据在数组的最后面。而在MT5中,OnCalculate函数中的数组是正序的,即最新的数据在数组的最后面,而最旧的数据在数组的最前面。

这种差异可能会导致在从MT4迁移到MT5时出现问题,特别是在处理动态数组时。在MT4中,可以使用ArraySetAsSeries函数将数组转换为正序,以便更方便地处理数据。而在MT5中,不需要使用ArraySetAsSeries函数,因为数组本身就是正序的。

因此,在编写MT4和MT5指标时,需要注意数组顺序的差异,以确保正确处理数据。

四、OnCalculate 函数的运行原理

  • 运行频率:首次加载指标时运行两次,之后每次来报价都会运行一次,无报价运行。
  • 参数rates_total:rates_total值等于Bars(_Symbol,_Period)
  • 参数prev_calculated:上次OnCalculate函数的return值。

相关推荐

  1. 深入理解OnCalculate函数运行机制

    2024-03-20 20:04:01       48 阅读
  2. 深入理解C语言函数指针:揭开背后机制与应用

    2024-03-20 20:04:01       63 阅读
  3. 深入理解 golang 中反射机制

    2024-03-20 20:04:01       56 阅读
  4. 深入理解浏览器页面渲染机制

    2024-03-20 20:04:01       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 20:04:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 20:04:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 20:04:01       82 阅读
  4. Python语言-面向对象

    2024-03-20 20:04:01       91 阅读

热门阅读

  1. Stability AI推出StableLM:开源ChatGPT替代方案

    2024-03-20 20:04:01       39 阅读
  2. 团体程序设计天梯赛 L2-027 名人堂与代金券

    2024-03-20 20:04:01       45 阅读
  3. Visual C++ 2005 可以生成清单信息了

    2024-03-20 20:04:01       43 阅读
  4. C语言基础练习——Day12

    2024-03-20 20:04:01       50 阅读
  5. Spring Data访问Elasticsearch----查询方法

    2024-03-20 20:04:01       49 阅读
  6. 了解比特币分叉:演变与分歧

    2024-03-20 20:04:01       39 阅读
  7. Docker 命令大全

    2024-03-20 20:04:01       38 阅读
  8. LeetCode204. Count Primes

    2024-03-20 20:04:01       47 阅读
  9. 描述一下使用过的任何安全测试工具及其功能

    2024-03-20 20:04:01       43 阅读
  10. 分布式事务的实现方式

    2024-03-20 20:04:01       45 阅读