编程教程 - 页 4

 

C++ 函数 (2020) - 什么是递归?学习递归函数!


C++ 函数 (2020) - 什么是递归?学习递归函数!编程教程

递归是函数调用自身的过程,对应的函数称为递归函数。

递归是编程中经常让学生感到困惑的主题之一,在本视频中,我将解释递归的工作原理,并比较同一问题的不同解决方案(使用循环和使用递归)。

C++ FUNCTIONS (2020) - What is recursion? Learn recursive functions! PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is recursion? Learn recursive functions! PROGRAMMING TUTORIAL
  • 2020.10.28
  • www.youtube.com
Recursion is a process in which a function invokes itself, and the corresponding function is called a recursive function.Recursion is one of those topics in ...
 

C++ 函数 (2020) - 什么是通用函数和模板?编程教程


C++ 函数 (2020) - 什么是通用函数和模板?编程教程

大家好,欢迎来到我的频道!我叫 Saldina,我制作与编程相关的视频。如果您对编程感兴趣,请订阅我的频道并给这个视频点赞。您的支持帮助我接触到更多人并传播编程知识。

在本视频中,我想谈谈 C++ 中的泛型和模板。泛型允许我们对不同的数据类型使用相同的代码。这意味着我们可以拥有一个处理不同类型数据的函数。

让我们举个例子来理解这个概念。假设我们要创建一个交换两个变量值的函数。最初,我们创建用于交换两个整数变量的函数,但我们也可以扩展它以处理其他数据类型。

为了创建通用函数,我们使用 C++ 中的模板。我们使用关键字“template”后跟类型名称(通常称为“T”)来定义模板类型。在函数内部,我们将特定数据类型替换为“T”。这使得该函数具有通用性并且能够处理不同的数据类型。

我们不再需要为每种数据类型创建单独的函数。模板函数可与支持交换逻辑的任何数据类型一起使用。

为了测试该函数,我们创建所需类型的变量并将它们传递给通用交换函数。 C++ 中的类型推断机制允许我们省略显式指定类型。

通过使用泛型和模板,我们可以消除代码重复并编写更灵活和可重用的代码。这种方法允许我们处理不同的数据类型,而无需为每种类型创建单独的函数。

我希望这个视频能帮助您理解 C++ 中泛型和模板的概念。如果您觉得有用,请订阅我的频道并给这个视频点赞。您的支持是极大的赞赏。感谢您的观看,我们将在下一个视频中见到您。再见!

C++ FUNCTIONS (2020) - What are generic functions and templates? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What are generic functions and templates? PROGRAMMING TUTORIAL
  • 2020.11.11
  • www.youtube.com
