回测完成后,软件给出的报告中没有收益率,自己计算则只能算出总收益率,如下: double OnTester () { return 100 * TesterStatistics ( STAT_PROFIT ) / TesterStatistics ( STAT_INITIAL_DEPOSIT ); } 但是想要计算“年化收益率”,看帮助文件ENUM_STATISTICS里并没用关于回测起止时间的信息。 求助高手: 怎么获取 回测起止时间的信息?或是有没有别的什么方法得到年化收益率?
我想跟好朋友们请教一下,如何提高MT5 EA的回测速度? 我的电脑是I 7 8核。但是每次回测之启动一个核心。 虽然我关闭了,显示图标与可视化 。 但是回测的速度都是按天作为单位来计算. 我想请问如何开启。另外的7个核心来加速回测. 还有购买MQL云代理 ,是否有用? 好像云代理只是针对优化有用,并不能提高单策略回测速度 如果找一台性能很强劲的电脑是不是能加快回测? 非常感谢大家
在MetaTrader中的错误信息为2023.05.10 14:19:30.151 Trades '--------': failed instant buy 0.01 GBPUSD at 0.00000 sl: 1.24469 tp: 0.00000 [Invalid price] 看起来似乎是获取市价失败,试了很多次了还是没有用;我也不是在非交易日运行的 且last_error返回的结果居然是(1, 'Success')
我写了代码,要使程序在检测到市场价格到达我预设的价格时检测是否持仓,如果已有持仓就不开单,并作出提示。如果没有持仓就开多单。现在执行出现这样的问题——价格到达预设价格后,连续两次开仓,两次开仓离得很近,2、3秒钟,应该是价格先后两次到达预设价格后开仓。为什么第二次开仓代码执行过程没有检测到第一次的持仓呢?难道那时候第一次持仓还没有来得及被记录吗? void OnTick() { MqlTradeRequest request={}; MqlTradeResult result={}; //int long_orderquantity=0; //int
我编写了一个开多单的代码,市场到我预设价格后,先检查有没有持仓,如果有就不开多单,如果没有就按照预设价格开多单。但执行之后问题出现——市场波动到预设价格后,程序就会开两次单,之后才打印出已经有持仓的提示。两次开单先后差几秒钟,应该是市场价格先后两次到达预设价格导致短时间内开两单。为什么第二次开单没有检测出有持仓了呢?难道是第二次价格出现得太快,导致第一次程序还没有把positiontotal()函数写进去? void OnTick() { MqlTradeRequest request={}; MqlTradeResult result={}; //int
程序代码我已经添加到下面的附件里了。这个小程序就是找到顶分形和底分形,然后连接起来,每个顶分形和底分形之间至少有一根K线。注:如果右侧K线被左侧相邻K线全包含的,右侧K线无效,从数组中剔除。 问题: 主程序中的底分形处理代码不被执行,即主程序中的92-117行。我检验过,头文件中的top_bottom()函数能够正常工作,函数中的四个if语句都能应对图表中出现的四种情况。但当主程序调用这个函数时,主程序中对 底分形的两种情况的 处理代码块( 92-117行 )没有工作,没有被读取,不知道为什么。
1、运行中修改外部输入参数后,已经画出来的线消失了 2、运行中切换图表周期,已经画出的线消失 3、怎么让画出的线不是被选中状态?
为什么下面这段代码平多单有效,平空单总不成功提示无效请求呢? void OnStart() { MqlTradeRequest MyTrade={}; MqlTradeResult MyResult={}; MqlTick MyTick; SymbolInfoTick(Symbol(),MyTick); int total=PositionsTotal(); ZeroMemory(MyTrade); ZeroMemory(MyResult); for(int i=total-1;i>=0;i--) { ENUM_POSITION_TYPE
一开始我用了最简单的写法这样是可以正常下单的: 但是我加入了计数器的写法之后,就出现了指标有信号,且数组在日志打印出来有具体的值,但是EA确没有信号了,是否是写法的问题呢?请教各位大神
各位好! 本人最近最学习 mql5 编写 EA 代码,在测试过程中发现一个奇怪的问题:在利用 input 定义的外部参数,当在代码中更新 input 变量的值后,在进行调试或者回撤,发现代码中拿到 input 变量的值还是原来的值。 如下: input string 开单参数 = "===========开单设置参数===========" ; input double MAX_LOTS = 10 ; // 开单最大手数 input double SL_MAX_PERCENT = 5 ;
大家好,我刚自学编程,不知道每天限制指定货币对开单的数量怎么写。 比如说EURUSD不论盈亏一天内开单的数量都不超过3单, 然后GBPUSD 不论盈亏一天内开单的数量都不超过5单, 试过用 HistoryDealsTotal ();这个函数,但返回的是所有货币对的数量,而不是指定货币对的数量。 请问怎样解决?
[删除]
高手来说说,如何获取历史订单的平仓价格。标准程序库没提供,只能访问损盈价,开仓价。如果该订单手动平仓,平仓价就既不是止损线价也不是止盈线价,如何获取这个平仓价?
我使用PositionClose去关闭某一产品的头寸 经纪商并不支持反向头寸平仓 大部分时候工作是正常的,但是极少数情况下会开启反向头寸 因为我是在无限循环中进行平仓 所以导致开启了上千个正向反向头寸 从而5W USD账户被commssion爆仓 这究竟是什么原因导致的 如何解决?
我在想一个网格类的ea,这类的ea须要单独计算盈亏进行累加。那么我想从历史订单中平掉的订单累加计算出当前的盈亏。我想知道有没有那位高手研究过历史订单排序的,请指教一下或者有这方面的文章推荐一下! 目前我的研究结果是:ea获取的历史订单顺序是固定的,按照下单先后的顺序排列!(我知道可以手动调节时间 止盈 获利 平仓时间这类的排列顺序,我说的是ea获取的排列顺序)!!!序号越大的开单时间越接近当前时间,最大值为空!!比如历史订单总数为32 那么从0开始排序31就是最后一张开单并平仓的订单。
double stopLoss = 300; // 止损 double takeProfit = 200; // 止盈 double maPeriod = 14; // 均线周期 int slippage = 2; int Risk = 5; // 风险系数 double fibLevels[] = { 0.236, 0.382, 0.5, 0.618}; //---------------------------------------------------------- void OnTick() { double LastOrderTime = 0;
举个例子:原油80美金多1手记为a,75美又多1手记为b,70美金又多一手c,当b+c的总盈亏>1的时候我想平掉b和c。如何获取b+c
#include <Trade\Trade.mqh> ENUM_ORDER_TYPE_FILLING Type_fills; ulong Magic1= 123 , Magic2= 321 , Magic3= 1234567 , Magicx= 0 ; //=============================================================================================================================
請教一下高手,我的EA有時候會有連續下兩張單的問題,我一開始時認為是我的程式碼出錯,但我去我的交易日誌查看時,發現重複開了的單, 都沒有相關的交易編號,EA的交易日誌都沒有 ,這是什麼情況
写一个外汇ea 1,只做4小时的级别,2,能识别趋势,3,能认出来k线的组合图形,4,根据高低点进场,止损,止盈。5如果可以的话,能加上均线最好。
ZZ1:(EMA(CLOSE,4)+MA(CLOSE,4*2)+MA(CLOSE,4*4))/3; MM2:(EMA(CLOSE,24)+MA(CLOSE,24*2)+MA(CLOSE,24*4))/3; zz1上穿mm2做多 ,ZZ1下穿MM2 平仓 ZZ1下穿MM2 做空, zz1上穿mm2 平仓 本人不会写,麻防大神帮忙写一下
一个加仓EA,设定一个条件给予订单出场,出场的方式有多种,有分方向出场,有不论方向全部出场,如何这种目地,下面是代码层 void orderclose(int type) { for (int i=PositionsTotal()-1;i>=0;i--) { if(PositionSelectByTicket(PositionGetTicket(i))) if(PositionGetSymbol(POSITION_SYMBOL) == Symbol() && PositionGetString(POSITION_COMMENT) == EXPERT_COMMENT &&

您错过了交易机会:
- 免费交易应用程序
- 8,000+信号可供复制
- 探索金融市场的经济新闻
注册
登录