【时间之外】EA交易代码入门

news2024/11/16 23:41:30

目录

MetaEditor简介

最简单的EA交易代码

代码编译

EA附加到图表

EA测试

EA正式上线

注意事项


本不打算写这篇文章,后来看到CSDN里有很多介绍交易软件的文章,平时也碰到很多人问我自动化交易的问题,还是写一篇科普文章,毕竟EA交易也是编程工作中的一种。

做过外汇交易的人都知道MT4是可以做到自动交易,俗称EA。本文以一个最简单的EA代码(已测试可用)为例,简单说明如何进行EA交易的步骤。

MetaEditor简介

在MetaEditor中编写程序代码,可以使用MQL4语言完成。可以参考MT4提供的标准库函数和示例程序来编写自己的EA程序。

使用MetaEditor很简单,只要在MT4中工具菜单里,打开MQ语言编辑器即可,如下图:

打开的界面,也很简单,左边是目录树,右边就是写代码的地方,下面就直接进入编写代码:

最简单的EA交易代码

假如我们想EA自动执行买入交易,条件是:当前价格高于前一根K线的最高点时进行买入,代码很简单,如下所示:

double last_high = High[1];  // 获取前一根K线的最高价
double cur_price = Ask;     // 获取当前卖出价

// 判断是否满足条件进行买入操作
if (cur_price > last_high) {
    int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, Bid - StopLoss * Point, Bid + TakeProfit * Point, "Buy", MagicNumber, 0, Green);
    if (ticket > 0) {
        Alert("Buy order opened. Ticket: ", ticket);
    } else {
        Alert("Error opening buy order. Error code: ", GetLastError());
    }
}

在上述代码中,我们使用High[1]获取前一根K线的最高价,并使用Ask获取当前卖出价。然后,我们判断当前价格是否高于前一根K线的最高价,如果满足条件,则使用OrderSend函数进行买入操作。

其中,OrderSend函数第一个参数为交易品种,第二个参数为交易类型(此处为OP_BUY表示买入),第三个参数为交易量,第四个参数为开仓价,第五个参数为止损值,第六个参数为止盈值,第七个参数为订单备注,第八个参数为魔术数字(用于区分不同EA或信号),第九个参数为订单注释(可选),第十个参数为订单颜色(可选)。

在代码中,我们使用Alert函数输出开仓提示信息,如果买入订单未成功开仓,则输出错误信息。

代码编译

代码完成以后,如何进行测试呢?

首先要继续编辑,生成MT4的可执行文件。

编译成功,则说明代码没有问题,否则首先要保证代码的正确,否则就没有办法进行测试。

虽然MT4提供了单步调整的功能,但个人更习惯于在MT4中直接进行复盘的测试。

EA附加到图表

首先需要把编译通过的EA代码附加到你需要交易的图表上,比如要附加到黄金交易,实现黄金交易的自动化。附加操作需要回到MT4界面上,首先打开黄金交易的图表,然后点击导航菜单后,会出现下面的菜单,只要在你刚才编写的EA上右键(无法截图),会出现附加到图表的按钮。

成功附加后,会出现如下截图:

这个时候,右边还不是笑脸,即还不能进行自动交易。

EA测试

当然,我们在没有测试之前,也不能交易,首先用F6进入EA测试的界面:

需要确认上面三个箭头所指向的内容,前面两个容易理解,就是你的EA代码名称和图表名称。最后一个是测试的方式,推荐选择默认方式,虽然测试的时候会比较慢,但是测试结果比较准确。其他的方式虽然测试速度很快,但是结果会与实际差异很大。

都确认以后,点击开始按钮,就可以进行测试了。测试完成以后,可以看日志和统计报表。

为了测试方便,选择国庆节几天的交易作为测试,出来的结果还不错。不过,一个EA的好坏,仅仅凭这几天是很难判断的,需要长期的实际交易才可以。 

EA正式上线

当测试都完成以后,就可以小试牛刀了,打开MT4上面的自动交易按钮就可以正式上线了。 

 

注意事项

在正式上线后,最好是能够盯盘的时段开启EA,或者把仓位设置成最小,比如0.01,这样可以避免因为EA不过关造成大的损失。

个人一般都是现在demo账户进行模拟交易,待模拟交易能够稳定盈利的时候,再加载到正式账户中去。

由于国内现在是不能进行外汇保证金交易的,所以上述代码仅供学习,不推荐任何平台。

还有很多细节,考虑到是入门,这里就不详细说了,有兴趣的朋友,可以一起交流。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详细介绍区块链之挖矿

对不起,大家,这篇文章对作者来说实在是太有意义和含金量了,作者想把它设置为关注博主才能见全文,请大家理解!如果觉得还是看不懂,抱歉耽误大家的时间,就请取消关注!!&…

开源即时通讯IM框架 MobileIMSDK v6.4 发布

一、更新内容简介 本次更新为次要版本更新,进行了若干优化(更新历史详见:码云 Release Notes、Github Release Notes)。MobileIMSDK 可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。 二、MobileIMSDK简介…

EverWeb for Mac:轻松创建出色网站的强大网页设计软件

如果你正在寻找一款优质的网页设计软件,那么EverWeb for Mac绝对值得考虑。这款软件旨在为用户提供专业级的网站建设工具,帮助你轻松创建出令人印象深刻的网站。 在EverWeb for Mac中,用户可以快速轻松地创建网站布局和设计。该软件支持各种…

