错误、漏洞、问题 - 页 1747

 

怎样才能消除NOT LABEL对象对条形时间坐标的视觉粘连?

我把对象的时间坐标设置为秒,但它的视觉效果就像我把它设置为时间框架一样。

我挖出了这个问题

关于交易、自动交易系统和策略测试的论坛

错误, 漏洞, 问题

Andrew Petras, 2014.11.26 13:34

我很擅长移动三角形、椭圆或矩形等物体,而锚点却不成比例地 "浮动"。

这并不取决于这些设置


我创造


拖放


矩形是 "漂移 "的第二点,三角形和椭圆有第三点。

这个问题可以解决吗?我需要准确的 "测量"。

当我选择 "精确的时间尺度 "时,提到的约束力就消失了,一切都显示得很好。然而,我在MQL5中没有找到任何地方可以启用/禁用这个参数。难道没有规定吗?

 

真的需要一些帮助!几个小时以来,我一直在试图弄清这种奇怪行为的原因。最后我写了一个EA,结果很出乎意料

#define TOSTRING(A) #A + " = " + (string)A + "\n"

string TimeToString( const ulong Time )
{
  return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}

void OnTick()
{
  static MqlTick PrevTick = {0};
  
  MqlTick NowTick;
  
  if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
    Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
    
  PrevTick = NowTick;  
}

结果(自下而上)

2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.698
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476

SymbolInfoTick有时会返回(你必须等待)一个时间低于前一个时间的tick!

这到底是怎么一回事!?配置

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 112.19 ms)
Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal        MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
 
fxsaber:

真的需要一些帮助!几个小时以来,我一直在试图弄清这种奇怪行为的原因。最后我写了一个EA,结果很出乎意料

#define TOSTRING(A) #A + " = " + (string)A + "\n"

string TimeToString( const ulong Time )
{
  return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}

void OnTick()
{
  static MqlTick PrevTick = {0};
  
  MqlTick NowTick;
  
  if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
    Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
    
  PrevTick = NowTick;  
}

结果(自下而上)

2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.698
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476

SymbolInfoTick有时会返回(你必须等待)一个时间低于前一个时间的tick!

这到底是怎么一回事!?配置

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 112.19 ms)
Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal        MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
是的,你不是这里唯一需要帮助的人。几个星期以来,我一直在尝试将蜱虫正常卷成蜡烛。所以...虱子还是生的。在SD#1598238 中投标
 

魔术线

#include "key.mqh"
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }

行动顺序(严格)

  1. 将附件文件放在同一文件夹中。然后在MetaEditor中用鼠标
  2. 文件->打开->选择Test.mqh->打开按钮
  3. 编辑->搜索和替换->替换->填写查找:和'替换为:'字段,如下所示->'全部替换'按钮

结果。

这里的设置:https://www.mql5.com/ru/forum/1111/page1127#comment_795376

附加的文件:
Test.mqh  1 kb
key.mqh  1 kb
 
Alexey Kozitsyn:
是的,你不是这里唯一需要帮助的人。几个星期以来,我一直试图将我的抽搐正确地卷成一支蜡烛。所以...抽搐仍然是原始的。在SD#1598238 中投标
抽搐是正常地滚入蜡烛。
 
fxsaber:
提基正常地滚入蜡烛。
真的吗?数量上是否匹配?那你做过控制吗?而且你甚至可以显示日志吗?
 
Alexey Kozitsyn:
真的吗?而数量是一样的?而你已经进行了控制?而且你甚至可以显示日志吗?

做了控制--观看代码库。不要在意蜡烛图的交易量和计算出来的交易量之间的不匹配,因为这关系到一个边界刻度,它可以落入一个柱子或另一个柱子。这不是本金。我还在论坛上发布了交易额指标。所以根本不存在问题。

在你的案例中,如果你变得非常书呆子,你可以在条形创建机制上挑剔,但不能在CopyTicks上。

 

编译错误

class A {
protected:
        void f(  int ) {} //(*)
};
class B : public A {
public:
        void f( uint ) {}
};
void OnStart()
{
        B b;
        b.f( 1 ); //'A::f' - cannot call protected member function
}

而如果你去掉(*)行,一切都会好起来。B::f(uint)有什么问题?如果你从另一个角度看情况

class A {
public:
        void f(  int ) {} //(**)
};
class B : public A {
public:
        void f( uint ) {}
};

我们可以看到搜索匹配函数的MQL算法的基本缺点。在第二个例子中,B::f(uint)将被调用,直到没有字符串(**)。只要第(**)行出现,A::f(int)将被调用。这意味着基类的变化会影响最终结果,而在C++中,无论基类如何变化,B::f(uint)都会一直被调用,这就保证了最终结果的稳定性。

在MQL中,事实证明,A类开发者刚刚发明了一个新的public/protected/private函数,由于这个原因,B类用户停止了对代码的编译,并且/或者,更重要的是,最终的结果已经改变了。

 
A100:

魔术线

#include "key.mqh"
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }

行动顺序(严格)

  1. 将附件文件放在同一文件夹中。然后在MetaEditor中用鼠标
  2. 文件->打开->选择Test.mqh->打开按钮
  3. 编辑->搜索和替换->替换->填写查找:和'替换为:'字段,如下图所示->'全部替换'按钮。

结果。

这里的设置:https://www.mql5.com/ru/forum/1111/page1127#comment_795376

谢谢你的帖子,这个问题将在下一次更新中得到解决。
 
A100:

编译错误

class A {
protected:
        void f(  int ) {} //(*)
};
class B : public A {
public:
        void f( uint ) {}
};
void OnStart()
{
        B b;
        b.f( 1 ); //'A::f' - cannot call protected member function
}

而如果你去掉(*)行,一切都会好起来。B::f(uint)有什么问题?如果你从另一个角度看情况

class A {
public:
        void f(  int ) {} //(**)
};
class B : public A {
public:
        void f( uint ) {}
};

我们可以看到搜索匹配函数的MQL算法的基本缺点。在第二个例子中,B::f(uint)将被调用,直到没有字符串(**)。只要第(**)行出现,A::f(int)将被调用。这意味着基类的变化会影响最终结果,而在C++中,无论基类如何变化,B::f(uint)都会被调用,这保证了最终结果的稳定性。

在MQL中,事实证明,A类开发者刚刚发明了一个新的public/protected/private函数,由于这个原因,B类用户停止了对代码的编译,并且/或者,更关键的是,最终结果发生了变化。

只是b.f( 1 )调用中的常数 "1 "被解释为一个int。做一个明确的转换,一切都会成功。

b.f( (uint)1 );