文章 "MQL5 中的交易操作 - 很简单" - 页 4

 
Konstantin Efremov:

更新:拉希德在上面发布了一个库文件,解决了我的问题。令人遗憾的是,标准库出现了错误。我现在要研究比较一下,看看是否有可能在不替换库的情况下直接在 EA 中做一些修改,这样一切就都能正常工作了

这些修改已经在标准库中 了。我决定现在才回答那些会阅读这篇文章的人。

 

很好,确实不错

 
<Deleted>
.
 
Andy Obama:
 

大家好!

我在继续学习MQL5 编程语言。为了寻找对我有用的信息,我几乎搜索了整个网站。网站上的大部分信息都是为已经对编程有基本了解的人准备的。

还有这里!我发现了另一篇很棒的 文章,它帮助我理解并完善了我的智能交易系统!遗憾的是,作者没有继续撰写这一系列文章,而是将自己的文章局限于 2012 年。但无论如何,我都要向他表示崇高的敬意,并代表所有初学者向他说声 "谢"!

弗拉基米尔

Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
MetaQuotes Language 5 (MQL5) - язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации торговли на финансовых рынках. MQL5 является современным языком высокого уровня и разработан MetaQuotes Software Corp. для собственной торгово-информационной платформы. Синтаксис языка максимально близок...
 
与本主题无关的评论已移至"非主题帖子"。
 
pdev:

您好,感谢您提供这篇非常有用的帖子,请帮助我解决这个问题。我是 MT5 的新手,正在学习创建 EA,因此我复制了示例代码来执行 Ctrade.Buy,但回溯测试失败了。下面是更多信息:


1) 账户:真实账户,基础货币为新西兰元

2) 回溯测试的 MetaEditor 设置:


3) 代码:从 https://www.mql5.com/zh/articles/481 复制:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) 错误日志(请注意,我仅在欧元/美元上进行测试):

GJ 0 19:36:44.410 127.0.0.1 登录 (build 1730)

HH 0 19:36:44.420 网络已加载 38520 字节的账户信息

JO 0 19:36:44.420 网络 1482 字节的测试仪参数已加载

QE 0 19:36:44.420 网络 188 字节的输入参数已加载

FR 0 19:36:44.421 网络 443 字节已加载符号列表

IF 0 19:36:44.421 已添加测试专家文件:Experts/demo.ex5。已加载 46684 字节

QH 0 19:36:44.433 测试者初始入金 10000.00 新西兰元,杠杆 1:100

JN 0 19:36:44.437 测试器初始化成功

ES 0 19:36:44.437 网络共收到 46 Kb 初始化数据

PP 0 19:36:44.437 测试仪英特尔酷睿 i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 欧元兑美元:要同步的符号

HR 0 19:36:44.800 Symbols EURUSD:已同步符号,收到 3624 字节符号信息

NJ 0 19:36:44.800 历史记录 EURUSD:开始同步历史记录

GO 0 19:36:44.856 历史记录 EURUSD:在 0:00:00.000 加载 27 字节历史数据以同步

RQ 0 19:36:44.856 历史记录 EURUSD:历史同步从 2012.01.01 到 2017.11.15

EF 0 19:36:44.993 历史记录 EURUSD,每日:历史记录缓存分配了 1010 个条形图,包含从 2014.01.01 00:00 至 2014.12.31 00:00 的 312 个条形图

ND 0 19:36:44.993 历史记录 EURUSD,每日:历史记录从 2014.01.01 00:00 开始

OL 0 19:36:44.996 测试 EURUSD,Daily (HalifaxPlus-Live):生成每个刻度线

GN 0 19:36:44.996 Tester EURUSD,Daily: Test of Experts\demo.ex5 from 2015.01.01 00:00 to 2017.11.15 00:00 started

CK 0 19:36:56.288 Symbols NZDUSD:要同步的符号

IS 0 19:36:56.288 NZDUSD 符号:已同步符号,收到 3624 字节符号信息

JL 0 19:36:56.288 历史记录 NZDUSD:开始同步历史记录

HJ 0 19:36:56.575 历史记录 NZDUSD:在 0:00:00.078 加载 14 Kb 历史数据以同步

LS 0 19:36:56.575 历史记录 NZDUSD:已同步 2013.01.01 至 2017.11.15 的历史记录

CO 0 19:36:56.579 Symbols EURNZD:要同步的符号

OJ 0 19:36:56.580 Symbols EURNZD:已同步符号,收到 3624 字节符号信息

DL 0 19:36:56.580 历史记录 EURNZD:历史记录同步开始

MK 0 19:36:56.656 历史记录 EURNZD:加载 27 字节历史数据,在 0:00:00.000 同步

OD 0 19:36:56.656 历史 EURNZD:历史同步从 2013.01.01 到 2017.11.15

IN 0 19:36:56.665 交易 2015.01.02 03:00:00 市场买入 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 交易 2015.01.02 03:00:00 交易 #2 在 1.20549 做市买入 0.10 欧元兑美元(基于订单#2)

