全局初始化失败!!!!!!! - 页 3

 

谢谢你的提示!

自从646年以来,奇怪的事情发生了,似乎没有人能够帮助我们!我想知道的是什么?

1.1.标签越来越离谱,好像XDISTANCE和YDISTANCE没有被遵守。

只有在来回切换Tf后,它们才会回到直线上。

在切换图表窗口或改变参数 输入后,它们又脱线了。

2.2.一些旧的指数使MT4崩溃。

3.3.启动MT4后,先是登录账户,过了一会儿就退出,我必须重新登录。

4.4.带有OrderClose()的脚本和EA不起作用,它们不能关闭订单。

OrderModify()工作正常。

我们能做什么来让MetaQuotes做点什么呢?

毕竟,MT4是一个交易平台,因此是一个严肃的工具,而不是一些玩具!!

哦,还有一件事。

比如说,我正在根据一些计算结果创建一个带有indi的矩形。

这些计算是在start()里面。

但是,在启动MT4后,我仍然看不到我的矩形,甚至在ticks上也看不到。

但是,在重新初始化indi或切换Tf后,它就出现了。

现在,这些事情以前从未发生过!

 
Dadas:

谢谢你的提示!

自从646年以来,奇怪的事情发生了,似乎没有人能够帮助我们!我想知道的是什么?

1.1.标签越来越离谱,好像XDISTANCE和YDISTANCE没有被遵守。

只有在来回切换Tf后,它们才会回到直线上。

在切换图表窗口或改变参数输入后,它们又脱线了。

这意味着你可以在你的代码中修复它

2. 2.一些旧的指数使MT4崩溃。

你必须使代码适应新的世界,(B600>)例如,"零除法 "是一个严重的错误,使指标消失(在B600之前不是这样)。

3.3.启动MT4后,先是登录账户,过了一会儿就退出,我必须重新登录。

尝试关闭所有打开的图表,让终端保持空白(没有打开的图表),重新启动终端,如果问题继续存在,向服务台报告。

4.4.带有OrderClose()的脚本和EA不起作用,它们不能关闭订单。

我确信问题出在你的代码中,请向我们展示相关的代码,有人会尝试帮助你。

OrderModify()工作正常。

我们能做什么来使MetaQuotes做一些事情呢?

毕竟,MT4是一个交易平台,因此是一个严肃的工具,而不是什么玩具!!。

我同意,但我认为(几乎可以肯定)关键的错误在你的代码中,你使用的是过时的代码,即当时写的时候有错误,这些错误并没有阻止指标/EA的工作,但现在它们是关键的错误,需要修复

 

达达斯。

我是一个同行的开发者,不能回答你所有的问题。我自己也在处理一些我打算商业化的应用中的PITA问题。我肯定会建议,至少用新的OnInit()和OnDeInit()函数来替换你的init和deinit函数。你可能还想用OnStart()替换start。根据文档,这个实现应该是向后兼容的,但我的经验表明情况恰恰相反。我在我的一个indies上遇到一个情况,deinit()没有被调用。我的deinit()正在删除对象,任何导致重新初始化的操作都会失败,因为对象仍然存在。我仍然使用start()而不是OnStart(),但我不确定这是否明智。我有一种预感,我在给自己找麻烦。如果你选择尝试我的建议,请告诉我发生了什么。我们开发者需要团结起来。)

 
Dadas:

哦,还有一件事。

比如说,我正在根据一些计算结果,创建一个带有indi的矩形。

计算是在start()中进行的。

但是,在启动MT4后,我仍然看不到我的矩形,甚至在ticks上也看不到。

但是,在重新初始化indi或切换Tf后,它就出现了。

现在,这些事情以前从未发生过!


正如我上面写的,我们面前有一个新的世界。
你不 "开始 "使用 "OnTick"(EA)或 "OnCalculate"(指标)吗?
 
qjol:

正如我上面写的,新的世界就在我们面前
你不 "开始 "使用 "OnTick "吗?


看,MetaQuotes正在发布一个平台,就像Metal教授 说的,它应该是向后兼容的!

我认为没有人有能力重写所有成千上万的已经存在的指标、脚本和EA。

至于你说我的代码是错误的,我不同意,一些标签只是最简单的代码。

它们没有什么特点,它们创建一个标签对象,计算一些东西,然后相应地设置对象。