Linux 系统为何产生大量的 core 文件?

Author:rab 目录 一、问题分析二、解决方案扩展 一、问题分析 上一篇刚讲到《Docker 配置基础优化》,这里再补充一下。就在中秋国庆这段小长假里,接收到了线上服务器磁盘告警通知,线上服务器架构是一个 Docker Swarm 集群&#x…

flutter开发实战-video_player插件播放抖音直播实现(仅限Android端)

flutter开发实战-video_player插件播放抖音直播实现(仅限Android端) 在之前的开发过程中,遇到video_player播放视频,通过查看video_player插件描述,可以看到video_player在Android端使用exoplayer,在iOS端…

一个例子帮您掌握python正则re.match、re.search和re.findall的区别

在使用python正则进行字符串匹配查询时,最常用的三个函数是re.match、re.search和re.findall,在这里我就用一个例子带大家了解这三者的使用区别,话不多说我们直接上代码! import re txt"test,a:123,b:1234,c:12345,hello!&…

二叉树--翻转二叉树

文章前言:如果有小白同学还是对于二叉树不太清楚,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 如果思路不清楚,请看动态页面&am…

二叉树--对称二叉树

小白同学对于二叉树还是不太了解的,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客 对称二叉树-力扣 101 题 作者给的图: 代码: public boolean isSymmetric(TreeNode root) {//刚刚开始,传入的是顶堆的左、右…

短视频矩阵源码开发部署---技术解析

一、短视频SEO源码搜索技术需要考虑以下几点: 1. 关键词优化:通过研究目标受众的搜索习惯,选择合适的关键词,并在标题、描述、标签等元素中进行优化,提高视频的搜索排名。 2. 内容质量:优质、有吸引力的内…

通透理解FlashAttention与FlashAttention2:大模型更长上下文的关键

前言 本文最初和第一代ChatGLM-6B的内容汇总在一块,但为了阐述清楚FlashAttention、FlashAttention2等相关的原理,导致之前那篇文章越写越长,故特把FlashAttention相关的内容独立抽取出来成本文 且本文会和本博客内其他大模型相关的文章一样…

MXProxyPool: 动态爬虫IP池(抓取、存储、测试)

在网络爬虫开发中,使用爬虫IP可以帮助我们绕过访问限制,隐藏真实IP地址,提高爬取效率等。MXProxyPool是一个功能强大的动态爬虫IP池,它能够实现爬虫IP的抓取、存储和测试功能。本文将详细介绍MXProxyPool的使用方法,帮…

给 Linux0.11 添加网络通信功能 (Day1: 确认 qemu-system-i386 提供了虚拟网卡)

感觉单纯读闪客的文章,以及读 Linux0.11 源码,而不亲自动手做点什么,很难学会,还是得写代码 定个大目标:给 Linux0.11 添加网络通信功能 今日的小目标:先确认 qemu-system-i386 提供了网卡功能 here we …

深度学习-了解

1.机器学习的分类 监督学习(Supervised Learning)是指从已标注的训练数据中学习判断数据特征,并将其用于对未标注数据的判断的一种方法。无监督学习(Unsupervised Learning)不同于监督学习,它的学习算法是…

java 将字符串转为Base64格式与将Base64内容解析出来

首先要引入依赖包 import java.nio.charset.StandardCharsets; import java.util.Base64;然后对应一下两个代码 将字符串转为Base64 Base64.getEncoder().encodeToString(需要转换的字符串.getBytes(StandardCharsets.UTF_8));将 Base64 字符串解析成原来的内容 byte[] deco…

备份网络架构Host-Based/Lan-Based/Lan-Free/Server-Free

前言 常见的数据备份系统主要有 Host-Based LAN-Based 基于 SAN 结构的 LAN-Free LAN Server-Free 等多种结构。 Host-Based Host-Based 是传统的数据备份结构 该结构中磁带库直接接在服务器上 而且只为该服务器提供数据备份服务。一般情况 这种备份大多采用服务器上自带的磁…

基于生物地理学优化的BP神经网络(分类应用) - 附代码

基于生物地理学优化的BP神经网络(分类应用) - 附代码 文章目录 基于生物地理学优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.生物地理学优化BP神经网络3.1 BP神经网络参数设置3.2 生物地理学算法应用 4…

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-IMPA-GRU功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法门控循环单元时间序列预…

AIGC革新,将文字或者LOGO融入AI视频基于PIKA-labs(Python3.10)

很多平台都会禁止用户使用带有网址或者二维码的头像以及文章配图,这样可以有效的防止用户的一些“导流”行为。当然,头像、文章或者视频现在都是AI来审,毕竟现在人工的成本实在太高,但是如果我们把文字元素直接融入图像或者视频之…

在微信公众号上怎么搭建付费课程功能

搭建付费课程功能是线上教育平台的重要组成部分,需要考虑到技术、用户体验、支付安全等多个方面。以下是搭建付费课程功能的几个关键步骤: 一、确定技术方案 搭建付费课程功能需要选择合适的技术方案,包括前端和后端的开发、数据库管理、服务…

编程每日一练(多语言实现)基础篇:求100~200之间的素数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现3.5 Go 语言实现 一、实例描述 求素数表中 100~200 之间的全部素数。运行结果如下图所示: 二、技术要点 素数是大于1的整数&#xff…