初学者的问题 MQL5 MT5 MetaTrader 5 - 页 645 1...638639640641642643644645646647648649650651652...1503 新评论 Artyom Trishkin 2016.10.17 10:46 #6441 Alexey Kozitsyn: 假设按时间排序的最后一个订单不是列表中的最后一个订单,你的例子是不正确的,因为它没有考虑到最开始的订单(#0)。首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。为了找到最后一个订单的票据,我们不需要搜索所有订单的所有历史记录--我们可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。 [删除] 2016.10.17 10:54 #6442 Artyom Trishkin:首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。要搜索最后一个订单的票据,你不需要运行所有订单的全部历史记录--你可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。Artem,当然要感谢你的解释,但我知道如何在列表中找到顺序。而我的回答不是给你的,而是给阿列克谢的例子(特别是">0 "这个条件将不起作用)。你最好用正确的方式来写(只用代码)。我很懒 :) Alexey Viktorov 2016.10.17 11:12 #6443 Alexey Kozitsyn: 如果我们假设最后一个订单不是列表中的最后一个,你的例子是不正确的,因为它没有考虑最开始的订单(订单0)。怎么可能不呢?阿列克谢-维克多罗夫。一个额外的变体:在循环之前,在变量_1中写入一张票,例如,零阶的 票,然后 /********************Script program start function********************/void OnStart(){ int i, t1, t2, modTicket , total = OrdersTotal(); datetime d1, d2; if(OrderSelect(0, SELECT_BY_POS)) { t1 = OrderTicket(); d1 = OrderOpenTime(); } for(i = 1; i < total; i++) { if(OrderSelect(i, SELECT_BY_POS)) { t2 = OrderTicket(); d2 = OrderOpenTime(); modOrder((d1 < d2) ? t1 : t2); t1 = d1 < d2 ? t2 : t1; d1 = d1 < d2 ? t2 : t1; } }}/********************************************************************/void modOrder(int ticket);{ // здесь код модификации ордера.}/********************************************************************/ 我希望我没有搞乱其他东西。 Questions from Beginners MQL5 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Determine Order Status [删除] 2016.10.17 12:57 #6444 Alexey Viktorov:怎么可能不呢?/********************Script program start function********************/void OnStart(){ int i, t1, t2, modTicket , total = OrdersTotal(); datetime d1, d2; if(OrderSelect(0, SELECT_BY_POS)) { t1 = OrderTicket(); d1 = OrderOpenTime(); } for(i = 1; i < total; i++) { if(OrderSelect(i, SELECT_BY_POS)) { t2 = OrderTicket(); d2 = OrderOpenTime(); modOrder((d1 < d2) ? t1 : t2); t1 = d1 < d2 ? t2 : t1; d1 = d1 < d2 ? t2 : t1; } }}/********************************************************************/void modOrder(int ticket);{ // здесь код модификации ордера.}/********************************************************************/ 我希望我没有弄错别的东西,我没有再检查... 如果你把它作为一个启动器,这很好,但最好从最后做起......虽然,如果你不删除订单,也是可以的。 Alexey Viktorov 2016.10.17 13:05 #6445 Alexey Kozitsyn: 如果你把它作为一个开始的变体,它可以做到,但最好是从最后做起......虽然,如果我们不需要删除订单,我们也会没事的。事实上,要修改几个订单,你必须在一个循环中浏览它们。因此,事实证明,额外的微秒将只花在比较订单开放时间 上。这将是一个最佳的变体。循环的方向......。这其实并不重要,因为这与关闭订单无关。我把之前的版本弄混了,写成了 "关闭",所以循环在那里也是对应的...... Андрей 2016.10.17 17:00 #6446 下午好!我正在尝试写一个指标。我想在视觉上得到我想要的东西,但我想让指标发送所需的信息,例如,文本信息或int类型。考虑到我有10个缓冲区,根据这些缓冲区画线,我怎么做呢?谢谢! Marsoxod 2016.10.18 22:16 #6447 下午好,不要踢我,但我发现这个标题,并决定问几个问题...我有一个终端...我下载了一个经纪人的MT4(1)...运行演示...一段时间后,在另一个注册,太我是提供下载终端......下载(2)的结果,2终端不走......和1出现配置文件2的经纪人......在一般情况下,所有的困惑......然后从二进制来信,他们移动到MT5 ...安装和乍一看,所有比MT4更好。我的问题是,是否可以在一个终端上为不同的经纪商开立账户?我可以把它们全部转移到MT5吗?和如果指标从MT4适合到5?谢谢... mila.com 2016.10.19 03:59 #6448 如此积极的帮助,非常感谢。已经在纠结于一个新问题)请帮助我找出新的ZigZag 顶点出现的事实。我试着把第一个顶点的价格存储在一个变量中,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1)) { newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1); newZZH1=true; }但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。事实证明,新的顶部没有形成,旗帜被升起。double GetExtremumZZPrice(string sy="", int tf=0, int ne=0) { if (sy=="" || sy=="0") sy=Symbol(); double zz; int i, k=iBars(sy, tf), ke=0; for (i=1; i<k; i++) { zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i); if (zz!=0) { ke++; if (ke>ne) return(zz); } } Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден"); return(0);}理想情况下,该函数应该进行调整,使其总是返回第一个顶点的价格,但我对任何解决方案都感到满意。 Questions from Beginners MQL5 KimIV的有用功能 Useful features from KimIV Artyom Trishkin 2016.10.19 04:39 #6449 mila.com:如此积极的帮助,非常感谢。 已经在纠结于一个新问题) 请帮助我找出新的ZigZag 顶点出现的事实。 试图在一个变量中记住第一个顶点的价格,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1)) { newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1); newZZH1=true; } 但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。 事实证明,没有形成新的顶点,但旗帜被升起。double GetExtremumZZPrice(string sy="", int tf=0, int ne=0) { if (sy=="" || sy=="0") sy=Symbol(); double zz; int i, k=iBars(sy, tf), ke=0; for (i=1; i<k; i++) { zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i); if (zz!=0) { ke++; if (ke>ne) return(zz); } } Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден"); return(0);}理想情况下,该函数应该进行调整,使其总是返回第一个顶点的价格,但我对任何解决方案都感到满意。人字形实际上有三个缓冲区--总数为0,1-上端,2-下端。在零点的时候,一些缓冲区里总是有一个值--要么在第一个缓冲区里(如果膝盖是向上的),要么在第二个缓冲区里(如果它是向下的)。因此,当前蜡烛上的零缓冲区总是有一个值--要么来自第一个缓冲区,要么来自第二个。 那么,为了找到一个明确的上端点,我们应该从第1条开始,寻找第一个缓冲区的第一个非空值。对于下限,我们需要找到第二个缓冲区的第一个非空白值,从第1条开始。为了知道这是否是一个新的顶部或底部,我们需要记住之前发现的顶部/顶部的时间,并将其与我们迄今为止发现的情况进行比较。它是漫无边际的,但希望你能理解...... Tra-der 2016.10.19 13:08 #6450 有两个MT5终端。问题:我能否编写脚本,允许在一个终端中只做多头交易,在另一个终端中只做空头交易? 1...638639640641642643644645646647648649650651652...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
假设按时间排序的最后一个订单不是列表中的最后一个订单,你的例子是不正确的,因为它没有考虑到最开始的订单(#0)。
首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。
为了找到最后一个订单的票据,我们不需要搜索所有订单的所有历史记录--我们可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。
首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。
要搜索最后一个订单的票据,你不需要运行所有订单的全部历史记录--你可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。
Artem,当然要感谢你的解释,但我知道如何在列表中找到顺序。而我的回答不是给你的,而是给阿列克谢的例子(特别是">0 "这个条件将不起作用)。
你最好用正确的方式来写(只用代码)。我很懒 :)
如果我们假设最后一个订单不是列表中的最后一个,你的例子是不正确的,因为它没有考虑最开始的订单(订单0)。
怎么可能不呢?
阿列克谢-维克多罗夫。
一个额外的变体:在循环之前,在变量_1中写入一张票,例如,零阶的 票,然后
void OnStart()
{
int i, t1, t2, modTicket , total = OrdersTotal();
datetime d1, d2;
if(OrderSelect(0, SELECT_BY_POS))
{
t1 = OrderTicket();
d1 = OrderOpenTime();
}
for(i = 1; i < total; i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
t2 = OrderTicket();
d2 = OrderOpenTime();
modOrder((d1 < d2) ? t1 : t2);
t1 = d1 < d2 ? t2 : t1;
d1 = d1 < d2 ? t2 : t1;
}
}
}/********************************************************************/
void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
怎么可能不呢?
void OnStart()
{
int i, t1, t2, modTicket , total = OrdersTotal();
datetime d1, d2;
if(OrderSelect(0, SELECT_BY_POS))
{
t1 = OrderTicket();
d1 = OrderOpenTime();
}
for(i = 1; i < total; i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
t2 = OrderTicket();
d2 = OrderOpenTime();
modOrder((d1 < d2) ? t1 : t2);
t1 = d1 < d2 ? t2 : t1;
d1 = d1 < d2 ? t2 : t1;
}
}
}/********************************************************************/
void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
如果你把它作为一个开始的变体,它可以做到,但最好是从最后做起......虽然,如果我们不需要删除订单,我们也会没事的。
事实上,要修改几个订单,你必须在一个循环中浏览它们。因此,事实证明,额外的微秒将只花在比较订单开放时间 上。这将是一个最佳的变体。
循环的方向......。这其实并不重要,因为这与关闭订单无关。我把之前的版本弄混了,写成了 "关闭",所以循环在那里也是对应的......
下午好!
我正在尝试写一个指标。我想在视觉上得到我想要的东西,但我想让指标发送所需的信息,例如,文本信息或int类型。考虑到我有10个缓冲区,根据这些缓冲区画线,我怎么做呢?谢谢!
下午好,不要踢我,但我发现这个标题,并决定问几个问题...我有一个终端...我下载了一个经纪人的MT4(1)...运行演示...一段时间后,在另一个注册,太
我是提供下载终端......下载(2)的结果,2终端不走......和1出现配置文件2的经纪人......在一般情况下,所有的困惑......然后从二进制来信,他们移动到MT5 ...安装和乍一看,所有比MT4更好。我的问题是,是否可以在一个终端上为不同的经纪商开立账户?我可以把它们全部转移到MT5吗?和如果指标从MT4适合到5?
谢谢...
如此积极的帮助,非常感谢。
已经在纠结于一个新问题)
请帮助我找出新的ZigZag 顶点出现的事实。
我试着把第一个顶点的价格存储在一个变量中,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。{
newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
newZZH1=true;
}
但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。
事实证明,新的顶部没有形成,旗帜被升起。{
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=1; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
如此积极的帮助,非常感谢。
已经在纠结于一个新问题)
请帮助我找出新的ZigZag 顶点出现的事实。
试图在一个变量中记住第一个顶点的价格,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。{
newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
newZZH1=true;
}
但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。
事实证明,没有形成新的顶点,但旗帜被升起。{
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=1; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
人字形实际上有三个缓冲区--总数为0,1-上端,2-下端。
在零点的时候,一些缓冲区里总是有一个值--要么在第一个缓冲区里(如果膝盖是向上的),要么在第二个缓冲区里(如果它是向下的)。因此,当前蜡烛上的零缓冲区总是有一个值--要么来自第一个缓冲区,要么来自第二个。
那么,为了找到一个明确的上端点,我们应该从第1条开始,寻找第一个缓冲区的第一个非空值。对于下限,我们需要找到第二个缓冲区的第一个非空白值,从第1条开始。
为了知道这是否是一个新的顶部或底部,我们需要记住之前发现的顶部/顶部的时间,并将其与我们迄今为止发现的情况进行比较。
它是漫无边际的,但希望你能理解......