如何开始学习MQL5 - 页 9

 

不使用额外的缓冲区,为中间计算进行系列价格的平均化




在本人的《指标的经济计算原则》一文中,我执行了相当有说服力的测试,证实了并非代码中对于自定义或技术指标的每一次调用,都是某制定指标中执行中间计算的最优方式。

如果我们将中间计算的代码置入指标,其执行速度看似比我们最终的执行速度快很多。

如果能足够简单,那么,这种编写代码的方法会非常诱人。事实上,它似乎成为了那些带有额外缓冲区(用于存储计算中间结果)描述的代码的一种严重并发症。

尽管中间计算的种类繁多,但我们最需要的是平均线的不同算法。大多数情况下,我们都可以针对它们,采用可以极大地简化编写此类代码任务的、简单且普适的自定义函数。本文中,我们会描述创建和使用此类函数的过程。

 

#include <Trade\Trade.mqh>

input int ZQ=20;

double DG[],DD[],SL=0.1;

int I,IZ;

bool BG,BD;

CTrade JY;

void OnInit()

{

   IZ=iCustom(Symbol(),PERIOD_CURRENT,"Examples\\ZigZag",ZQ,3,5);

}

void OnTick()

{

   CopyBuffer(IZ,1,0,ZQ+1,DG);

   CopyBuffer(IZ,2,0,ZQ+1,DD);

   BG=false;

   BD=false;

   for(I=ZQ;I>=0;I--)

   {

      if(DG[I]>0.1) BG=true;

      else if(DD[I]>0.1) BD=true;

      if(BG||BD) break;

   }

   if(PositionSelect(_Symbol))

   {

      if((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)&&BD) JY.PositionClose(_Symbol,3);

      if((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)&&BG) JY.PositionClose(_Symbol,3);

   }

   if(!PositionSelect(_Symbol))

   {

      if(BG) JY.PositionOpen(_Symbol,ORDER_TYPE_BUY,SL,SYMBOL_ASK,0,0);

      if(BD) JY.PositionOpen(_Symbol,ORDER_TYPE_SELL,SL,SYMBOL_BID,0,0);

   }

}

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
 

基于成交历史的交易播放器




对交易历史进行可视分析是交易者的分析工作的重要部分。如果不是这样,则不会有要将数字 世界转换为图片世界的技术分析。显然,这是因为 80% 的人类感知是通过眼睛进行的。对信息进行概括的统计不能指出很多细微差别。只有用其对数字世界的直观感知进行可视化才能注意到细节。常言道:百闻不如一 见。

在本文中,我们将不考虑如何编写一个旨在实现交易历史的可视化自动显示的 EA 交易。我们将讨论在对象之间传递信息、规划大型应用、管理图表、同步不同交易品种的信息等问题。

按照传统,首先我想告诉您播放器应用程序的优点及关联脚本,然后我们将进入代码分析。

 

以峰谷指标和 ATR 指标为例说明作为类来实施指标



MetaQuotes Software Corp. 在全新第 5 版的 MetaTrade 客户端中修订了处理自定义指标的概念。现在,它们以快得多的速度执行;每个指标只有一个具有唯一输入参数的例子,因此不管在哪怕一个交易品种的十个图表上使用其副本,它都仅计算一次。

但是一种算法保持不变。在与服务器的连接中断时,或在重大的历史数据同步中 断时,prev_calculated 值(对于 MetaTrader 4 而言为 IndicatorCounted())被设置为零,从而导致完全针对整个历史数据重新计算指标(开发人员可能故意为之,以保证指标值在任何情形下都正确 无误)。有几个因素能够影响指标的计算速度:

  • 大周期:rates_total;
  • 消耗大量资源的复杂计算;
  • 使用几个交易品种和周期;
  • 个人计算机的性能差;

适合您的情形的因素越多,您面临的针对整个历史数据重新计算指标的问题就越有可能出现。此外,用于传输信息的通道较差也会导致情况变糟。

当然,您可以使用额外的输入参数限制指标计算的深度,但是使用 iCustom 指标有一个细微差别。任意图表或任意自定义指标使用的最大柱数是在全局范围内针对整个客户端设置的。内存是针对每个自定义指标缓冲区分配的,并且仅受 TERMINAL_MAXBARS 的限制。

然而,有一个重大的添加 - 如果您在指标的算法中限制所计算的柱的最大数量(例如使用一个输入参数或直接在代码中进行限制),则会在每个新的柱出现时动态分配内存(逐渐增加到指定的 TERMINAL_MAXBARS 限制,或者更多 - 此算法完全取决于开发人员,他们可以在下一版本中进行更改)。

 
请问大家谁可以帮我个忙,我想出售信号,但是不会弄,先谢过了啊
 
ysu1987:

请问大家谁可以帮我个忙,我想出售信号,但是不会弄,先谢过了啊



1. 下面手把手教你“如何成为交易信号提供者”: 如何成为MetaTrader4和MetaTrader5的信号提供者

2. 如果您不是卖家或供应商,要如何从MetaTrader应用商店以及交易信号服务赚钱

 

