停止限制 - 页 7 1234567 新评论 Denis Kirichenko 2019.12.12 18:57 #61 Sergey Chalyshev: 显然,没有人使用它。 订单是以不存在的价格开的。 一个简单的例子来检查。 //+------------------------------------------------------------------+ //| StopLimit_Test.mq5 | //+------------------------------------------------------------------+ #include <Trade\Trade.mqh> CTrade trade; input int Deviation = 100; //+------------------------------------------------------------------+ void OnTick() { MqlTick tick; SymbolInfoTick(_Symbol,tick); trade.SetTypeFilling(ORDER_FILLING_RETURN); double ticksise=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); if(OrdersTotal()==0) trade.OrderOpen( _Symbol, // символ ORDER_TYPE_BUY_STOP_LIMIT, // тип ордера 1.0, // объем ордера tick.ask+Deviation*ticksise, // цена исполнения tick.ask+10*ticksise, // цена стоплимита 0, // цена stop loss 0 // цена take profit ); } //+------------------------------------------------------------------+ 这 是否正确?首先是止损价格,然后是行权价格。见文件。 bool OrderOpen( const string symbol, // символ ENUM_ORDER_TYPE order_type, // тип ордера double volume, // объем ордера double limit_price, // цена стоплимита double price, // цена исполнения double sl, // цена stop loss double tp, // цена take profit ENUM_ORDER_TYPE_TIME type_time, // тип по истечению datetime expiration, // истечение const string comment="" // комментарий ) Denis Kirichenko 2019.12.12 19:19 #62 稍微修改了topicstarter的代码。 //+------------------------------------------------------------------+ //| StopLimit_Test.mq5 | //+------------------------------------------------------------------+ #include <Trade\Trade.mqh> CTrade trade; input int Deviation = 5; //+------------------------------------------------------------------+ void OnTick() { MqlTick tick; SymbolInfoTick(_Symbol,tick); trade.SetTypeFilling(ORDER_FILLING_RETURN); double ticksise=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); if(OrdersTotal()==0) { ENUM_ORDER_TYPE ord_type=ORDER_TYPE_BUY_STOP_LIMIT; double ord_vol=0.1; double ask_pr=NormalizeDouble(tick.ask,_Digits); double ord_pr=NormalizeDouble(tick.ask+Deviation*ticksise,_Digits); double limit_pr=NormalizeDouble(tick.ask+10*ticksise,_Digits); string ord_comment=StringFormat("%0."+IntegerToString(_Digits)+"f;%0."+ IntegerToString(_Digits)+"f;%0."+ IntegerToString(_Digits)+"f",ask_pr,limit_pr,ord_pr); trade.OrderOpen( _Symbol, // символ ord_type, // тип ордера ord_vol, // объем ордера limit_pr, // цена стоплимита ord_pr, // цена исполнения 0., // цена stop loss 0., // цена take profit 0, // тип по истечению 0, // истечение ord_comment // комментарий ); } } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { PrintFormat(" %s",EnumToString(trans.type)); //--- /*if(trans.type==TRADE_TRANSACTION_DEAL_ADD) { DebugBreak(); } else if(trans.type==TRADE_TRANSACTION_ORDER_UPDATE) { ENUM_ORDER_TYPE curr_ord_type=trans.order_type; if(curr_ord_type!=ORDER_TYPE_BUY_STOP_LIMIT) DebugBreak(); }*/ } //+------------------------------------------------------------------+ 下面是一个关于欧元兑美元外汇工具的例子。 重要提示:止损价格设置得比较糟糕。这是为了交换执行。 设置了一个买入止损限价,该限价被激活并作为限价单打开。 你可以在截图中看到,评论中存在价格。第一个价格(1.10258)是下单时的卖出价,第二个价格(1.10268)是订单的限价部分的激活价,第三个价格(1.10263)是订单的止损部分的激活价。 Denis Kirichenko 2019.12.12 19:42 #63 逻辑如下:如果市场卖价达到1.10263,那么订单的止损部分(执行价格)就会被激活。而订单的限价部分应立即触发,因为其执行价格比市场价格(1.10268)更差。 我们看一下日志文件。 2019.12.12 21:08:10.306 2019.12.02 00:00:11 buy stop limit 0.10 EURUSD at 1.10263 (1.10268) (1.10239 / 1.10258) 2019.12.12 21:08:10.310 2019.12.02 00:00:11 CTrade::OrderSend: buy stop limit 0.10 EURUSD at 1.10263 (1.10268) [done] 2019.12.12 21:08:10.310 2019.12.02 00:00:11 TRADE_TRANSACTION_ORDER_ADD 2019.12.12 21:08:10.310 2019.12.02 00:00:11 TRADE_TRANSACTION_REQUEST 2019.12.12 21:08:10.312 2019.12.02 00:02:15 order [#2 buy stop limit 0.10 EURUSD at 1.10263 (1.10268)] triggered 2019.12.12 21:08:10.312 2019.12.02 00:02:15 TRADE_TRANSACTION_ORDER_UPDATE 2019.12.12 21:09:18.333 2019.12.02 00:02:15 order [#2 buy limit 0.10 EURUSD at 1.10268] triggered 2019.12.12 21:09:18.333 2019.12.02 00:02:15 deal #2 buy 0.10 EURUSD at 1.10265 done (based on order #2) 2019.12.12 21:09:18.333 2019.12.02 00:02:15 deal performed [#2 buy 0.10 EURUSD at 1.10265] 2019.12.12 21:09:18.333 2019.12.02 00:02:15 order performed buy 0.10 at 1.10265 [#2 buy limit 0.10 EURUSD at 1.10268] 我们看到,在00:02:15 ,该订单已经变成了限价订单(止损部分已经触发)。而它立即变成了一个市场地位。而有趣的是,日志中并没有像第一行那样给出买卖价格(1.10239 / 1.10258)。而这是不方便的。是的,该位置在1.10265处开放。 预计将在1.10263开盘。在这里,我认为有2个百分点的滑坡。 看了看蜱虫基地。是的,测试是在2019年12月2日的真实蜱虫上进行的。 我们看到,有我们的刻度线(1.10265)。在截图中强调了这一点。而自从00:02:15 以来,这是第三次打勾。之前的要求=1.10271(来自00:02:15.428)甚至更高。虽然,在我们打钩的同时。也就是说,以更好的价格进入。结论:正如预期的那样,我们 在订单的止损部分得到了 2个点的滑落。 Dmitry Fedoseev 2019.12.12 20:22 #64 Denis Kirichenko: 这是 正确的做法吗?首先是止损价格,然后是行权价格。看一下文件。 这样做是故意的,以便当stoplimit走到极限时,立即触发极限。当它被触发时,它似乎是在外面的某个地方,在订单中指定的价格,而不是在激活止损的价格(实际上是)。 [删除] 2019.12.12 21:12 #65 Denis Kirichenko: 逻辑如下:如果市场卖价达到1.10263,订单的止损部分(行权价)就会被激活。而订单的限价部分应立即触发,因为其执行价格比市场价格(1.10268)更差。 有一个价格为123.的BUY_STOP_LIMIT。止损价是133。限制价格是111。 如果价格已经超过了止损价,限价就会被激活。如果价格返回到111,则开仓。 如果价格没有超过止损价并返回到限价,则不会开仓。 不是这样的吗? Sergey Chalyshev 2019.12.12 21:59 #66 Denis Kirichenko: 在外汇的测试器中也可以检查出止损限价单。只需设置"执行"=Exchange。 我检查了买入止损限价,具体如下:我把限价单的价格设置得比激活价差。该订单在激活时以市场价格(卖价)开盘。因此,看来测试器中的功能是有效的。 是的,在外汇工具上,通过交易所执行,它可以正常工作。 现在还要改变 "结算方式"=FORTS期货,看看它在交易所交易的工具上是如何运作的。 如果你把计算方法=外汇放在交易所交易的工具上,它可以正常工作,但保证金却不能正确计算。 prostotrader 2019.12.12 22:07 #67 Sergey Chalyshev: 你在实际交易中 使用StopLimit 吗? 很明显,StopLimit 在测试器中的作用是不充分的。 在实际交易中使用它有意义吗?有什么优势和劣势? 这种类型的订单使用起来没有意义。 立即下挂单 要容易得多,因为我们可以指定订单有效期的任何条款。 如果我们在交易所,但不在MQ服务器上,这个订单就能保证 按其中指定的价格运作。 而且服务器会出现 "故障"。 Wen Feng Lin 2024.06.27 00:30 #68 慢慢学习 Jin Rong Xia 2024.09.16 05:05 #69 点赞 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
显然,没有人使用它。
订单是以不存在的价格开的。
一个简单的例子来检查。
这 是否正确?首先是止损价格,然后是行权价格。见文件。
稍微修改了topicstarter的代码。
下面是一个关于欧元兑美元外汇工具的例子。
重要提示:止损价格设置得比较糟糕。这是为了交换执行。
设置了一个买入止损限价,该限价被激活并作为限价单打开。
你可以在截图中看到,评论中存在价格。第一个价格(1.10258)是下单时的卖出价,第二个价格(1.10268)是订单的限价部分的激活价,第三个价格(1.10263)是订单的止损部分的激活价。
逻辑如下:如果市场卖价达到1.10263,那么订单的止损部分(执行价格)就会被激活。而订单的限价部分应立即触发,因为其执行价格比市场价格(1.10268)更差。
我们看一下日志文件。
我们看到,在00:02:15 ,该订单已经变成了限价订单(止损部分已经触发)。而它立即变成了一个市场地位。而有趣的是,日志中并没有像第一行那样给出买卖价格(1.10239 / 1.10258)。而这是不方便的。是的,该位置在1.10265处开放。 预计将在1.10263开盘。在这里,我认为有2个百分点的滑坡。
看了看蜱虫基地。是的,测试是在2019年12月2日的真实蜱虫上进行的。
我们看到,有我们的刻度线(1.10265)。在截图中强调了这一点。而自从00:02:15 以来,这是第三次打勾。之前的要求=1.10271(来自00:02:15.428)甚至更高。虽然,在我们打钩的同时。也就是说,以更好的价格进入。结论:正如预期的那样,我们 在订单的止损部分得到了 2个点的滑落。
这是 正确的做法吗?首先是止损价格,然后是行权价格。看一下文件。
这样做是故意的,以便当stoplimit走到极限时,立即触发极限。当它被触发时,它似乎是在外面的某个地方,在订单中指定的价格,而不是在激活止损的价格(实际上是)。
逻辑如下:如果市场卖价达到1.10263,订单的止损部分(行权价)就会被激活。而订单的限价部分应立即触发,因为其执行价格比市场价格(1.10268)更差。
有一个价格为123.的BUY_STOP_LIMIT。止损价是133。限制价格是111。
如果价格已经超过了止损价,限价就会被激活。如果价格返回到111,则开仓。
如果价格没有超过止损价并返回到限价,则不会开仓。
不是这样的吗?
在外汇的测试器中也可以检查出止损限价单。只需设置"执行"=Exchange。
我检查了买入止损限价,具体如下:我把限价单的价格设置得比激活价差。该订单在激活时以市场价格(卖价)开盘。因此,看来测试器中的功能是有效的。
是的,在外汇工具上,通过交易所执行,它可以正常工作。
现在还要改变 "结算方式"=FORTS期货,看看它在交易所交易的工具上是如何运作的。
如果你把计算方法=外汇放在交易所交易的工具上,它可以正常工作,但保证金却不能正确计算。
你在实际交易中 使用StopLimit 吗?
很明显,StopLimit 在测试器中的作用是不充分的。
在实际交易中使用它有意义吗?有什么优势和劣势?
这种类型的订单使用起来没有意义。
立即下挂单 要容易得多,因为我们可以指定订单有效期的任何条款。
如果我们在交易所,但不在MQ服务器上,这个订单就能保证 按其中指定的价格运作。
而且服务器会出现 "故障"。