FH 0 19:36:56.666 交易 2015.01.02 03:00:00 成交 [#2 在 1.20549 买入 0.10 欧元兑美元]

OG 0 19:36:56.666 交易 2015.01.02 03:00:00 交易执行 [#2 在 1.20549 买入 0.10 欧元兑美元] #2 在 1.20549 买入 0.10 欧元兑美元

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy() 方法成功执行。Return code=10009 (done at 1.20549)

NM 2 19:37:15.823 历史记录 NZDUSD 2016.09.21 23:01:00: 发现历史记录损坏 (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 历史记录 NZDUSD 2016.09.21,发现不良容器,必须重新同步

LQ 2 19:37:16.106 测试程序历史记录未定义函数中的错误 9

OH 2 19:37:16.106 测试仪在测试间隔 0% 时停止,错误为 "20 NZDUSD


请告诉我出了什么问题以及如何解决?

[删除]  
pdev:

您好,感谢您提供这篇非常有用的帖子,请帮助我解决这个问题。我是 MT5 的新手,正在学习创建 EA,因此我复制了示例代码来执行 Ctrade.Buy,但回溯测试失败了。下面是更多信息:


1) 账户:真实账户,基础货币为新西兰元

2) 回溯测试的 MetaEditor 设置:


3) 代码:从 https://www.mql5.com/zh/articles/481 复制:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) 错误日志(请注意,我仅在欧元/美元上进行测试):

GJ 0 19:36:44.410 127.0.0.1 登录 (build 1730)

HH 0 19:36:44.420 网络已加载 38520 字节的账户信息

JO 0 19:36:44.420 网络 1482 字节的测试仪参数已加载

QE 0 19:36:44.420 网络 188 字节的输入参数已加载

FR 0 19:36:44.421 网络 443 字节已加载符号列表

IF 0 19:36:44.421 已添加测试专家文件:Experts/demo.ex5。已加载 46684 字节

QH 0 19:36:44.433 测试者初始入金 10000.00 新西兰元,杠杆 1:100

JN 0 19:36:44.437 测试器初始化成功

ES 0 19:36:44.437 网络共收到 46 Kb 初始化数据

PP 0 19:36:44.437 测试仪英特尔酷睿 i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 欧元兑美元:要同步的符号

HR 0 19:36:44.800 Symbols EURUSD:已同步符号,收到 3624 字节符号信息

NJ 0 19:36:44.800 历史记录 EURUSD:开始同步历史记录

GO 0 19:36:44.856 历史记录 EURUSD:在 0:00:00.000 加载 27 字节历史数据以同步

RQ 0 19:36:44.856 历史记录 EURUSD:历史同步从 2012.01.01 到 2017.11.15

EF 0 19:36:44.993 历史记录 EURUSD,每日:历史记录缓存分配了 1010 个条形图,包含从 2014.01.01 00:00 至 2014.12.31 00:00 的 312 个条形图

ND 0 19:36:44.993 历史记录 EURUSD,每日:历史记录从 2014.01.01 00:00 开始

OL 0 19:36:44.996 测试 EURUSD,Daily (HalifaxPlus-Live):生成每个刻度线

GN 0 19:36:44.996 Tester EURUSD,Daily: Test of Experts\demo.ex5 from 2015.01.01 00:00 to 2017.11.15 00:00 started

CK 0 19:36:56.288 Symbols NZDUSD:要同步的符号

IS 0 19:36:56.288 NZDUSD 符号:已同步符号,收到 3624 字节符号信息

JL 0 19:36:56.288 历史记录 NZDUSD:开始同步历史记录

HJ 0 19:36:56.575 历史记录 NZDUSD:在 0:00:00.078 加载 14 Kb 历史数据以同步

LS 0 19:36:56.575 历史记录 NZDUSD:已同步 2013.01.01 至 2017.11.15 的历史记录

CO 0 19:36:56.579 Symbols EURNZD:要同步的符号

OJ 0 19:36:56.580 Symbols EURNZD:已同步符号,收到 3624 字节符号信息

DL 0 19:36:56.580 历史记录 EURNZD:历史记录同步开始

MK 0 19:36:56.656 历史记录 EURNZD:加载 27 字节历史数据,在 0:00:00.000 同步

OD 0 19:36:56.656 历史 EURNZD:历史同步从 2013.01.01 到 2017.11.15

IN 0 19:36:56.665 交易 2015.01.02 03:00:00 市场买入 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 交易 2015.01.02 03:00:00 交易 #2 在 1.20549 做市买入 0.10 欧元兑美元(基于订单#2)

FH 0 19:36:56.666 交易 2015.01.02 03:00:00 成交 [#2 在 1.20549 买入 0.10 欧元兑美元]

OG 0 19:36:56.666 交易 2015.01.02 03:00:00 交易执行 [#2 在 1.20549 买入 0.10 欧元兑美元] #2 在 1.20549 买入 0.10 欧元兑美元

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy() 方法成功执行。Return code=10009 (done at 1.20549)

NM 2 19:37:15.823 历史记录 NZDUSD 2016.09.21 23:01:00: 发现历史记录损坏 (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 历史记录 NZDUSD 2016.09.21,发现不良容器,必须重新同步

LQ 2 19:37:16.106 测试程序历史记录未定义函数中的错误 9

OH 2 19:37:16.106 测试仪在测试间隔 0% 时停止,错误为 "20 NZDUSD


请告诉我出了什么问题以及如何解决?

 

在文章中,当限价单和止损单到处打开时

double price=1000*point;

我不知道那些写这篇文章的人是否帮他们插入了文章中的代码