Generic programming is used to increase the efficiency of the code. The advantage of writing generic code is code reusability (which means that code that was...
 

如何用 C++ 构建 ATM 应用程序? (对于初学者)


如何用 C++ 构建 ATM 应用程序? (针对初学者)- 编程教程(2020)

欢迎来到我的频道!我是 Saldina,我制作与编程相关的视频。如果您对此感兴趣,请考虑订阅我的频道并为该视频点赞。

在本视频中,我将向您展示如何构建 ATM 应用程序。首先,让我们规划应用程序的功能。我们需要以下内容:

  1. 查看余额
  2. 存钱
  3. 提款
  4. 显示菜单

现在,让我们开始实现“显示菜单”功能。我们将创建一个名为“showMenu”的函数,用于向用户显示菜单选项。

定义菜单后,我们将调用“showMenu”函数来显示它。然后,我们将允许用户选择一个选项。

为了处理用户的选择,我们将使用 switch case。对于每种情况,我们将执行相应的操作。对于选项 1,我们将显示余额。对于选项 2,我们将询问存款金额并相应更新余额。对于选项 3,我们会在更新余额之前询问提款金额并检查其是否有效。最后,我们将添加选项 4 来退出程序。

为了使用户能够重复与菜单交互,我们将使用 do-while 循环。循环将继续,直到用户选择选项 4。

您可以随意通过添加更多功能来增强该程序,例如在帐户之间转账。在评论中分享您的代码,我将对其进行审核。不要忘记喜欢、订阅并点击小铃铛图标。下一个视频见!

How to build an ATM application in C++? (For beginners) - PROGRAMMING TUTORIAL (2020)
How to build an ATM application in C++? (For beginners) - PROGRAMMING TUTORIAL (2020)
  • 2020.08.03
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

现代 C++ 中的 Lambda 表达式(深入分步教程)


现代 C++ 中的 Lambda 表达式(深入分步教程)

欢迎大家来到我的频道!在本视频中,我将讨论现代 C++ 中的一个重要主题,即 lambda 表达式,也称为 lambda。您以前可能听说过 lambda,今天我将解释您需要了解的所有信息,以便开始在现代 C++ 中使用 lambda 编写更快、更简洁的代码。

我将介绍最重要的概念,但请记住 lambda 是一个广泛的主题,有很多东西需要学习。如果您需要更多示例和练习,我将在说明中提供一本免费的书籍,重点介绍现代 C++ 中的 lambda。请随意检查一下。

Lambda 表达式是在现代 C++ 中引入的,并且在 C++11 及更高版本中可用。它们的主要目的是允许您编写内联匿名函数。那么什么是内联匿名函数呢?常规函数允许您编写一次代码,并在再次需要该代码时通过调用该函数来重用它,从而消除了对冗余代码的需要。另一方面,内联函数是一个小而简单的函数,并不意味着像这样的函数可以被重用常规功能。它们通常用于不需要名称且不值得创建单独函数的小代码片段。这就是 lambda 的闪光点,因为它们提供了一种编写未命名函数的方法,这些函数简洁、易于阅读、执行快速,并将所有内容保存在一个位置。

现在,让我们深入研究代码。在本演示中,我将使用 C++Builder,它是构建 C++ 用户界面应用程序的理想 IDE。如果您有兴趣了解 C++ 用户界面应用程序,我将在说明中提供一个链接,您可以在其中下载 C++Builder。首先,让我们创建一个控制台应用程序。单击“文件”,然后单击“新建其他”,然后选择“控制台应用程序”。确保选择了 C++,然后单击“确定”。这是我们的初始代码。让我们对其进行一些补充。

首先,我将添加一个“系统暂停”命令,以在执行代码后保持控制台窗口打开。接下来,我将包含用于输入/输出操作的“iostream”库。现在,我们的代码已准备好运行,如果我们执行该程序,我们将看到“Hello, World!”控制台中的消息。现在,让我们看一下 lambda 表达式的结构。我将删除以前的代码,我们将从一个简单的示例开始。为了创建 lambda,我们使用以下语法:尖括号(捕获子句)、圆括号(参数)和大括号(函数定义)。

在 capture 子句中,我们可以指定要在 lambda 中使用的封闭范围中的变量。现在,让我们将捕获子句留空并关注参数。我们可以在括号内定义参数。在此示例中,我将使用单个参数“p”。最后,我们在大括号内定义 lambda 的函数体。现在,让我们创建一个示例,在该示例中我们将遇到问题,然后使用 lambda 来解决它。我们将使用向量,因此我们需要包含“向量”库。我将创建一个名为“v”的整数向量,并使用一些值对其进行初始化。接下来,我将介绍“算法”库中一个名为“for_each”的有用函数。该函数迭代某个范围内的元素(例如我们的向量),并将给定函数应用于每个元素。

在“for_each”函数内,我们将使用“v.begin()”和“v.end()”指定范围。现在,让我们定义我们想要对每个元素执行的操作。首先,我将向您展示代码中的问题,然后介绍 lambda 作为解决方案。我添加了一个带有打印参数的重载运算符的结构。我们期望“for_each”函数打印向量中的所有元素。如果我们执行代码,我们会发现它没有按预期工作。它只打印最后一个元素。这是因为重载的运算符是按值传递的,每次调用都会复制参数,导致输出不正确。为了解决这个问题,我们可以用 lambda 表达式替换重载的运算符。我将复制我们之前讨论的 lambda 表达式语法并将其粘贴到“for_each”函数中。现在,让我们再次执行代码。

正如您所看到的,lambda 表达式运行良好,它会打印向量中的所有元素。 lambda 表达式简化了代码并提高了可读性。它还确保将正确的参数传递给每个调用,避免我们之前遇到的问题。现在,让我们探索 lambda 的另一个有用功能,即它们从封闭范围捕获变量的能力。此功能允许 lambda 访问变量并在 lambda 内部使用它们。但是,默认情况下,lambda 按值捕获变量,这意味着它们创建变量的副本。

在下一个示例中,我将创建一个名为“multiplier”的变量并将其设置为 2。在 lambda 内,我将使用此变量来乘以向量中的每个元素。这次,我将使用基于范围的 for 循环而不是“for_each”函数来进行演示。如果我们执行代码,我们将看到向量中的元素乘以 2,这要归功于捕获的变量。但是,按值捕获变量存在限制。我们无法修改 lambda 内捕获的变量。

为了克服这个限制,我们可以通过引用捕获变量,从而允许我们修改它的值。我将通过向 lambda 表达式添加增量操作来演示这一点。现在,如果我们执行代码,我们将看到向量中的元素乘以 2,然后递增 1。从封闭范围捕获变量提供了灵活性,并允许 lambda 无缝地处理外部数据。重要的是要记住,通过引用捕获变量可能会产生影响,例如生命周期管理和潜在的数据竞争。因此,使用此功能时要小心,并确保捕获的变量在 lambda 执行期间保持有效。

总而言之,lambda 表达式是现代 C++ 中用于编写简洁且可读的代码的强大工具。它们允许您创建内联匿名函数,从而减少小代码片段对单独函数的需求。 Lambda 还可以从其封闭范围访问变量,从而提供灵活性并增强代码重用。

我希望您发现此视频有助于理解现代 C++ 中的 lambda 表达式。如果您有任何疑问,请随时在下面的评论中提问。不要忘记喜欢这个视频并订阅我的频道以获取更多 C++ 教程。感谢您的观看,祝您编码愉快!

Lambda expressions in modern C++ (in depth step by step tutorial)
Lambda expressions in modern C++ (in depth step by step tutorial)
  • 2021.11.17
  • www.youtube.com
A lambda is an unnamed function that is used for short snippets of code that cannot be reused and are not worth naming. It makes the code cleaner, easier to ...
 

面向专业人士的 Visual Studio 提示和技巧 - Visual Studio 教程



面向专业人士的 Visual Studio 提示和技巧 - Visual Studio 教程

大家好!我叫 Leslie Richardson,是 Visual Studio 调试和诊断团队的程序经理。在本视频中,我很高兴讨论 Visual Studio 2019 中的一项新功能,称为“汽车”、“本地”和“监视”窗口的搜索功能。此功能旨在大大增强您的调试体验并节省您宝贵的时间,从而提高您的工作效率。

为了演示此功能,让我们考虑一个场景,其中我在 Visual Studio 2019 中打开了一个 .NET Core 应用程序。在此应用程序中,我有一个包含多个配方对象的列表。我面临的挑战是在此列表中查找特定的食谱,这可能非常乏味,尤其是当列表包含 61 个对象时。手动展开每个对象、查找标题属性并检查它是否符合我的搜索条件(例如“沙拉”)是一项耗时的任务。

为了简化这个过程,我将利用一个名为“调试器显示”的功能。此功能允许我自定义对象在各种调试器窗口中的显示方式,包括“自动”、“本地”和“监视”窗口。通过将“调试器显示”属性添加到对象的类定义中,我可以指定应在这些窗口的值列中显示哪个属性。在本例中,我想按标题查看每个配方,因此我设置“调试器显示”属性来显示配方标题属性。

现在,当我再次展开菜谱列表时,我可以立即看到每个对象的标题,从而更容易找到所需的菜谱,而无需单独展开每个对象。这是一个重大改进,但有 61 个项目,仍然需要时间才能找到我感兴趣的特定食谱。这就是监视窗口的搜索功能派上用场的地方。

我可以简单地使用提供的搜索功能,而不是手动滚动或展开列表。我输入搜索词,例如“沙拉”,然后按 Enter 键。 Visual Studio 立即将我带到该关键字第一次出现的位置,节省了我大量的时间和精力。我还可以利用“查找下一个”按钮来浏览 Visual Studio 找到的其他匹配项。要在匹配列表中向后和向前导航,我可以调整搜索步骤参数,该参数决定搜索的深度。

除了搜索功能之外,我还想提一下,调试器显示功能可供托管代码用户使用,例如使用 C#、F# 或 Visual Basic 的用户。对于 C++ 用户,有一个名为 NATVIS 的等效功能可用。使用 NATVIS,您需要创建一个单独的 XML 文件,您可以在其中定义要在调试器窗口中显示的属性。

我希望这个解释有帮助。感谢您的观看!

现在,让我们探讨如何使 Visual Studio 的界面更有条理并提高其性能。当我们在 Visual Studio 中打开解决方案时,它会记住我们上次使用它时解决方案资源管理器中的文档状态、滚动位置和展开/折叠部分。虽然这很有用,但它也会消耗 CPU 周期,并且可能并不总是理想的。为了重新开始并提高性能,我们可以更改一些设置。

在“工具”>“选项”菜单中的“项目和解决方案”部分下,有两个设置需要考虑。 “加载解决方案时重新打开文档”选项会记住以前打开的文档,“加载解决方案时恢复解决方案资源管理器项目层次结构状态”选项会记住解决方案资源管理器的展开/折叠状态。通过取消选中这些选项,Visual Studio 在打开解决方案时将不会恢复之前的状态。相反,它将从头开始,不会在解决方案资源管理器中打开任何文档或扩展部分。这有助于提高性能并为每个解决方案提供一个新的开始。

在 Visual Studio 中使用 Git 时,有多种功能可以提高您的工作效率和协作能力。 Git 更改窗口提供了 Git 存储库的全面视图,并允许您直接从 Visual Studio 中暂存、提交和推送更改。您可以通过转到“查看”>“Git 更改”来访问此窗口。此外,Visual Studio 提供了一个内置的 Git diff 工具,可以突出显示不同版本的代码之间的差异。您可以通过右键单击解决方案资源管理器中的文件并选择“与未修改的比较”或“与最新的比较”来访问此功能。

Visual Studio 中的另一个有用的功能是重构代码的能力。重构有助于改善代码的结构和可读性,而不改变其行为。 Visual Studio 提供了各种重构选项,例如重命名变量或方法、将代码提取到单独的方法或类中以及重新组织代码块。要访问这些重构选项,请右键单击要重构的代码,然后从上下文菜单中选择“重构”。您还可以使用键盘快捷键进行常见的重构操作,例如 Ctrl + R、Ctrl + R 重命名符号。

为了进一步增强您的编码体验,您可以利用 Visual Studio 中的代码片段。代码片段是预定义的代码模板,可以通过键入快捷方式并按 Tab 键快速插入到代码中。 Visual Studio 为不同的编程语言和框架提供了广泛的内置代码片段。您还可以创建自己的自定义代码片段来自动执行重复的编码任务。要访问和管理代码片段,请转到“工具”>“代码片段管理器”。

调试是开发过程中必不可少的一部分,Visual Studio 提供了强大的调试功能。您可以在代码中设置断点来暂停执行并检查变量和对象的状态。调试时,您可以使用“监视”窗口来监视特定变量或表达式的值。立即窗口允许您在调试时执行代码并计算表达式。您还可以利用条件断点(仅在满足特定条件时触发)和跟踪点(将消息打印到输出窗口而不暂停调试器)。

Visual Studio 还支持单元测试,这对于确保代码的质量和正确性至关重要。您可以使用各种测试框架(例如 MSTest、NUnit 或 xUnit)创建单元测试。 Visual Studio 提供了一个测试资源管理器窗口,其中显示解决方案中的所有可用测试,并允许您单独或成组运行或调试它们。您可以使用属性来定义测试方法和断言来验证预期结果。 Visual Studio 还提供代码覆盖率分析,显示单元测试覆盖了多少代码。

在处理大型项目或解决方案时,导航和理解代码库可能具有挑战性。 Visual Studio 提供了多种功能来帮助代码导航和理解。解决方案资源管理器允许您探索解决方案的结构并快速导航到特定文件或类。您还可以使用“导航到”功能 (Ctrl + ,) 在解决方案中搜索符号、文件或类型。 CodeLens 功能直接在编辑器中显示有关代码的附加信息,例如引用、更改和测试覆盖率。

对于 Web 开发,Visual Studio 为 HTML、CSS 和 JavaScript 等流行的 Web 技术提供了出色的支持。 HTML 编辑器提供 IntelliSense、代码格式化以及直接在编辑器中预览 HTML 页面的功能等功能。 CSS 编辑器提供类似的功能,包括颜色选择器、CSS 属性的 IntelliSense 以及 CSS 更改的实时预览。 Visual Studio 还支持 JavaScript 调试,允许您设置断点、检查变量以及单步执行代码以识别和修复问题。

Visual Studio 拥有庞大的扩展和插件生态系统,可以增强您的开发体验。这些扩展为特定框架或平台提供附加功能、语言支持和工具。您可以通过转到“扩展”>“管理扩展”直接从 Visual Studio 中浏览和安装扩展。一些流行的扩展包括 ReSharper(提供高级代码分析和重构工具)和 Visual Studio Code(提供轻量级跨平台代码编辑器)。

在处理协作项目时,Visual Studio 提供与 Azure DevOps 和 GitHub 等协作平台的集成。您可以轻松地将 Visual Studio 项目连接到远程 Git 存储库,并执行常见的 Git 操作,例如推送、拉取和合并更改。 Visual Studio 还提供用于代码审查、工作项跟踪以及持续集成和部署工作流的工具。

Visual Studio 支持多种编程语言和框架,包括 .NET、C++、Python、JavaScript 等。它提供特定于语言的功能,例如针对每种语言量身定制的 IntelliSense、代码片段和调试功能。您可以安装特定于语言的扩展和 SDK,以进一步增强您首选编程语言的开发体验。

为了性能优化和故障排除,Visual Studio 提供了分析工具,可帮助识别应用程序中的瓶颈和内存泄漏。性能分析器允许您分析代码的性能并确定可以优化的区域。内存分析器可帮助您检测和诊断应用程序中与内存相关的问题。这些分析工具提供详细的报告和见解,帮助您优化代码并提高应用程序性能。

Visual Studio 还为 Android 和 iOS 等平台的移动应用程序开发提供支持。您可以使用 Xamarin 或 React Native 等框架创建跨平台移动应用程序。 Visual Studio 提供了用于设计用户界面、调试移动应用程序以及将其部署到模拟器或物理设备的工具。您还可以利用 Azure 移动应用等云服务进行后端集成和存储。

除了传统的桌面和 Web 应用程序之外,Visual Studio 还支持物联网 (IoT) 应用程序的开发。您可以使用 Visual Studio 为 Raspberry Pi、Arduino 和其他 IoT 设备等设备构建应用程序。 Visual Studio IoT 开发工具为 IoT 场景提供项目模板、调试支持和部署选项。

Visual Studio 还提供云开发功能以及与 Azure 等流行云平台的集成。您可以直接从 Visual Studio 中创建、管理和部署云资源。它提供了用于构建和部署云应用程序、与云服务集成以及监控云资源的工具。

这些只是 Visual Studio 为开发人员提供的众多特性和功能中的一部分。它是一个功能强大且多功能的 IDE,可以满足广泛的开发需求和工作流程。无论您正在处理小型项目还是大型企业解决方案,Visual Studio 都提供了工具和功能来简化您的开发流程并提高您的工作效率。

Visual Studio Tips and Tricks for Professionals - Visual Studio Tutorial
Visual Studio Tips and Tricks for Professionals - Visual Studio Tutorial
  • 2020.07.01
  • www.youtube.com
Learn to use Visual Studio like pro from creating layouts to keyboard shortcuts.C++ tutorial: https://youtu.be/mUQZ1qmKlLYJava tutorial : https://youtu.be/Wq...
 

在 20 分钟内为 MetaTrader 5 编写完整的 EA 代码!



在 20 分钟内为 MetaTrader 5 编写完整的 EA 代码!

今天,我们很高兴开始为 MetaTrader 交易平台记录我们的第一个 EA(EA 交易)。该 EA 被设计为 MetaTrader 的交易系统,在我们的视频中,我们还将执行快速回测来评估其性能。

首先,我们启动 MetaTrader 平台并通过单击“工具”并从下拉菜单中选择“MetaQuotes 语言编辑器”来访问 MetaEditor。 MetaEditor 是我们创建专家顾问以及 MetaTrader 脚本和指标的地方。

要创建新的智能交易系统,我们单击 MetaEditor 左上角的“新建”按钮。在出现的向导中,我们选择第一个选项,然后单击“下一步”。然后,我们可以为 EA 命名,例如“First EA”,然后再次单击“下一步”。我们跳过选择任何其他选项并单击“完成”继续。

现在我们有了 EA 的初始代码。首先,我们通过删除不必要的注释来清理代码,例如对代码本身不提供任何功能的灰色注释。我们根据自己的喜好删除前五行和其他一些不必要的行。

在开始编码之前,让我们花点时间考虑一下我们希望 EA 做什么。对于本视频,我们的目标是让 EA 在特定时间打开买入交易,并在一天中的另一个预定时间关闭该交易。为了实现这一目标,我们需要两个输入变量:一个用于打开时间,另一个用于关闭时间。

返回到 MetaEditor,我们在名为“变量”的新部分下声明这两个输入变量。我们使用“input”关键字来指定可以从代码外部更改这些变量。我们将它们的类型设置为整数,因为我们想要输入特定的小时值。例如,我们可以将变量命名为“openHour”和“closeHour”。

声明变量后,我们编译代码以确保没有错误。如果一切正确,我们可以看到工具箱中没有错误消息。

接下来,我们切换回 MetaTrader 平台并将我们的 EA 拖到任何图表上。我们可以在导航器的“EA 交易”下看到 EA 的名称、版本和链接。通过扩展 EA,我们可以访问输入变量并更改其值,而无需修改代码。

现在,让我们继续讨论“OnTick”函数,每次价格变化时都会调用该函数。我们想要检查是否已达到用户指定的开放时间。为此,我们需要检索品种和服务器的当前时间。我们创建一个名为“datetime”类型的“time”变量,并使用“TimeCurrent”函数将当前时间分配给它。

将当前时间存储在“time”变量中后,我们现在可以检查它是否与开放时间匹配。我们使用“if”语句将“openHour”变量与当前时间的小时部分(“time.hour”)进行比较。如果条件为真,我们进入“if”块。

在“if”块内,我们使用“OrderSend”函数建仓。我们指定交易品种、交易方向(买入)、手数(1 手)和要价作为参数。此外,我们根据我们的喜好设置止损和止盈值。

编译代码并使用 MetaTrader 策略测试器运行回测后,我们观察到 EA 在指定的开仓时间建仓。然而,我们注意到,由于后续价格变动再次触发“OnTick”功能,因此开立了多个仓位。

为了防止打开多个头寸,我们引入了一个名为“isTradeOpen”的布尔变量来跟踪交易是否已经打开。最初,我们将“isTradeOpen”的值设置为 false。在开立新仓位之前,我们检查“isTradeOpen”是否为假。如果是,我们继续开仓并将“isTradeOpen”的值设置为 true。这样,即使“OnTick”功能被多次触发,它也只会在尚无未平仓交易的情况下开设新仓位。

实现这个逻辑后,我们再次编译代码并运行回测。这次,我们观察到 EA 在指定的开仓时间开仓,并且在前一个仓位平仓之前不会再开仓。

接下来要在指定的关闭时间关闭交易,我们需要在“OnTick”函数中引入另一个检查。建仓后,我们将当前时间与用户指定的平仓时间进行比较。如果它们匹配,我们就输入“if”块。

在“if”块内,我们使用“OrderClose”函数关闭交易。我们提供要平仓的单号以及手数和买入价作为参数。此外,如果需要,我们可以设置其他参数,例如止损和止盈值。

我们再次编译代码并运行回测以验证交易是否在指定的平仓时间平仓。回测时,我们可以查看交易历史,确保按照指定次数建仓平仓。

我们已经成功为 MetaTrader 交易平台创建了第一个 EA。 EA 旨在在特定的开仓时间开立买入交易,并在预定的平仓时间平仓。我们已经实现了输入变量,以允许在不修改代码的情况下自定义打开和关闭时间。通过引入检查和变量,我们确保一次仅开立一笔交易,并在指定的平仓时间平仓。

Code complete EA for MetaTrader 5 in 20 Minutes!
Code complete EA for MetaTrader 5 in 20 Minutes!
  • 2022.06.27
  • www.youtube.com
Program your first EA for MetaTrader. I will show you how you can easily code your first Expert Advisor or trading system in Mql5.As an algo trader I develop...
 

移动平均线交叉 EA mql5 编程



移动平均线交叉 EA mql5 编程

大家好,我是 Toby,在今天的视频中,我将向您展示如何为 MetaTrader 5 编写一个简单的移动平均交叉智能交易系统。让我们开始吧。

首先,让我们定义我们希望专家顾问做什么。我们希望 EA 在快速移动平均线(蓝线)穿越慢速移动平均线(红线)上方时建立买入仓位,并在快速移动平均线穿越慢速移动平均线下方时建立卖出仓位。我们还将向 EA 添加止损和止盈,以及移动平均线周期的输入变量。

要开始编码,请在 MetaTrader 5 中打开 MetaEditor。使用模板创建一个新的 EA 交易并将其命名为“移动平均线”。通过删除不必要的行和注释来清理代码。接下来,添加快速和慢速移动平均线周期的输入变量。为这些变量设置默认值并将其显示在 EA 设置的输入选项卡中。

检查 OnInit 函数中的用户输入以确保输入的值有效。如果输入无效(零或负),则显示警告消息并停止 EA。使用 ma 函数创建快速和慢速移动平均线的句柄。设置每个移动平均线的交易品种、周期和输入变量。检查句柄创建是否成功。如果没有,则显示警报消息并停止 EA。创建用于存储指标值的全局变量。对快速和慢速缓冲区使用动态数组。在 OnTick 函数中,将最新的指标值复制到缓冲区中并检查是否有足够的数据可用。如果没有,则返回并显示警报消息。

打印屏幕上的指示器值以验证一切是否正常工作。使用注释功能显示快速和慢速移动平均线的值。

在策略测试器中,测试 EA 以检查指标值是否正确显示。现在,我们可以检查移动平均线的交叉。如果快速移动平均线在柱 1 处低于慢速移动平均线且在柱 0 处高于慢速移动平均线,则出现交叉。在这种情况下,建立买入仓位。

要开仓,请使用 CTrade 类。定义贸易变量并继续执行必要的操作。编译代码并在策略测试器中测试 EA,以验证交叉条件是否正常工作并相应地开仓。

这就是在 MetaTrader 5 中编写移动平均线交叉智能交易系统的过程。然后我们可以使用 trade.Buy 函数来开立买入仓位。我们指定头寸的数量,可以是固定值或基于您的风险管理策略。现在,我们使用 0.1 手的固定交易量。现在我们需要添加一个条件来检查卖出头寸。如果快速移动平均线高于第 1 根柱线的慢速移动平均线且低于当前柱线,则出现相反方向的交叉。在这种情况下,我们想要建立一个卖出头寸。我们可以使用 trade.Sell 函数来做到这一点。

最后,我们可以为我们的仓位添加止损和获利。我们将使用 trade.SetStopLoss 和 trade.SetTakeProfit 函数。在此示例中,我们将止损设置为 100 点,止盈为 200 点。现在我们有了简单移动平均线交叉智能交易系统的完整代码。我们可以编译它并在 MetaTrader 5 平台中测试它。

一旦您编译的代码没有任何错误,您就可以保存 EA 交易并在 MetaTrader 5 中使用它。请记住在用真钱使用它之前回测并优化您的 EA 交易。

Moving Average Crossover EA mql5 Programming
Moving Average Crossover EA mql5 Programming
  • 2022.09.06
  • www.youtube.com
Today I will show you how to code a simple Moving Average Crossover EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a f...
 

范围突破 EA mql5 编程 |第 1/4 部分



范围突破 EA mql5 编程 |第 1/4 部分

大家好,我是 Toby,在今天的视频中,我将向您展示如何为 MetaTrader 5 编写时间范围突破智能交易系统 (EA)。目标是实现与视频中所示策略类似的结果。

首先,我们来讨论一下 EA 背后的逻辑。我们将定义一个简单的时间范围,从特定时间开始并在另一个时间结束。 EA 将保存该范围内的最高价格和最低价格。如果价格突破该范围后的最高价,EA 将进入买入交易。相反,如果价格跌破该范围,EA 将进入卖出交易。此外,我们将设定平仓时间来平仓所有仓位。这种简单的逻辑将指导我们的 EA。

要开始编码,请打开 MetaEditor 并创建一个新的智能交易系统。根据个人喜好清理模板代码,删除不必要的行。

接下来,定义开始时间、范围持续时间、结束时间、手数和幻数的输入变量。这些输入允许用户自定义 EA 的行为。检查输入值以防止错误输入非常重要。例如,我们可以确保幻数不为零或负数,手数不为负数,开始时间和持续时间在有效范围内,并且结束时间不等于开始时间加上范围持续时间。

定义输入变量并检查它们的值后,我们继续创建全局变量。这些变量将在整个 EA 中使用。我们将与范围相关的变量分组到称为“范围结构”的结构中。该结构包含开始时间、结束时间、收盘时间、最高价和最低价的变量,以及入场、高位突破和低位突破的标志。

此外,我们定义了结构的构造函数,在其中预定义了变量的初始值。这有助于使用默认值初始化结构。我们还在每个变量后面添加注释来描述它们的用途。

我们编译代码以检查是否有任何错误并确保一切正常工作。

最后,我们创建更多变量,例如 MetaTrader 5“MqlTick”类型的“MqlTick”和“last_tick”。我们还定义了一个“CTrade”类型的变量来处理与贸易相关的操作。

此时,我们已经为 EA 设置了必要的变量和结构。在下一部分中,我们将深入在“OnTick”函数中编写 EA 的实际逻辑。在视频的下一部分中,我们将重点介绍 OnTick 函数中 EA 交易的实际逻辑。然而,在我们继续之前,让我们首先回顾一下到目前为止我们所做的事情。

我们首先定义 EA 的输入变量,例如范围的开始时间、持续时间、平仓时间、手数大小和幻数。我们还添加了输入验证检查,以确保用户为这些输入输入有效值。接下来,我们创建了一个名为 rangeStructure 的结构体来存储与范围相关的变量,包括开始时间、结束时间、收盘时间、范围的最高点和最低点,以及入场、高位突破和低位突破的标志。然后,我们为 rangeStructure 定义了一个构造函数,以使用默认值初始化变量。此外,我们还声明了一些全局变量,包括 rangeStructure 的实例、用于存储当前和先前价格变动的 MqlTick 类型的两个变量,以及用于处理交易操作的 CTrade 对象。

现在,我们继续实现 OnTick 函数来编写 EA 的主要逻辑。以下是视频的延续:在 OnTick 函数中,我们将首先使用 SymbolInfoTick 函数更新当前的报价信息。这使我们能够访问买入价和卖出价以及报价时间。接下来,我们将检查当前滴答时间是否在用户定义的范围内。为此,我们将当前刻度时间与范围的开始时间和结束时间进行比较。如果滴答时间在范围内,我们将 flagEntry 设置为 true,表明我们在范围内。

之后,我们检查是否出现高位突破。如果当前价格变动超出范围的前一个高点并且 flagHighBreakout 为假,我们将启动买入交易。我们将 flagHighBreakout 设置为 true 以避免重复输入。同样,我们检查是否有低位突破。如果当前价格跌破该范围的前一个低点并且 flagLowBreakout 为假,我们将启动卖出交易。我们将 flagLowBreakout 设置为 true 以防止多次输入。最后,我们检查当前的报价时间是否等于平仓时间。如果是这样,我们使用 trade.CloseAll 方法关闭所有未平仓头寸。

这就是 EA 的基本逻辑。当然,您可以添加其他元素来增强其功能,例如止损和止盈水平、资金管理规则和其他交易过滤器。然而,在本视频中,我们重点讨论了时间范围突破策略的核心概念。

请记住,此 EA 旨在作为起点,您可以根据您的要求和交易偏好进一步对其进行自定义。

在视频的下一部分中,我们将继续编码过程,添加必要的代码来实现所讨论的逻辑。如果您发现此视频有帮助,请不要忘记点赞并订阅我的频道,以随时了解未来视频的最新动态。如果您有任何疑问或需要帮助,请随时发表评论,我很乐意为您提供帮助。感谢您的观看,我们将在下一个视频中见到您。再见!

Range Breakout EA mql5 Programming | Part 1/4
Range Breakout EA mql5 Programming | Part 1/4
  • 2022.09.25
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
 

范围突破 EA mql5 编程|第 2/4 部分



范围突破 EA mql5 编程|第 2/4 部分

大家好,我是 Toby,在今天的视频中,我们将继续为 MetaTrader 5 编写时间范围突破 EA。如果您还没有观看第一个视频,可以在此处找到链接。在上一个视频中,我解释了 EA 的逻辑以及我们正在尝试编码的内容。

现在,让我们切换到 MetaEditor 并继续编码。我们将研究 OnTick 函数,每次交易品种的价格发生变化时都会调用该函数。在此函数中,我们将编写范围计算和突破检查的代码。首先,我们需要获取交易品种的当前价格变动。我们将当前的报价存储在一个名为 currentTick 的变量中,并且我们还有一个变量 previousTick 来存储上一个报价。

接下来,我们检查是否需要计算新的范围。计算新范围有几个条件。

  1. 如果我们设置了范围收盘时间并且当前报价时间大于或等于范围收盘时间,我们将计算一个新范围。

  2. 如果高位突破和低位突破标志均设置为 true,我们将计算一个新的范围。

  3. 如果这是第一次运行 EA 并且我们尚未计算范围,我们会计算一个新范围。

  4. 如果范围结束时间不为零,并且我们在范围之后并且尚未进入范围,则我们计算一个新范围。

我们还会检查是否有任何未平仓头寸。如果没有未平仓头寸,我们将继续计算新的范围。

一旦我们确定需要计算新的范围,我们就调用CalculateRange函数。在此函数中,我们将所有范围变量重置为其默认状态。然后,我们通过获取一天的开始时间并添加输入范围开始时间(以分钟为单位)来计算范围开始时间。如果计算的开始时间已经过去,我们会将其移至第二天,将周六和周日视为周末。同样,我们通过将输入范围持续时间(以分钟为单位)添加到开始时间来计算范围结束时间。如果结束时间是周六或周日,我们会将其移至下一个有效日期。

我们还使用与开始时间和结束时间计算相同的逻辑来计算范围关闭时间。为了在图表上可视化计算的时间,我们使用 ObjectCreate 函数创建对象。我们为范围开始时间创建一个垂直线对象,并删除任何先前绘制的对象。

这是我们迄今为止取得的进展,我们将在下一个视频中继续编码。

Range Breakout EA mql5 Programming| Part 2/4
Range Breakout EA mql5 Programming| Part 2/4
  • 2022.10.01
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
 

范围突破 EA mql5 编程 |第 3/4 部分


范围突破 EA mql5 编程 |第 3/4 部分

大家好,我是 Toby,在今天的视频中,我们将继续编写我们的突破性 EA。在之前的视频中,我们已经计算了范围开始时间、结束时间和关闭时间。现在,我们要对范围高点和范围低点以及突破条件和平仓进行编码。如果您还没有观看过之前的视频,可以在下面的描述中找到链接。让我们进入 MetaEditor 并开始编码。

首先,我们将进入 OnTick 函数。我们将首先检查是否在范围内并保存高值和低值。我们使用 if 语句来检查当前时间是否在范围开始时间和结束时间之间。如果是,我们会相应地更新高值和低值。我们还将入口标志设置为 true,以表明我们在范围内有一个勾号。然后我们更新图表对象的最高点和最低点范围。

接下来,我们转到 DrawObject 函数来绘制范围的高位和低位。我们复制关闭时间的代码块,并对高层进行必要的更改。我们使用对象名称“Range High”并绘制从范围开始时间到范围最高价的趋势线。我们还更新了工具提示以显示范围高值。我们对范围低点执行相同的操作,更改对象名称并绘制从范围开始时间到范围低点价格的趋势线。

为了从范围终点到收盘时间绘制一条线来表示突破,我们再次复制代码块并进行相应修改。我们更改对象名称并绘制从范围结束时间到收盘时间的趋势线。我们还将线条样式设置为点线。

编译并运行可视化测试后,我们可以看到图表上显示的范围高点、范围低点和突破线。现在,让我们编写突破条件的代码。我们在 OnTick 函数中添加了一个名为 CheckBreakouts 的新函数。首先,我们检查是否在范围结束时间之后。我们还确保入口标志设置为 true,表明我们在范围内有一个勾号。如果满足这些条件,我们将继续检查高点和低点突破。

对于高位突破,我们检查高位突破标志是否为假,以及最后报价的卖价是否大于或等于范围高位。如果是这样,我们使用 PositionOpen 函数建立买入仓位。同样,对于低位突破,我们检查低位突破标志是否为假,以及最后一个价格变动的买入价是否低于或等于范围低点。如果满足这些条件,我们将建立卖出头寸。

我们编译代码并运行可视化测试,以确认突破发生时是否已建仓。接下来,我们实施平仓。在计算新范围之前,我们检查当前时间是否大于或等于范围关闭时间。如果是这样,我们调用 ClosePositions 函数。该函数循环遍历具有指定幻数的所有未平仓头寸,并使用 PositionClose 函数将其平仓。我们使用倒计时循环来确保即使持仓总数在循环期间发生变化,所有持仓也会被平仓。

最后,我们编译代码并运行可视化测试,以确认在达到范围平仓时间时平仓。

本视频就是这样。如果您有任何疑问,请随时在下面的评论中留下。不要忘记喜欢并订阅更多编码视频。感谢您的观看!

Range Breakout EA mql5 Programming | Part 3/4
Range Breakout EA mql5 Programming | Part 3/4
  • 2022.10.09
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
原因: