向鉴赏家提问 - 页 13 1...6789101112131415161718192021 新评论 Rid 2009.08.14 09:41 #121 是的,--我想是的。谢谢你,TheXpert ! 我将试一试! [删除] 2009.08.28 06:34 #122 亲爱的专家,请帮助我理解OrderCloseBy()函数。我完全糊涂了。我有一个专家顾问,它通过反转条件开仓和平仓。也就是说,开盘买入和收盘卖出的条件是一样的,开盘卖出和收盘买入的条件也是一样的,这意味着在以相同的价格退出一个头寸后,马上就有一个相反方向的头寸以相同的规模开盘。所以我决定尝试取代OrderClose(),用双倍量开立一个相反方向的头寸,然后用OrderCloseBy()关闭相反的订单。也就是说,同样的算法应该被应用,但它会为每笔交易节省一个点差,但测试者却显示出相当不同的结果。我不能确定是我的代码写错了,还是误解了我的想法......。我将非常感谢您的解释...... Rid 2009.08.28 06:40 #123 首先,请向你的经纪公司的技术支持部门查询该终端是否支持该功能。并非所有的经纪公司都允许使用OrderCloseBy()函数。 [删除] 2009.08.28 07:05 #124 在演示中,支持OrderCloseBy()。 Rid 2009.08.28 07:28 #125 我不是一个专家。在我的 "帮助 "文件夹中,除了所有 "正常 "的东西外,我还有这个关于这个功能的说明(也复制到这里了--我不记得是哪个分支了)-- 而OrderCloseBy 函数只用于同时关闭2个订单,其中一个价差被保存。 我们应该以编程方式走过终端,记住所有开放的订单号码及其特征,选择主要订单号码,将其与所需的(从可用的)反面订单相匹配,并粘贴该号码。 //也就是说,按照我的理解,用这个功能你只能关闭两个预先选定的计数器位置。 这就是它的全部内容。 kombat 2009.08.28 07:34 #126 是的,嗯... 这就是为什么它叫这个名字。 [删除] 2009.08.28 07:36 #127 让我重新表述这个问题,即在以下两种立场逆转的可能性中是否存在任何经济上的差异。 1) 使用OrderClose 函数关闭1手卖出,然后打开1手买入。 2) 当SELL在1手中打开时,首先在2手中打开BUY,然后用OrderCloseBy函数关闭SELL,这也会在1手中留下一个打开的BUY位置。 根据工作簿中的例子,在2)的变体中会保留一个传播。 kombat 2009.08.28 07:39 #128 简而言之,1+1的价差将得到补偿,剩下的1将是正常的交易价差。 [删除] 2009.08.28 10:01 #129 https://book.mql4.com/ru/trading/orderclose - 这里有一个关于OrderCloseBy()函数的描述。试着在演示中做了同样的事情--它确实减少了很多传播。但它仍然不能在专家顾问上工作...我很困惑... Mislaid 2009.08.28 20:04 #130 Dmirtiy писал(а)>> https://book.mql4.com/ru/trading/orderclose - 在这里你可以看到OrderCloseBy()函数如何工作。我试着在演示中做同样的事情--它确实有较小的传播。但它仍然不能在专家顾问上工作...我真的很困惑... 你已经在两个主题中提出了这个问题。你很有好奇心。 没有简单的解决方案。随着MQL5的发布,这个问题将完全消失。 我可以建议几个我在我的EA中使用的程序。 //检测未结订单的当前状态。 空白 检查订单() { int i; BuyOrder = false; SellOrder = false; BuyLots = 0.0。 SellLots = 0.0; for ( i=0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS)。 如果 ( OrderSymbol() == Symbol() { 如果 ( OrderType() == OP_BUY ) { BuyOrder = true; LastBuyLots = OrderLots()。 BuyLots += LastBuyLots; //未平仓的买入头寸之和 BuyTicket = OrderTicket()。 } 如果 ( OrderType() == OP_SELL) { SellOrder = true; LastSellLots = OrderLots()。 SellLots += LastSellLots; // 未平仓的卖出头寸之和 SellTicket = OrderTicket()。 } } } } //开放(关闭)订单。 空白贸易变量( int variant )。 { switch( variant ) { // if (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1; // 卖出信号,没有订单,而且现在不是周五的最后一个小时。 // 开立一个卖出订单 案例1: OpenSellOrder(Lots)。 突破。 // if (Pattern < 0 && BuyOrder && ! SellOrder && ! FridayLastHour) variant = 2; // 卖出信号,有一个开放的买入订单,没有卖出订单 // 这不是星期五的最后一小时--我们正在翻开 案例2: OpenSellOrder(Lots + BuyLots)。 突破。 // if (Pattern < 0 && BuyOrder && ! SellOrder && FridayLastHour) variant = 3; // 卖出信号,有一个开放的买入订单,没有卖出订单 // 现在是周五的最后一个小时--关闭买入指令。 案例3: CloseBuyOrders()。 突破。 // if (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4; // 买入信号,没有订单,而且不是周五的最后一个小时。 // 打开买入订单 案例4: OpenBuyOrder(Lots)。 突破。 // if (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5; // 买入信号,有一个开放的卖出订单,没有买入订单 // 这不是星期五的最后一小时--我们正在翻开 案例5: OpenBuyOrder(Lots + SellLots)。 突破。 // if (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6; // 买入信号,有一个开放的卖出订单,没有买入订单 // 现在是周五的最后一个小时--关闭卖出指令。 案例6: CloseSellOrders()。 突破。 case 7:// if (SellOrder && BuyOrder) variant = 7;// 有一个开放的交叉订单 if (WaitBeforeTransaction(WaitSeconds) == 1) // 请求之间的暂停{ if (LastBuyLots <= LastSellLots) OrderCloseBy( BuyTicket, SellTicket); else OrderCloseBy( SellTicket, BuyTicket);} break //在其他变体中,不做任何事情 默认情况下。 突破。 } } 我希望你能处理好这些变数。 >>祝你好运! 通过注释确定代码中错误的方法 简单的订单管理 已打开头寸的两步修改 1...6789101112131415161718192021 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,--我想是的。谢谢你,TheXpert !
我将试一试!
我不是一个专家。在我的 "帮助 "文件夹中,除了所有 "正常 "的东西外,我还有这个关于这个功能的说明(也复制到这里了--我不记得是哪个分支了)--
而OrderCloseBy 函数只用于同时关闭2个订单,其中一个价差被保存。
我们应该以编程方式走过终端,记住所有开放的订单号码及其特征,选择主要订单号码,将其与所需的(从可用的)反面订单相匹配,并粘贴该号码。
//也就是说,按照我的理解,用这个功能你只能关闭两个预先选定的计数器位置。
这就是它的全部内容。
是的,嗯...
这就是为什么它叫这个名字。
让我重新表述这个问题,即在以下两种立场逆转的可能性中是否存在任何经济上的差异。
1) 使用OrderClose 函数关闭1手卖出,然后打开1手买入。
2) 当SELL在1手中打开时,首先在2手中打开BUY,然后用OrderCloseBy函数关闭SELL,这也会在1手中留下一个打开的BUY位置。
根据工作簿中的例子,在2)的变体中会保留一个传播。
https://book.mql4.com/ru/trading/orderclose - 在这里你可以看到OrderCloseBy()函数如何工作。我试着在演示中做同样的事情--它确实有较小的传播。但它仍然不能在专家顾问上工作...我真的很困惑...
你已经在两个主题中提出了这个问题。你很有好奇心。
没有简单的解决方案。随着MQL5的发布,这个问题将完全消失。
我可以建议几个我在我的EA中使用的程序。
//检测未结订单的当前状态。
空白 检查订单()
{
int i;
BuyOrder = false;
SellOrder = false;
BuyLots = 0.0。
SellLots = 0.0;
for ( i=0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS)。
如果 ( OrderSymbol() == Symbol()
{
如果 ( OrderType() == OP_BUY )
{
BuyOrder = true;
LastBuyLots = OrderLots()。
BuyLots += LastBuyLots; //未平仓的买入头寸之和
BuyTicket = OrderTicket()。
}
如果 ( OrderType() == OP_SELL)
{
SellOrder = true;
LastSellLots = OrderLots()。
SellLots += LastSellLots; // 未平仓的卖出头寸之和
SellTicket = OrderTicket()。
}
}
}
}
//开放(关闭)订单。
空白贸易变量( int variant )。
{
switch( variant )
{
// if (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1;
// 卖出信号,没有订单,而且现在不是周五的最后一个小时。
// 开立一个卖出订单
案例1:
OpenSellOrder(Lots)。
突破。
// if (Pattern < 0 && BuyOrder && ! SellOrder && ! FridayLastHour) variant = 2;
// 卖出信号,有一个开放的买入订单,没有卖出订单
// 这不是星期五的最后一小时--我们正在翻开
案例2:
OpenSellOrder(Lots + BuyLots)。
突破。
// if (Pattern < 0 && BuyOrder && ! SellOrder && FridayLastHour) variant = 3;
// 卖出信号,有一个开放的买入订单,没有卖出订单
// 现在是周五的最后一个小时--关闭买入指令。
案例3:
CloseBuyOrders()。
突破。
// if (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4;
// 买入信号,没有订单,而且不是周五的最后一个小时。
// 打开买入订单
案例4:
OpenBuyOrder(Lots)。
突破。
// if (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5;
// 买入信号,有一个开放的卖出订单,没有买入订单
// 这不是星期五的最后一小时--我们正在翻开
案例5:
OpenBuyOrder(Lots + SellLots)。
突破。
// if (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6;
// 买入信号,有一个开放的卖出订单,没有买入订单
// 现在是周五的最后一个小时--关闭卖出指令。
案例6:
CloseSellOrders()。
突破。
case 7:
// if (SellOrder && BuyOrder) variant = 7;
// 有一个开放的交叉订单
if (WaitBeforeTransaction(WaitSeconds) == 1) // 请求之间的暂停
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket);
else
OrderCloseBy( SellTicket, BuyTicket);
}
break
//在其他变体中,不做任何事情
默认情况下。
突破。
}
}
我希望你能处理好这些变数。
>>祝你好运!