没有附加任何特殊的哲学。

  ObjectSet    ("Lot_Size_Label",OBJPROP_CORNER,Corner);

  ObjectSet    ("Lot_Size_Label",OBJPROP_XDISTANCE,XDistance);
  ObjectSet    ("Lot_Size_Label",OBJPROP_YDISTANCE,YDistance);
  ObjectSetText("Lot_Size_Label",comment,Font_Size,Font_Type,Font_Color);
  ObjectSet    ("Lot_Size_Label",OBJPROP_SELECTABLE,false); 

至于关闭订单的脚本和EA,我说的是那些曾经在早期的Build(500)上工作正常的。

所以,这不是我的代码正确与否的问题。

这是MetaQuotes的问题,是MetaQuotes把事情搞砸了!

我将尝试由 ProfessorMetal的提示但是,那些对编码一无所知的用户怎么办?

而且,坦率地说,他们甚至不应该知道什么是编码!他们应该是使用交易的。

他们应该使用的是交易平台!!。

 
ProfessorMetal:

达达斯。

我是一个同行的开发者,不能回答你所有的问题。我自己也在处理一些我打算商业化的应用中的PITA问题。我肯定会建议,至少用新的OnInit()和OnDeInit()函数来替换你的init和deinit函数。你可能还想用OnStart()替换start。根据文档,这个实现应该是向后兼容的,但我的经验表明情况恰恰相反。我在我的一个indies上遇到一个情况,deinit()没有被调用。我的deinit()正在删除对象,任何导致重新初始化的操作都会失败,因为对象仍然存在。我仍然使用start()而不是OnStart(),但我不确定这是否明智。 我有一种预感,我在给自己找麻烦。如果你选择尝试我的建议,请告诉我发生了什么。我们开发者需要团结起来。)


谢谢,我也有同样的问题,对象在脱机时没有被删除。

我正在开发一些indi,得到了这些奇怪的结果,然后我看到在对象列表中,它们仍然存在。

我解决了这个问题,可能是用最简单的方法,在start()中使用ObjectDelete()。

是的,把init()改成OnInit(),把deinit()改成OnDeinit(),标签就恢复正常了!谢谢!

然后过了一会儿,就不对了!!。它们仍然在做同样的动作。

 

如果代码是最简单的,实现它真的取决于正在实现的代码。你需要在关键点上进行 错误检查,以便当错误发生时,indi/ea能够正确地处理它。我上次也遇到了问题,但一旦我把错误处理程序放进去,它就能顺利运行,以至于你忘记了上次出现的问题。


still, what about the users who don't know a thing about coding???

And, frankly speaking, they aren't even supposed to know anything coding!

They are supposed to be using the trading platform!!!

该平台是一个metatrader,并带有所有的基本需求,没有人强迫你去编码。

 

你知道是什么帮助对准了这些标签吗?

我的X,Y坐标取自外部设备。

extern int XDISTANCE =9;
extern int YDISTANCE =9;

然后。

int X,Y;

int OnInit()
  {
 X = XDISTANCE;
 Y = YDISTANCE;
 ObjectCreate("INSTR",OBJ_LABEL,0,0,0); 
 
    return(0);
  }

int start() {
        ObjectSet("INSTR",OBJPROP_CORNER,Corner);
        ObjectSetText("INSTR",Symbol_Period+Date_Time,FontSize, "Berlin Sans FB", Color);
        ObjectSet("INSTR", OBJPROP_XDISTANCE, X);
        ObjectSet("INSTR", OBJPROP_YDISTANCE, Y); 
        ObjectSet("INSTR", OBJPROP_SELECTABLE, false);   
   return(0);
  }

这样一来,它就得到了正确的结果。

或者说,让事情变得更好,而不是完全正确。

 
deysmacro:

如果代码是最简单的,实施它真的取决于正在实施的代码。


该平台是一个metatrader,并带有所有的基本需求,没有人强迫你去编码。


你的评论怎么能帮助别人呢?
 
int X,Y;

int OnInit()
  {
 X = XDISTANCE;
 Y = YDISTANCE;
 ObjectCreate("INSTR",OBJ_LABEL,0,0,0); 
 
    return(0);
  }

int start() {
        ObjectSet("INSTR",OBJPROP_CORNER,Corner);
        ObjectSetText("INSTR",Symbol_Period+Date_Time,FontSize, "Berlin Sans FB", Color);
        ObjectSet("INSTR", OBJPROP_XDISTANCE, X);
        ObjectSet("INSTR", OBJPROP_YDISTANCE, Y); 
        ObjectSet("INSTR", OBJPROP_SELECTABLE, false);   
   return(0);
  }

你不需要放任何对象查找函数 来检查对象是否已经存在。从那里,然后你创建相应的对象。


How's your comment supposed to help anybody??? 

我正在帮助你,现在。