错误、漏洞、问题 - 页 1174

 

我昨天在工作中把电脑从Windows XP/32切换到Win7/64。在此之前,我在工作时在MT4上正常交易,从储存器上更新代码,再回到储存器上。现在我可以在7上使用我的mt4,我的代理账户是新的,社区登录和密码也是新的。问题是,我无法与MetaEditor 4同步代码。在我的资料中,我选中了"连接存储"。

今天我改变了社区的密码,在不同的文件夹中安装了第二个MT4,添加了代理,新的登录名和密码,交易正在进行,我看到所有的MQ服务,但没有与存储同步,不能连接。请告知问题还可能出现在哪里。


 
paladin800:

我昨天在工作中把电脑从Windows XP/32切换到Win7/64。在此之前,我在工作时在MT4上正常交易,从储存器上更新代码,再回到储存器上。现在我可以在7上使用我的mt4,我的代理账户是新的,社区登录和密码也是新的。问题是,我无法与MetaEditor 4同步代码。在我的资料中,我选中了"连接存储"。

今天我改变了社区的密码,在不同的文件夹中安装了第二个MT4,添加了代理,新的登录名和密码,交易正在进行,我看到所有的MQ服务,但没有与存储同步,不能连接。请告知问题还可能出现在哪里。


以管理员权限重新安装我的MT4终端,以管理员权限运行MT4终端。在Vista/8/8.1中的MT4以这种方式同时看到存储空间和带有你的代码的文件夹,并保存所有图表设置。
 
barabashkakvn:
以管理员权限重新安装MT4终端,以管理员权限运行MT4终端。在Vista/8/8.1系统中,使用这种方法的MT4可以同时看到存储空间和带有你的代码的文件夹,并保存所有的图表设置。
我明白了。我在工作中悄悄地在这里研究外汇,管理员(希望)不知道,所以用管理员的权限不会持久。这个问题并不关键,我将通过闪存盘工作。谢谢你的澄清。
 
paladin800:
我明白了。我在这里偷偷地研究外汇,管理员(希望)不知道,所以不会守着管理员的权利。这个问题并不关键,我将通过闪存盘工作。谢谢你的澄清。
你也可以租一个VPS。然后你就可以通过远程桌面连接登录,并且在管理权限方面没有问题。
 
编译错误,构建 969
template<typename T>
T plus( T a, T b )      { return ( a + b ); }

template<typename T>
int f( T& array[], int i )
{
        return ( plus( ::ArraySize( array ), i ) );
}

void OnStart()
{
        int a[ 2 ];
        int b = 1;
        Print( f( a, b ));
}

它的出现是因为在新建筑中

template<typename T>
void g( T& array[] ) { Print( typename( ::ArraySize( array ))); }
void OnStart()
{
        int a[ 2 ];
        g( a ); //Результат: uint
}
uint ArraySize(...);
в то время как раньше было
 int ArraySize(...);
我打扰到谁了?
int ArraySize(...);

如果帮助是无声的,你为什么要改变它,而且这种改变可能会影响计算结果!甚至没有人会注意到。

 
A100:
译错误,构建969Because在新的构建中,谁被打断了?

为什么要改变它,因为帮助是无声的,而这种改变可能会影响计算结果!甚至没有人会注意到。

当然,用uint 来表示数组的大小更合理,因为无论如何大小都不能是负数 // 而用ulong 来表示就更好了 :)
 
另一件不符合逻辑的事情是
template<typename T>
void g( T& array[] )
{
        Print( typename( ::ArrayResize( array, 3 )));
}

void OnStart()
{
        int a[ 2 ];
        g( a ); //Результат: int
}

事实证明,ArraySize被改变了,但ArrayResize 却没有--改变?根本的区别是什么?

区别是这样的

Возвращаемое значение

При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера;
в противном случае возвращает -1 и массив не меняет размеры.

事实证明,你不能改变ArrayResize的返回类型(因为有'-1')。那么,如果你不能改变ArrayResize类型,为什么要改变ArraySize类型?

 

情况是这样的。我需要在EURNZD上运行专家顾问好几年了。我已经删除了该符号的整个历史记录,再次加载它--结果是一样的。

HistoryCenter: 5240 bars imported in 'EURNZD60'

现在才是2013年9月。该终端不允许倒退图表。当我打开历史中心并点击下载时,我得到的信息是 "没有符号 EURNZD的新数据"。我不在乎是否写错了,但我如何能得到报价?我的经纪人真的没有历史吗?我不知道,我从来没有遇到过其他符号的问题。

P.S. 就这样,问题被删除了。在我放弃EURNZD并下载GBPAUD后,突然这个技术的奇迹出现了EURNZD的新数据。谁可能处于类似的情况 - 那么不要忘记 "与手鼓共舞 "和需要坚持不懈地以不同的方式挑逗终端。;-)

P.P.S. 现在同样的事情又发生在澳元纽元身上。我不得不愚蠢地连续点击下载,直到它突然看到数据。

 
MetaDriver:
当然,用uint 来表示数组的大小是比较聪明的,因为无论如何大小不能是负数,//而用ulong 就更好了:)

template<typename T>
void g( T& str ) { Print( typename( ::StringLen( str ))); }
void OnStart()
{
        string str = "ABC";
        g( str ); //Результат: int
}

字符串的长度 也不能为负数,但用int来表示长度/大小更有意义--原因很简单,函数(搜索、计算等)一般会返回长度/大小,或者在失败的情况下返回-1,这使得错误处理更容易。

 
A100:
译错误,构建969 ...你为什么要改变它,因为帮助是无声的,这样的改变可能会影响计算结果!甚至没有人会注意到它。

关于ArraySize,那天我在MQL4上提出了一个类似的问题:https://www.mql5.com/ru/forum/152471。 据我所知,在MQL5中一切都应该是一样的。

也许,我的信息已经被考虑到了 :) 关于这个问题,服务台已经答复说,原因是优化器的操作不正确,他们将在新的构建中把类型改为uint。其实现在是uint,只是没有记录 :) 顺便说一下,他们也会把ArrayResize改成uint,我建议他们改成ulong,否则在不久的将来他们会因为存储大体积时缺乏32位值而不得不回到这个问题。

至于错误时的值-1,应该是没有问题的,因为。(int)-1 = (uint)-1 = 0xFFFFFFFFFF = UINT_MAX,也就是说,位的表示方法是一样的。 尽管比较操作会得到不同的结果,也就是说,如果在代码中是这样的话

if (ArrayResize(...) < 0) ...

它将变得不正确。