Параметры
symbol
[in] Наименование торгового инструмента, по которому предполагается модифицировать позицию.
sl
[in] Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).
tp
[in] Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).
您能告诉我是否可以使用 m_Trade.PositionModify(m_Trade 是CTrade 类 的成员)在 MQL4 中实现此结构吗?
脚本的要点是在市场上以给定的手数开仓买入,然后设置 10 部分的止盈。我遇到的问题是,如果不设置止损,PositionModify 会给出错误 10016(请求中的止损不正确)。而且没有设置止损的任务。)帮助中说可以不指定值:
我试着传递从上一个购买请求中获得的值(当然是零),结果是,只有在配置文件中才有相同的耙子。以下是我的代码:
感谢您的帮助。
很好地介绍了 MQL5 中的面向对象编程。
在 MT5 版本 1347 中,第一个代码示例无法编译,并出现错误 "illegal switch expression type"。
我不得不在 AccountInfo.mqh 中的 switch 语句中将表达式转换为 int,使其正常工作,例如
switch((int)MarginMode())
在 RTS-3.13 Opening-demo 上遇到类似问题,尝试了所有方法(限价订单设置为 ORDER_TIME_SPECIFIED_DAY,如符号配置文件中所写)!!!!。而买入-止损订单在市场中是完全手动打开的。这是终端故障,您应该写信给开发人员
您好
在某些经纪商(例如 FoxPro)上,当尝试开仓时出现错误 10030。代码描述:无效填充。在其他经纪商(例如 Alpari)上,没有这些行也可以工作
在 Expert Advisor 的初始化块中,代码中写入了不同的值:
没有帮助。如何解决问题?还是说这个 CTrade 类已经过时,不符合最新的终端更新,我需要通过结构按照标准方案编写交易操作?
更新:Rashid 在上面发布了一个库文件,它解决了我的问题。标准库出现了错误,这让我很难过。我现在要研究比较一下,看看是否有可能在不替换库的情况下直接在 EA 中进行一些更改,从而使一切正常运行。
很好地介绍了 MQL5 中的面向对象编程。
在 MT5 版本 1347 中,第一个代码示例无法编译,并出现错误 "illegal switch expression type"。
我不得不在 AccountInfo.mqh 中的 switch 语句中将表达式转换为 int,使其正常工作,例如
switch((int)MarginMode())
您好,感谢您提供这篇非常有用的帖子,请帮助我解决这个问题。我是 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:加载 14 Kb 历史数据,在 0:00:00.078 时同步
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
请告诉我出了什么问题以及如何解决?