问吧! - 页 21 1...141516171819202122232425262728...182 新评论 Kale 2006.07.31 18:29 #201 billworld2: 有没有一种方法可以根据对象名称中的选择文本字符串来删除对象? 下面是一个例子。 datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00")。 for(int i=0;i<ObjectsTotal();i++) { string name = ObjectName(i); if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay) { ObjectDelete(ObjectName(i))。 返回(false)。 } } return(true); Kale 2006.07.31 18:33 #202 billworld2: 我的一个学习项目是去定制tester.tpl,它规定了策略测试器的图表显示选项。我发现默认的图表风格非常难以视觉化。因此,我创建了一个新的模板,然后建立了一个脚本,将所有的箭头替换成更有吸引力的箭头。然而,我也想抓取箭头名称中的信息,并将其作为文本显示在图表上。箭头名称包括 "#62买入 "或 "73卖出收盘 "等内容。这样,你就可以在图表上看到某个特定的交易#进入/退出的确切时间。我不知道为什么Strategy Tester没有像其他平台(例如TradeStation)那样默认包含这个功能。 总之,我想抓取相关的文本,并在图表上现有的箭头下方插入新的文本对象。但是,我不知道如何完成这个任务。 我怎样才能做到这一点呢? 谢谢 比尔 好吧,你可以写脚本,或者用函数 来读取箭头信息,并在其下方制作文本标签。然后在每次绘制新箭头时运行该脚本。或者把这个函数放在EA的主函数的最后。我不知道为什么这种信息在metatrader中不是标准的,但要编写这种功能的代码很简单。 billworld2 2006.08.01 02:38 #203 Kalenzo: 你应该阅读日期和时间函数,并使用iBarShift函数来获得指定时间框架内指定月份的第一个条形的移动。 我知道这对你来说一定是微不足道的。我只是根据有限的文件(没有提供很多例子)还没有理解。你能不能提供一个例子来说明如何做到这一点? 谢谢。 比尔 billworld2 2006.08.01 02:40 #204 Kalenzo: 你可以写一个脚本,或者一个函数,用来读取箭头信息,并在其下方制作文本标签。然后在每次绘制新箭头时运行该脚本。或者把这个函数放在EA的主函数的最后。我不知道为什么这种信息在metatrader中不是标准的,但编写这种功能的代码很简单。 谢谢,但是,我具体卡在了如何编写脚本的问题上。如果你有时间提供一个简短的例子,那将是非常感激的。 再次感谢。 比尔 billworld2 2006.08.01 02:55 #205 我不确定我是否理解。明确地说,我在寻找一种方法来进行基于对象名称的子串匹配。例如,我有一组对象,其中有"-206 "字符串(还有其他文本)。我想找到并删除所有名称中包含"-206 "的对象。 在下面的例子中,让我困惑的是与OBJPROP_TIME1、OBJPROP_TIME2和OBJPROP_TIME3的关联。我知道对象最多可以有三个时间坐标。我不明白这与我想做的事情有什么关系。 Kalenzo: 下面是这个例子。datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00")。 for(int i=0;i<ObjectsTotal();i++) { string name = ObjectName(i); if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay) { ObjectDelete(ObjectName(i))。 返回(false)。 } } return(true)。 Kale 2006.08.01 03:07 #206 billworld2: 我不确定我是否理解。明确地说,我在寻找一种方法,基于对象名称进行子串匹配。例如,我有一组包含"-206 "字符串的对象(还有其他文本)。在下面的例子中,让我困惑的是与OBJPROP_TIME1, OBJPROP_TIME2和OBJPROP_TIME3的关联。我知道对象最多可以有三个时间坐标。我不明白这与我想做的事情有什么关系。 好的,试试这个。 for(int i=0;i<ObjectsTotal();i++) { string name = ObjectName(i); 如果(StringSubstr( name, 0, 3)==206) { ObjectDelete(ObjectName(i))。 } } 如果对象名称的前3个字母是206,那么该对象将被删除。 Kale 2006.08.01 03:18 #207 billworld2: 谢谢,但是,我被卡住了,不知道该如何编写脚本。如果你有时间提供一个简短的例子,那将是非常感谢的。再次感谢。 比尔 首先声明全局变量(脚本中的全局)int objectCount。 然后在EA结束时处理所有的对象(例如,你可以通过名字来搜索它们) for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++) { //然后,如果对象的标签不存在,就把它画出来。 //现有箭头的名称,并给它加上L标签,以识别它。 如果(ObjectFind(ObjectName(i)+"L")==-1) { ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i), (OBJPROP_PRICE1+3*Point))。 // 这就是它 } } 这只是一个例子,我还没有时间检查它可能存在的错误 ,但这应该是可行的,而且你现在知道正确的方法。 billworld2 2006.08.01 12:25 #208 好的。明白了。我实际上需要使用StringFind()。谢谢你的指点! #property show_inputs extern string stringname="blah"; //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ int start() { //---- for(int i=0;i<ObjectsTotal();i++) 如果(StringFind(ObjectName(i),stringname,0)>0) { ObjectDelete(ObjectName(i))。 } Kalenzo: 好的,试试这个。for(int i=0;i<ObjectsTotal();i++) { string name = ObjectName(i); 如果(StringSubstr( name, 0, 3)==206) { ObjectDelete(ObjectName(i))。 } } 如果对象名称的前3个字母是206,那么该对象将被删除。 billworld2 2006.08.01 13:26 #209 谢谢,但是,这不起作用。首先,我把 "i>=ObjectsTotal "改为 "i<=ObjectsTotal"(打字错误)。然后,我注意到你正在创建另一个箭头对象,我们想在那里创建一个新的文本对象,其中包括箭头对象的名称。总之,下面的代码正在创建一堆箭头(大约50个),都重叠在同一个坐标上。 在这个问题上我还是很迷茫。如果你有机会再看一下,那将是非常感激的。明确地说,我想创建一个新的文本对象,它被定位在每个现有的箭头对象下面,文本对象的文本描述等于箭头对象的名称。 账单 Kalenzo: 首先声明全局变量(脚本的全局) int objectCount;然后在EA结束时处理所有的对象(例如,你可以通过名称搜索它们) for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++) { //然后,如果对象的标签不存在,就把它画出来。 //现有箭头的名称,并给它加上L标签,以识别它。 如果(ObjectFind(ObjectName(i)+"L")==-1) { ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i), (OBJPROP_PRICE1+3*Point))。 // 这就是它 } } 这只是一个例子,我还没有时间检查它可能存在的错误, ,但这应该是可行的,而且你现在知道正确的方法。 billworld2 2006.08.01 13:30 #210 基于包含的对象删除 有没有一种方法可以根据对象名称 中的选择文本字符串来删除对象? 编辑:用Kalenzo的指针弄明白了。答案在212号帖子中。 1...141516171819202122232425262728...182 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有没有一种方法可以根据对象名称中的选择文本字符串来删除对象?
下面是一个例子。
datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00")。
for(int i=0;i<ObjectsTotal();i++)
{
string name = ObjectName(i);
if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)
{
ObjectDelete(ObjectName(i))。
返回(false)。
}
}
return(true);
我的一个学习项目是去定制tester.tpl,它规定了策略测试器的图表显示选项。我发现默认的图表风格非常难以视觉化。因此,我创建了一个新的模板,然后建立了一个脚本,将所有的箭头替换成更有吸引力的箭头。
然而,我也想抓取箭头名称中的信息,并将其作为文本显示在图表上。箭头名称包括 "#62买入 "或 "73卖出收盘 "等内容。这样,你就可以在图表上看到某个特定的交易#进入/退出的确切时间。我不知道为什么Strategy Tester没有像其他平台(例如TradeStation)那样默认包含这个功能。
总之,我想抓取相关的文本,并在图表上现有的箭头下方插入新的文本对象。但是,我不知道如何完成这个任务。
我怎样才能做到这一点呢?
谢谢
比尔好吧,你可以写脚本,或者用函数 来读取箭头信息,并在其下方制作文本标签。然后在每次绘制新箭头时运行该脚本。或者把这个函数放在EA的主函数的最后。我不知道为什么这种信息在metatrader中不是标准的,但要编写这种功能的代码很简单。
你应该阅读日期和时间函数,并使用iBarShift函数来获得指定时间框架内指定月份的第一个条形的移动。
我知道这对你来说一定是微不足道的。我只是根据有限的文件(没有提供很多例子)还没有理解。你能不能提供一个例子来说明如何做到这一点?
谢谢。
比尔
你可以写一个脚本,或者一个函数,用来读取箭头信息,并在其下方制作文本标签。然后在每次绘制新箭头时运行该脚本。或者把这个函数放在EA的主函数的最后。我不知道为什么这种信息在metatrader中不是标准的,但编写这种功能的代码很简单。
谢谢,但是,我具体卡在了如何编写脚本的问题上。如果你有时间提供一个简短的例子,那将是非常感激的。
再次感谢。
比尔
我不确定我是否理解。明确地说,我在寻找一种方法来进行基于对象名称的子串匹配。例如,我有一组对象,其中有"-206 "字符串(还有其他文本)。我想找到并删除所有名称中包含"-206 "的对象。
在下面的例子中,让我困惑的是与OBJPROP_TIME1、OBJPROP_TIME2和OBJPROP_TIME3的关联。我知道对象最多可以有三个时间坐标。我不明白这与我想做的事情有什么关系。
下面是这个例子。
datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00")。
for(int i=0;i<ObjectsTotal();i++)
{
string name = ObjectName(i);
if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)
{
ObjectDelete(ObjectName(i))。
返回(false)。
}
}
return(true)。我不确定我是否理解。明确地说,我在寻找一种方法,基于对象名称进行子串匹配。例如,我有一组包含"-206 "字符串的对象(还有其他文本)。在下面的例子中,让我困惑的是与OBJPROP_TIME1, OBJPROP_TIME2和OBJPROP_TIME3的关联。我知道对象最多可以有三个时间坐标。我不明白这与我想做的事情有什么关系。
好的,试试这个。
for(int i=0;i<ObjectsTotal();i++)
{
string name = ObjectName(i);
如果(StringSubstr( name, 0, 3)==206)
{
ObjectDelete(ObjectName(i))。
}
}
如果对象名称的前3个字母是206,那么该对象将被删除。
谢谢,但是,我被卡住了,不知道该如何编写脚本。如果你有时间提供一个简短的例子,那将是非常感谢的。
再次感谢。
比尔首先声明全局变量(脚本中的全局)int objectCount。
然后在EA结束时处理所有的对象(例如,你可以通过名字来搜索它们)
for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)
{
//然后,如果对象的标签不存在,就把它画出来。
//现有箭头的名称,并给它加上L标签,以识别它。
如果(ObjectFind(ObjectName(i)+"L")==-1)
{
ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i), (OBJPROP_PRICE1+3*Point))。
// 这就是它
}
}
这只是一个例子,我还没有时间检查它可能存在的错误 ,但这应该是可行的,而且你现在知道正确的方法。
好的。明白了。我实际上需要使用StringFind()。谢谢你的指点!
#property show_inputs
extern string stringname="blah";
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
for(int i=0;i<ObjectsTotal();i++)
如果(StringFind(ObjectName(i),stringname,0)>0)
{
ObjectDelete(ObjectName(i))。
}
好的,试试这个。
for(int i=0;i<ObjectsTotal();i++)
{
string name = ObjectName(i);
如果(StringSubstr( name, 0, 3)==206)
{
ObjectDelete(ObjectName(i))。
}
}
如果对象名称的前3个字母是206,那么该对象将被删除。谢谢,但是,这不起作用。首先,我把 "i>=ObjectsTotal "改为 "i<=ObjectsTotal"(打字错误)。然后,我注意到你正在创建另一个箭头对象,我们想在那里创建一个新的文本对象,其中包括箭头对象的名称。总之,下面的代码正在创建一堆箭头(大约50个),都重叠在同一个坐标上。
在这个问题上我还是很迷茫。如果你有机会再看一下,那将是非常感激的。明确地说,我想创建一个新的文本对象,它被定位在每个现有的箭头对象下面,文本对象的文本描述等于箭头对象的名称。
账单
首先声明全局变量(脚本的全局) int objectCount;
然后在EA结束时处理所有的对象(例如,你可以通过名称搜索它们)
for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)
{
//然后,如果对象的标签不存在,就把它画出来。
//现有箭头的名称,并给它加上L标签,以识别它。
如果(ObjectFind(ObjectName(i)+"L")==-1)
{
ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i), (OBJPROP_PRICE1+3*Point))。
// 这就是它
}
}
这只是一个例子,我还没有时间检查它可能存在的错误, ,但这应该是可行的,而且你现在知道正确的方法。基于包含的对象删除
有没有一种方法可以根据对象名称 中的选择文本字符串来删除对象?
编辑:用Kalenzo的指针弄明白了。答案在212号帖子中。