[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 346 1...339340341342343344345346347348349350351352353...432 新评论 Рустам 2013.05.17 12:56 #3451 hoz: Vadim,如果你可以使用ObjectSet(),为什么要重新创建对象? 为什么要征求意见,然后挑战它?这是主流吗? Viktar Dzemikhau 2013.05.17 13:00 #3452 FAQ: 我认为没有必要再争论下去了。 我已经一步步详细地解释了一切。 继续做你一直在做的事情。 能有什么样的讨论呢?我们应该以价格的最大偏差来关闭订单。这意味着我们对价格感兴趣...也就是说,我们应该找到一个极端的挂单(有最高或最低开盘价)。如果你不同意,你可以争论。否则我毕竟是对的!我很清楚我在说什么。 elektronik 2013.05.17 13:17 #3453 该代码删除了ST和TP,我添加了一个条件来进行选择性删除哪些地方写得不对?一直在删除所有东西 :( #property show_inputs extern bool StopLoss = True; // Удалить только StopLoss extern bool TakeProfit = True; // Удалить только TakeProfit extern bool ALL = True; // Удалить все void start() { bool fm; int i; double SL=OrderStopLoss(); double TP=OrderTakeProfit(); if (StopLoss) SL=0; if (TakeProfit) TP=0; if (ALL) {SL=0; TP=0;} for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE); } if (OrderType()==OP_SELL) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE); } } } }还是没有其他解决办法,必须为每个条件编写删除代码?#property show_inputs#include <WinUser32.mqh> extern bool StopLoss = False; // Удалить только StopLoss extern bool TakeProfit = False; // Удалить только TakeProfit extern bool ALL = False; // Удалить все void start() { bool fm; int i; if (StopLoss) { for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE); } if (OrderType()==OP_SELL) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE); } } } return(0); } if (TakeProfit) { for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE); } if (OrderType()==OP_SELL) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE); } } } return(0); } if (ALL) { for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE); } if (OrderType()==OP_SELL) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE); } } } return(0); } } [ARCHIVE]Any rookie question, so 退出策略。阶梯式止损与拖曳式止损 如何编码? Vadim Zhunko 2013.05.17 14:13 #3454 hoz: Vadim,当你可以使用ObjectSet() 时,为什么要再次创建对象?在这种情况下,有一个功能,图形对象被完全创建和配置。其中,创作功能得到了优化。如果该对象已经存在,则不会被创建。自己检查一下吧。测量创建对象的时间,然后改变属性。第二次通话时间会短很多。也就是说,没有任何东西被重新创造出来。因此,我们有一个通用的函数,不仅可以创建一个对象,而且还可以通过改变对象的属性 来定制它,而不需要太多的时间。 balamytin 2013.05.17 14:55 #3455 你能建议一个EA的脚本来确定市场趋势吗? Viktar Dzemikhau 2013.05.17 15:09 #3456 我写了一个函数,将删除价格最低的卖单。 要关闭的空单数量 等于触发的买单数量,即进入市场订单。因此,如果一个买单被触发,那么我们就关闭一个卖单,如果两个买单被触发,那么我们就关闭两个卖单。以下是代码。//+-------------------------------------------------------------------------------------+ //| Удаление несработанных отложеннык шортов | //+-------------------------------------------------------------------------------------+ void DeletePendingSells(int& amountOfCurrPending) { int total = OrdersTotal() - 1, ordersToDelete = level - amountOfCurrPending, s_ticket; amountOfCurrPendingBuys = 0; amountOfCurrPendingSells = 0; Print("DeletePendingSells: level = ", level); Print("ordersToDelete = level - amountOfCurrPending ; ", level, " - ", amountOfCurrPending); int n = 0; double OOP = 2.0; Print("функция сноса отложек DeletePendingSells"); for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; if(OrderType() != OP_SELLSTOP) continue; while (n < ordersToDelete) { if (OOP > OrderOpenPrice()) { Print("OOP > OrderOpenPrice() ; ", OOP, " > ", OrderOpenPrice()); OOP = OrderOpenPrice(); s_ticket = OrderTicket(); ordersToDelete--; } } } }amountOfCurrPending-待处理的 买入订单 的数量。水平- 最初发送给每一方的待定订单的数量。OOP- 挂单的开盘价,我已经取了任何无法达到的值。我们的条件如下:如果计数器低于ordersToDelete,我们就删除价格最低的挂单。但所有空头头寸都被删除。我有什么问题吗? Artyom Trishkin 2013.05.17 16:05 #3457 hoz:我写了一个函数,将删除价格最低的卖单。 要关闭的空单数量 等于触发的买单数量,即进入市场订单。因此,如果一个买单被触发,那么我们就关闭一个卖单,如果两个买单被触发,那么我们就关闭两个卖单。以下是代码。amountOfCurrPending- 待处理的买入订单的数量。水平- 最初发送给每一方的待定订单的数量。OOP- 挂单的开盘价,我已经取了任何无法达到的值。我们的条件如下:如果计数器低于ordersToDelete,我们就删除价格最低的挂单。但所有空头头寸都被删除。我有什么问题吗? 我不明白你的逻辑。为什么不呢:该订单被转化为市场头寸--最远的相反挂单被删除。 这就是全部。还是你在一个价格上有一堆的订单? Viktar Dzemikhau 2013.05.17 16:46 #3458 artmedia70: 这就是全部。或者你有一揽子订单的价格吗? 不,订单是以递增的方式...artmedia70: 我不明白你的逻辑...为什么不呢:订单被转换为市场头寸--最远的相反挂单被移除。 这就是我删除最远的相反头寸的方法,也就是说,既然是空头,就意味着开盘价 最低的头寸。在这里,我重写了这个函数,这里的一切应该都很清楚。我删除了印刷品,并删除了一个额外的变量。 变量amountOfCurrPending 转移买入时剩余的交易数量。也就是说,如果初始金额是水平,而amountOfCurrPending 是当前的订单金额,那么用当前的订单金额减去初始金额,我们将得到差额,这就是删除短线所需的金额。你看到了吗?//+-------------------------------------------------------------------------------------+ //| Удаление несработанных отложеннык шортов | //+-------------------------------------------------------------------------------------+ void DeletePendingSells(int& amountOfCurrPending) { int total = OrdersTotal() - 1, ordersToDelete = level - amountOfCurrPending, // Количество отложек, которые требуется удалить s_ticket; amountOfCurrPendingBuys = 0; // Количество текущих отложек на покупку amountOfCurrPendingSells = 0; // Количество текущих отложек на продажу Print("DeletePendingSells: level = ", level); Print("ordersToDelete = level - amountOfCurrPending ; ", level, " - ", amountOfCurrPending); double OOP = 2.0; Print("функция сноса отложек DeletePendingSells"); for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; if(OrderType() != OP_SELLSTOP) continue; while (ordersToDelete > 0) // Если есть ордера, которые требуется удалить.. { if (OOP > OrderOpenPrice()) { Print("OOP > OrderOpenPrice() ; ", OOP, " > ", OrderOpenPrice()); OOP = OrderOpenPrice(); // Ищется ордер, с минимальной ценой открытия s_ticket = OrderTicket(); // Получаем тикет ордера с минимальной ценой открытия Print("DeletePendingSells: s_ticket = ", s_ticket); Print("DeletePendingSells: OOP = ", OOP); OrderDelete(s_ticket,Black); // Тут нужно закрыть найденный ордер, и видимо проверить, что он закрыт. И счётчик уменьшить! ordersToDelete--; // Уменьшаем количество требуемых ордеров для удаления } } } Print("DeletePendingSells: ordersToDelete = ", ordersToDelete); } 我用红色标记的地方有错吗?如何解决这个问题? Artyom Trishkin 2013.05.17 17:44 #3459 hoz: 不,订单是递增的。我就是这样删除最远的头寸,即既然是空头,就意味着开盘价最低的头寸。在这里我重写了这个函数,它应该是清楚的。我删除了印刷品,并删除了一个额外的变量。 变量amountOfCurrPending 转移买入时剩余的交易数量。也就是说,如果初始金额是水平,而amountOfCurrPending 是当前的订单金额,那么用当前的订单金额减去初始金额,我们将得到差额,这就是删除短线所需的金额。你看到了吗? 我用红色标记的地方有错吗?如何正确解决这个问题? Ищется ордер, с минимальной ценой открытия我将在挂单的评论中指定其在网格中的订单号,并在相应的相反挂单中写上相同的号码。然后,当找到一个市场头寸时,在读取其评论中的数字后,可以找到相应的相反头寸,其评论中的数字也是相同的。既然magiks是用来做其他事情的。ZS,我还没有时间去阅读/解析你的代码 Viktar Dzemikhau 2013.05.17 22:08 #3460 artmedia70:我会在待定位置的注释中写上它在网格中的序列号,并在相应的相反待定位置写上相同的数字。然后,当发现一个市场位置时,在读取其评论中的数字后,相应的相反挂单将通过其评论中的相同数字毫无问题地被发现。既然你用魔术师来做别的事情。ZS,我还没有时间去阅读/解析你的代码 是的,如果每个方向的挂单数量相同,这样找到相应的挂单是没有问题的。如果不一样,那么按照我的理解,这将是行不通的。 1...339340341342343344345346347348349350351352353...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
为什么要征求意见,然后挑战它?这是主流吗?
我认为没有必要再争论下去了。 我已经一步步详细地解释了一切。 继续做你一直在做的事情。
能有什么样的讨论呢?我们应该以价格的最大偏差来关闭订单。这意味着我们对价格感兴趣...也就是说,我们应该找到一个极端的挂单(有最高或最低开盘价)。如果你不同意,你可以争论。否则我毕竟是对的!我很清楚我在说什么。
该代码删除了ST和TP,我添加了一个条件来进行选择性删除
哪些地方写得不对?一直在删除所有东西 :(
#property show_inputs
extern bool StopLoss = True; // Удалить только StopLoss
extern bool TakeProfit = True; // Удалить только TakeProfit
extern bool ALL = True; // Удалить все
void start()
{
bool fm;
int i;
double SL=OrderStopLoss();
double TP=OrderTakeProfit();
if (StopLoss) SL=0;
if (TakeProfit) TP=0;
if (ALL) {SL=0; TP=0;}
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
}
}
}
}
还是没有其他解决办法,必须为每个条件编写删除代码?
#property show_inputs
#include <WinUser32.mqh>
extern bool StopLoss = False; // Удалить только StopLoss
extern bool TakeProfit = False; // Удалить только TakeProfit
extern bool ALL = False; // Удалить все
void start()
{
bool fm;
int i;
if (StopLoss)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
}
}
}
return(0);
}
if (TakeProfit)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
}
}
}
return(0);
}
if (ALL)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
}
}
}
return(0);
}
}
Vadim,当你可以使用ObjectSet() 时,为什么要再次创建对象?
在这种情况下,有一个功能,图形对象被完全创建和配置。其中,创作功能得到了优化。如果该对象已经存在,则不会被创建。自己检查一下吧。测量创建对象的时间,然后改变属性。第二次通话时间会短很多。也就是说,没有任何东西被重新创造出来。
因此,我们有一个通用的函数,不仅可以创建一个对象,而且还可以通过改变对象的属性 来定制它,而不需要太多的时间。
我写了一个函数,将删除价格最低的卖单。 要关闭的空单数量 等于触发的买单数量,即进入市场订单。
因此,如果一个买单被触发,那么我们就关闭一个卖单,如果两个买单被触发,那么我们就关闭两个卖单。
以下是代码。
amountOfCurrPending-待处理的 买入订单 的数量。
水平- 最初发送给每一方的待定订单的数量。
OOP- 挂单的开盘价,我已经取了任何无法达到的值。
我们的条件如下:如果计数器低于ordersToDelete,我们就删除价格最低的挂单。但所有空头头寸都被删除。我有什么问题吗?
我写了一个函数,将删除价格最低的卖单。 要关闭的空单数量 等于触发的买单数量,即进入市场订单。
因此,如果一个买单被触发,那么我们就关闭一个卖单,如果两个买单被触发,那么我们就关闭两个卖单。
以下是代码。
amountOfCurrPending- 待处理的买入订单的数量。
水平- 最初发送给每一方的待定订单的数量。
OOP- 挂单的开盘价,我已经取了任何无法达到的值。
我们的条件如下:如果计数器低于ordersToDelete,我们就删除价格最低的挂单。但所有空头头寸都被删除。我有什么问题吗?
这就是全部。还是你在一个价格上有一堆的订单?
这就是全部。或者你有一揽子订单的价格吗?
不,订单是以递增的方式...
我不明白你的逻辑...为什么不呢:订单被转换为市场头寸--最远的相反挂单被移除。
这就是我删除最远的相反头寸的方法,也就是说,既然是空头,就意味着开盘价 最低的头寸。在这里,我重写了这个函数,这里的一切应该都很清楚。我删除了印刷品,并删除了一个额外的变量。
变量amountOfCurrPending 转移买入时剩余的交易数量。也就是说,如果初始金额是水平,而amountOfCurrPending 是当前的订单金额,那么用当前的订单金额减去初始金额,我们将得到差额,这就是删除短线所需的金额。你看到了吗?
我用红色标记的地方有错吗?如何解决这个问题?不,订单是递增的。
我就是这样删除最远的头寸,即既然是空头,就意味着开盘价最低的头寸。在这里我重写了这个函数,它应该是清楚的。我删除了印刷品,并删除了一个额外的变量。
变量amountOfCurrPending 转移买入时剩余的交易数量。也就是说,如果初始金额是水平,而amountOfCurrPending 是当前的订单金额,那么用当前的订单金额减去初始金额,我们将得到差额,这就是删除短线所需的金额。你看到了吗?
我用红色标记的地方有错吗?如何正确解决这个问题?Ищется ордер, с минимальной ценой открытия
我将在挂单的评论中指定其在网格中的订单号,并在相应的相反挂单中写上相同的号码。然后,当找到一个市场头寸时,在读取其评论中的数字后,可以找到相应的相反头寸,其评论中的数字也是相同的。既然magiks是用来做其他事情的。
ZS,我还没有时间去阅读/解析你的代码
我会在待定位置的注释中写上它在网格中的序列号,并在相应的相反待定位置写上相同的数字。然后,当发现一个市场位置时,在读取其评论中的数字后,相应的相反挂单将通过其评论中的相同数字毫无问题地被发现。既然你用魔术师来做别的事情。
ZS,我还没有时间去阅读/解析你的代码
是的,如果每个方向的挂单数量相同,这样找到相应的挂单是没有问题的。如果不一样,那么按照我的理解,这将是行不通的。