新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1179

 
Mikhail:

当我进行这样的查询时。

我得到这个结果。

2020.06.17 13:49:53.270 2020.01.02 06:50:00 符号 EURUSD_i 数字 5 点 1e-05

当我提出这样的要求时。

我得到这个结果。

2020.06.17 13:51:58.787 2020.01.02 06:45:00 符号 EURUSD_i 数字 0 点 0.0

同时我想指出,如果我不插入Print函数,我根本没有得到任何错误,订单甚至没有尝试修改自己。仿佛CTrade没有看到我的订单。

检查符号和神奇数字不起作用。

结果。

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

神奇的数字应该是12345,符号是欧元美元。

为什么我不能得到象征和medgic?

如果你改变了这个字符串。

改为

并删除了通过神奇数字进行的验证,那么我们的价格就会出现问题。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 修改订单#2买入止损0.1 EURUSD_i在1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [无效价格]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [无效的价格]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP修改失败!结果Retcode:10015,Retcode的描述:无效的价格

我已经绞尽脑汁了,而同样的代码在另一个专家顾问中工作正常。

我做错了什么?

CSymbolInfo类的对象初始化不正确(或没有)。

如果你没有这个字符串asymbol.Name(Symbol()),那么就添加它。

如果你有,在Name(string symbol)函数中调试一下会发生什么。

用Refresh()填充m_digits等字段。

s.s. 从你添加的内容来看,你肯定有一个未初始化的符号。

 
Mikhail:

在新的蜱虫到来之前,按钮没有任何移动。这是我的眼睛所能看到的。只要价格发生变化,按钮就会移动。

虽然今天,即使在新的勾选中,按钮也停止了重绘,尽管我没有改变任何东西。只有背景在动。

澄清一下--如你所说,你在OnTick中改变了坐标,并声称事实上按钮在下一个tick上移动。从什么开始的下一个刻度? 你改变坐标的那个,还是圣诞节的那个?

 
Aleksey Mavrin:

你的CSymbolInfo类对象的初始化不正确(或者根本就没有)。

如果你没有这样的字符串asymbol.Name(Symbol()),那么请添加它。

如果你有,在Name(string symbol)函数中调试一下会发生什么。

用Refresh()填充m_digits等字段。

s.s. 从你添加的内容来看,你的asymbol肯定是未初始化的。

在我的代码的最上面,我有以下几行
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

它是一个初始化吗?编译时,我得到以下信息

'Trade.mq5 panel' Trade.mq5 panel 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

代码生成 1 1

0个错误,0个警告,3192毫秒的时间 1 1

在我开出买入止损单后,我重新计算所有的订单,选择一个开放的订单,并检查符号和Majdic号码是否匹配。

for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  
              if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

在这个阶段什么都没有发生,正如我在上面写的那样,asymbol.Name()由于某种原因没有返回开仓订单的符号,aorder.Magic()返回值为0(尽管我的魔法数字是121345),asymbol.TickSize()返回值为0。换句话说,检查失败,因此停止对该订单的进一步工作。请澄清"在函数Name(string symbol)中调试发生了什么",我不太理解这句话我应该添加什么,在哪里添加?

 
Aleksey Mavrin:

澄清一下--如你所说,你在OnTick中改变了坐标,并声称事实上按钮在下一个tick上移动。从什么开始的下一个刻度? 你改变坐标的那个,还是圣诞节的那个?

我想顺序是这样的:一个新的刻度线进来,我改变面板坐标,面板背景开始移动到我想要的位置,这时按钮静止不动,一个新的刻度线进来,按钮跟着面板移动到想要的位置。是否有可能从耶稣诞生开始就生成蜱虫?
 
Mikhail:

在这个阶段,什么都没有发生,因为我已经写过了,函数asymbol.Name()由于某种原因没有返回开仓的订单符号,函数aorder.Magic()返回值0(尽管我的Magic是121345),函数asymbol.TickSize()返回值0。换句话说,检查失败,因此停止对该订单的进一步工作。请澄清"在函数Name(string symbol)中调试发生了什么",我不太理解这句话我应该添加什么,在哪里添加?

订单 索引/票据 中的错误可能是由魔法0判断的错误。在访问订单结构的时刻,错误顺序的数据被写入那里。在选择循环中,可能下一个数字被放在最后一个 订单组中,而不是你需要的那个。最后一个订单选择的数据将从订单结构中返回。

 
Mikhail:
在我的代码的最上面有几行

这是一个初始化吗?编译时,我得到以下信息

'Trade panel.mq5' Trade panel.mq5 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

代码生成 1 1

0个错误,0个警告,3192毫秒的时间 1 1

在我开出买入止损单后,我重新计算所有的订单,选择一个开放的订单,并检查符号和Majdic号码是否匹配。

在这个阶段什么都没有发生,正如我在上面写的那样,asymbol.Name()由于某种原因没有返回开仓订单的符号,aorder.Magic()返回值为0(尽管我的魔法数字是121345),asymbol.TickSize()返回值为0。换句话说,检查失败,因此停止对该订单的进一步工作。请澄清"在函数Name(string symbol)中调试发生了什么",我不太理解这句话我应该添加什么,在哪里添加?

天啊,你为什么要用你不了解的东西(如果是雅达雅达行李箱呢 )))

而你甚至不屑于阅读所写的内容

如果你没有asymbol.Name(Symbol()),那么就添加它。

s.w. 我想更多地解释一下初始化,但我想那也是无用的。
 
Valeriy Yastremskiy:

在访问订单结构的时刻,错误的订单数据被存储在那里,根据魔法0,订单索引/票据 可能存在错误。在选择周期中,可能是下一个数字进入了最后一个 订单集,但不是你需要的那个。最后一个订单选择的数据将从订单结构中返回。

我仍然没能弄清楚为什么会出现这种故障。最后,我把负责创建带有按钮的面板的代码拿出来,在EA中重写了一遍,这段相同的代码正常工作,一切都正常了。总之,谢谢你
 

下午好!

帮我解决一个简单的问题。

差距计数器。我想计算超过10分的差距。

int start()
{
int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);

变量 "差距 "重设为零。我不明白为什么。我已经尝试了所有的方法。我已经试过循环和静态--它不起作用。我怀疑我的循环写错了。

 
Alexey Belyakov:

下午好!

帮我解决一个简单的问题。

差距计数器。我想计算超过10分的差距。

变量 "差距 "重设为零。我不明白为什么。我已经尝试了所有的方法。我已经试过循环和静态--它不起作用。我怀疑我的循环写错了。

变量gap在函数start的范围内--每一个新的tick都被重新初始化为0

 
Alexey Belyakov:

下午好!

帮我解决一个简单的问题。

差距计数器。我想计算超过10分的差距。

变量 "差距 "重设为零。我不明白为什么。我已经尝试了所有的方法。我已经试过循环和静态--它不起作用。我怀疑我的循环写错了。

int gap=0;
int start()
{
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap++;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
int start()
{
static int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);