在测试器中拖放SL和TP。 - 页 13 1...67891011121314 新评论 khorosh 2016.02.17 14:31 #121 Artyom Trishkin: 或者你可以把它与键盘按钮结合起来;) 是的,也是一种选择。 Artyom Trishkin 2016.02.17 15:00 #122 khorosh: 所以这就是我的错误所在。如果我们需要从订单开盘线中拉出SL和TP,我们不能这样做,因为存在一个如何知道拉什么的问题。因此,我们需要在真实的图表上确定行动的类型,因为在光标的方向上,可以使用键盘键或创建一个按钮来设置行动的类型。第一个选项用于真实的图表上,在我看来是最好的。 Ctrl+mouse - 停止。只是鼠标--采取。并一次性拖到你需要的地方。 [删除] 2016.02.17 15:43 #123 Artyom Trishkin: 是的,这很清楚。我的意思是:如果没有止损,我们可以拉动订单本身的线条,止损将被设置在我们 "拉动 "线条的地方。如果我们没有外卖处理,就会出现这种情况。如果我们对止损点和脚趾都进行了处理,但订单两者都没有,那么如果我们绘制订单线,我们应该设置什么?是采取还是停止?如果没有停止并采取例如买入:如果你拉起,然后轻拍,如果你拉下,然后滑动。 Artyom Trishkin 2016.02.17 16:09 #124 pako:如果没有停止并采取例如买入:如果你拉起,然后轻拍,如果你拉下,然后滑动。 这就是它在终端的工作方式。而把止损点移到买入的利润区--这就是我们讨论的内容。 [删除] 2016.02.17 16:30 #125 Artyom Trishkin: 这是它在终端的方式。而要使买入止损点移动到盈利区--这就是我们讨论的内容。 这就是我要说的:让它像在终端一样 Artyom Trishkin 2016.02.17 16:54 #126 pako: 我说的是让它像终端一样。 已经说过要像在终端那样做。现在是关于如何不在终端做这件事。 [删除] 2016.02.17 18:16 #127 Artyom Trishkin: 在终端的方式已经解释过了。现在是关于如何不在终端做这件事。 我想我是在用俄语写作 Artyom Trishkin 2016.02.17 20:13 #128 pako: 我想我是用俄语写的。 我在用同样的语言回答...;) khorosh 2016.02.18 08:18 #129 今天早上,在头脑清醒的情况下,我找到了一个解决方案。此外,我摆脱了修改函数中的额外循环。我为两个变体做了一个修改功能。1) 如果一个订单没有设置SL和TP,点击订单,SL和TP将弹出50点。如果需要,在需要的地方拖放它们。如果订单已经有SL和TP,我们就把它们拖到我们想要的地方。2)在真正的图表上如何做的一个变体。如果我们没有SL和TP,我们就把它们从订单行中拖出来,然后把它们移到我们想要的地方。第一个变体。void ModifySlTp(double priceModify=0) { double sl=0,tp=0; if(TicketModifyOrder==0) { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { if(MathAbs(OrderStopLoss()-priceModify)<30*Point()) {OnSL=true;} if(MathAbs(OrderTakeProfit()-priceModify)<30*Point()) {OnTP=true;} if(MathAbs(OrderOpenPrice()-priceModify)<30*Point()) {OnOrd=true;} { if(OnSL || OnTP || OnOrd) { TicketModifyOrder=OrderTicket(); break; } } } } } } if(TicketModifyOrder>0) { if(OrderSelect(TicketModifyOrder, SELECT_BY_TICKET)) { bool typOrdBuy = OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT; bool typOrdSell= OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT; if(OnOrd) { if(typOrdBuy) { sl = NormalizeDouble(OrderOpenPrice()-500*Point(),Digits); tp = NormalizeDouble(OrderOpenPrice()+500*Point(),Digits); } if(typOrdSell) { sl = NormalizeDouble(OrderOpenPrice()+500*Point(),Digits); tp = NormalizeDouble(OrderOpenPrice()-500*Point(),Digits); } } if(OnSL) {sl=NormalizeDouble(priceModify,Digits);tp=OrderTakeProfit();} if(OnTP) {tp=NormalizeDouble(priceModify,Digits);sl=OrderStopLoss();} ModifyOrder1(-1, sl, tp, 0); } } }第二个选择。void ModifySlTp(double priceModify=0) { double sl=0,tp=0; if(TicketModifyOrder==0) { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { if(MathAbs(OrderStopLoss()-priceModify)<50*Point()) {OnSL=true;} if(MathAbs(OrderTakeProfit()-priceModify)<50*Point()) {OnTP=true;} if(MathAbs(OrderOpenPrice()-priceModify)<50*Point()) {OnOrd=true;} { if(OnSL || OnTP || OnOrd) { TicketModifyOrder=OrderTicket(); break; } } } } } } if(TicketModifyOrder>0) { if(OrderSelect(TicketModifyOrder, SELECT_BY_TICKET)) { bool typOrdBuy = OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT; bool typOrdSell= OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT; if(OnOrd) { if(typOrdBuy) { if(priceModify>OrderOpenPrice()) {tp=NormalizeDouble(priceModify,Digits);sl=OrderStopLoss();} if(priceModify<OrderOpenPrice()) {sl=NormalizeDouble(priceModify,Digits);tp=OrderTakeProfit();} } if(typOrdSell) { if(priceModify<OrderOpenPrice()) {tp=NormalizeDouble(priceModify,Digits);sl=OrderStopLoss();} if(priceModify>OrderOpenPrice()) {sl=NormalizeDouble(priceModify,Digits);tp=OrderTakeProfit();} } } if(OnSL) {sl=NormalizeDouble(priceModify,Digits);tp=OrderTakeProfit();} if(OnTP) {tp=NormalizeDouble(priceModify,Digits);sl=OrderStopLoss();} ModifyOrder1(-1, sl, tp, 0); } } } 我们不应该忘记声明全局变量 OnSL、OnTp和OnOrd。还有,在重置TicketModifyOrder 的专家顾问中,增加重置这些变量 的内容。在EA中,一些变量的名称和修改函数的名称是正确的。我在等待来自感激的公众的掌声。让我们鼓掌,散去吧,先生们)。 khorosh 2016.02.21 12:34 #130 我还想到了第三种选择。这是为那些不喜欢携带SL和TP的人准备的。设置SL和TP的算法如下:你应该在订单上点击一次,从而选择它(我们定义票据),然后在你想设置SL的图表点上点击一次(通常是超出本地价格最低和最高点的点)。同时,SL将被设置在选定的点上,TP将被设置在距离订单价格Kt倍的点上,该点比SL距离订单价格要远。Ktp是SL大于SL的多少倍,在一个外部变量中定义。注意,TicketModifyOrder和OnOrd现在不是在OnTick()主体中重置,而是在函数本身中重置。在OnTick()主体中重设这些变量的做法应该被删除。在这个变体中,也有可能实现拖放SL和TP的功能,但我懒得去想了。如果需要,你可以直接切换到1个变体。并以按钮的形式进行切换。void ModifySlTp2(double priceModify=0) { double sl=0,tp=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { OnOrd=false; if(MathAbs(OrderOpenPrice()-priceModify)<30*Point()) {OnOrd=true;} if(OnOrd) { TicketModifyOrder=OrderTicket(); return; } } } } if(TicketModifyOrder>0) { if(OrderSelect(TicketModifyOrder, SELECT_BY_TICKET)) { bool typOrdBuy = OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT; bool typOrdSell= OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT; if(!OnOrd) { if(typOrdBuy) { sl = NormalizeDouble(priceModify,Digits); tp = NormalizeDouble(OrderOpenPrice()+Ktp*(OrderOpenPrice()-sl),Digits); } if(typOrdSell) { sl = NormalizeDouble(priceModify,Digits); tp = NormalizeDouble(OrderOpenPrice()-Ktp*(sl-OrderOpenPrice()),Digits); } ModifyOrder1(-1, sl, tp, 0); TicketModifyOrder = 0; } } } } 1...67891011121314 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
或者你可以把它与键盘按钮结合起来;)
所以这就是我的错误所在。如果我们需要从订单开盘线中拉出SL和TP,我们不能这样做,因为存在一个如何知道拉什么的问题。因此,我们需要在真实的图表上确定行动的类型,因为在光标的方向上,可以使用键盘键或创建一个按钮来设置行动的类型。第一个选项用于真实的图表上,在我看来是最好的。
是的,这很清楚。我的意思是:如果没有止损,我们可以拉动订单本身的线条,止损将被设置在我们 "拉动 "线条的地方。如果我们没有外卖处理,就会出现这种情况。如果我们对止损点和脚趾都进行了处理,但订单两者都没有,那么如果我们绘制订单线,我们应该设置什么?是采取还是停止?
如果没有停止并采取
例如买入:如果你拉起,然后轻拍,如果你拉下,然后滑动。
如果没有停止并采取
例如买入:如果你拉起,然后轻拍,如果你拉下,然后滑动。
这是它在终端的方式。而要使买入止损点移动到盈利区--这就是我们讨论的内容。
我说的是让它像终端一样。
在终端的方式已经解释过了。现在是关于如何不在终端做这件事。
我想我是用俄语写的。
今天早上,在头脑清醒的情况下,我找到了一个解决方案。此外,我摆脱了修改函数中的额外循环。我为两个变体做了一个修改功能。
1) 如果一个订单没有设置SL和TP,点击订单,SL和TP将弹出50点。如果需要,在需要的地方拖放它们。如果订单已经有SL和TP,我们就把它们拖到我们想要的地方。
2)在真正的图表上如何做的一个变体。如果我们没有SL和TP,我们就把它们从订单行中拖出来,然后把它们移到我们想要的地方。
第一个变体。
第二个选择。
我们不应该忘记声明全局变量 OnSL、OnTp和OnOrd。还有,在重置TicketModifyOrder 的专家顾问中,增加重置这些变量 的内容。在EA中,一些变量的名称和修改函数的名称是正确的。
我在等待来自感激的公众的掌声。让我们鼓掌,散去吧,先生们)。
我还想到了第三种选择。这是为那些不喜欢携带SL和TP的人准备的。设置SL和TP的算法如下:你应该在订单上点击一次,从而选择它(我们定义票据),然后在你想设置SL的图表点上点击一次(通常是超出本地价格最低和最高点的点)。同时,SL将被设置在选定的点上,TP将被设置在距离订单价格Kt倍的点上,该点比SL距离订单价格要远。Ktp是SL大于SL的多少倍,在一个外部变量中定义。注意,TicketModifyOrder和OnOrd现在不是在OnTick()主体中重置,而是在函数本身中重置。在OnTick()主体中重设这些变量的做法应该被删除。在这个变体中,也有可能实现拖放SL和TP的功能,但我懒得去想了。如果需要,你可以直接切换到1个变体。并以按钮的形式进行切换。