编写"EA 交易"时,MQL5 标准交易类库的使用



新款 MQL5 程序中带有大量内置标准类库,旨在让交易者和开发人员都尽可能简单地完成 MQL5 “EA 交易”、指标和脚本的开发。

这些类库都位于 MetaTrader 5 客户端文件夹中 MQL5 文件夹里的 \Include\ 文件夹。类库被划分为多个子分类 – ArraysChartObjectsChartsFilesIndicatorsStringsTrade 类。

我们会在本文中详细讲解,如何利用内置交易类编写“EA 交易”。“EA 交易”会以某种策略为基础:如果某规定条件被满足,则会涉及到已建仓位的平仓和修改。

如果您对类的概念和用法已有了解,那么,欢迎您进入 MQL5 新语言为您提供的另一个充满机遇的世界。

另一方面,如果您完全没接触过 MQL5,我建议您先阅读《针对初学者以 MQL5 编写“EA 交易”的分步指南》《利用 MQL5 面向对象编程法编写 EA 交易》这两篇文章,或是任何其它能够为您提供 MQL5 这一新语言相关指导的文章预热。人们已经撰写了大量的相关文章,能够提供您所需要的知识。

 
luenbo:

我相信来到这个论坛的大部分用户都是对程序化交易感兴趣或者有一定程序化交易经验人,我先在此介绍一些资料供大家学习参考。

本网站是迈达克公司的官方网站,学习资源非常丰富,你可以随着学习的不断深入,自己去发掘有价值的文章、代码、讨论帖子等等。

1、如果你已经具备一定的MQL4编程经验,那么我想你要转到MQL5上来不是很难的事情,你要做的就是花点时间了解MQL5和MQl4的区别。

本论坛里面已经有很多关于MQL5相关的介绍文章了:

(1)如果你想了解MQL4和MQL5语言函数等之间的一些区别,那么这篇文章可以帮助你:从MQL4迁移到MQL5上来

(2)订单和头寸的概念MT5和MT4有很大的区别,你可以在这篇文章中进行详细了解:MT5中的订单、头寸和成交的概念

(3)以及MT5的关键特点可以在这里详细了解。

(4)如何编制自定义指标:MQL5 简介:如何编写简单的EA 交易和自定义指标

        .......

2.如果你是自动化交易编程新手,那么学习MQL5语言来实现你的交易思想和交易策略将是很好的选择。你可以通过下面这些文章一步步的学习和尝试使用MQL5来实现自己的第一个EA。 

(1)教你一步一步编写自己的MQL5 EA,还有这个如何使用向导创建MQL5程序

(2)如何调试MQL5程序

(3)交易指标使用指南。

        .......

3.有用的一些资料,帮助你更好的设计自己的EA

(1)EA 交易中的资金管理函数

(2)采用跟踪止损的赚钱算法 

  ...... 

当然,所有你想知道的东西都可以在这里找到。 

虽然这些大多数还都是英文的,不过也已经陆续翻译了一些文章,帮助你更好的学习MQL5,编制EA和指标以及使用MT5进行交易。 

大家也可以在此提出自己的程序化交易心得或者疑问,让我们一起共同进步!

学习学习
 

在视图内/外绘制通道




如果说通道是继移动平均线之后最流行的市场分析和交易决策工具,我想这并没有夸大。在本系列的第一篇文章中,我们主要介绍通道,讨论某指标的数据基础和理论实现,该指标用于在客户端的屏幕上绘制由三个极值设定的通道。

乍一看,绘制通道似乎是一个简单的任务,因为它基于直线的方程,这在小学就已教过。然而,这在客户端中实际实施时将涉及到大量问题,回答这些问题并没那么简单。

如何以最佳方式组织极值的设置和追踪它们的变化?如何绘制通道(如果其中间部分位于缺少的柱上)?如果通道的左极值位于星期五且其右极值位于星期一,在星期五和星期一之间的休假日没有柱将会怎么样?我们如何获得通道边界的当前值?

这些问题以及其他一些问题将在本系列关于通道的第一篇文章中予以解答。本文还包括使用标准类和面向对象的方法,通过三个指定的极值实现通道的绘制。我们将以指标的形式实现通道的绘制工具。

 

使用计量经济学方法分析图表




我经常听到有关市场动荡不稳的言论。这也解释了为何无法实现成功的长期交易。但事实果真如此吗?让我们尝试从科学的角度分析这一问题。我们将选择计量经济学方法进行分析。为何选择计量经济学方法?首先,MQL 社区热衷于追求精确性,而这只能通过数学和统计学予以实现。其次,如果我没弄错的话,之前在这方面尚属空白。

需要指出的是,成功的长期交易问题无法通过一篇文章就得以解决。现在,我只打算介绍选定模型的几种诊断方法,希望在以后的使用中能够体现其价值。

此外,我将尽可能清楚介绍一些枯燥的理论知识,包括公式、定理和假设。然而,我希望读者已经了解统计学的一些基本概念,例如:假设、统计显著性、统计(统计标准)、离差、分布、概率、回归、自相关等。
原因: