该死的错误130到地狱 - 页 2 1234 新评论 [删除] 2009.05.22 17:06 #11 cloudbreaker wrote>> 我可以明确地说,Seawolf和Ruptor是在说他们的集体后方。 对于OP_BUY订单,你使用卖出价来生成你的进入价格和止损是完全正确的。 事实上,Seawolf和Ruptor是正确的。 你在ASK 价格输入一个多头订单,你在BID 价格退出,对于一个卖出订单来说,则相反。由于止损或止盈是一种退出方式,你需要使用买入价 来计算多头订单的价格。 这是一个相当常见的混淆点,经常被忽视,特别是在处理小的点差时,因为ASK 和BID 价格之间没有什么区别。有时,如果你的止损和滑点不是很紧,那么代码就会工作得很好,但如果你是剥头皮或做任何其他需要精确的事情,那么你需要使用这些准则,以便在进入时获得适当价格 而且 退出。 - 对于一个多头订单,即OP_BUY、OP_BUYSTOP 或OP_BUYLIMIT。 进入价格=ASK 出场价格(止损、止盈或OrderClose(...) )=BID - 对于空头订单,即OP_SELL,OP_SELLSTOP,或OP_SELLLIMIT。 进场价格 =BID 出场价格(止损,止盈,或收盘(...))=ASK - 托万 MetaEditor:模板作为支点 开发一个跨平台网格 EA 来自 MQL5 向导的预制专家交易系统运作于 MetaTrader [删除] 2009.05.22 20:32 #12 tovan: 事实上,Seawolf和Ruptor是正确的。 你在ASK 价格输入多头订单,你在BID 价格退出,卖出订单则相反。由于止损或止盈是一种退出方式,你需要使用BID 价格来计算多头订单的价格。 这是一个相当常见的混乱点,经常被忽视,特别是在处理小价差时,因为ASK 和BID 价格之间没有太大的区别。有时,如果你的止损和滑点不是很紧,那么代码会工作得很好,但如果你是剥头皮或做其他需要精确的事情,那么你需要使用这些准则,在进入时获得适当的价格 而且 退出。 - 对于一个多头订单,即OP_BUY、OP_BUYSTOP 或OP_BUYLIMIT。 进入价格=ASK 出场价格(止损、止盈或OrderClose(...) )=BID - 对于空头订单,即OP_SELL,OP_SELLSTOP,或OP_SELLLIMIT。 进场价格 =BID 出场价格(止损,止盈,或收盘(...))=ASK - 托万 明白了,我完全明白你的意思--向Seawolf和Ruptor表示最谦卑的歉意。 在我正常关闭订单或操作我自己的隐形止损(这只是调用我正常的关闭订单功能)时,我完全知道对OP_BUYs使用Bid,对OP_SELLs使用Ask。 然而,在开单时,我总是使用进场价格作为基线来计算止损,从未出现过任何问题。我可以看到宽松的价差和严格的止损的组合如何导致无效止损的错误。 我想补充的是,有很多样本的做法和我一样。 如果我们没有严格的止损,我想我们大多数人所经历的这两种技术之间的唯一区别是在实际赚钱或亏钱方面,尽管由于这两种类型的订单 都会 "更早地 "被止损,如果点差相当稳定,它们将倾向于相互抵消。 这种逻辑合理吗? [删除] 2009.05.22 21:59 #13 cloudbreaker wrote>> 明白了,我完全明白你的意思--对Seawolf和Ruptor表示最谦卑的歉意。 在我正常关闭订单或操作我自己的隐形止损(这只是调用我的正常关闭订单功能)时,我完全知道对OP_BUYs使用Bid,对OP_SELLs使用Ask。 然而,在开单时,我总是使用进场价格作为基线来计算止损,从未出现过任何问题。我可以看到宽松的价差和严格的止损的组合如何导致无效止损的错误。 我想补充的是,有很多样本的做法和我一样。 如果我们没有严格的止损,我想我们大多数人所经历的这两种技术之间的唯一区别是在实际赚钱或亏钱方面,尽管由于这两种类型的订单都会 "更早地 "被止损,如果点差相当稳定,它们将倾向于相互抵消。 这个逻辑合理吗? 说得好。我同意有许多其他的EA以你建议的方式进行操作。 这说明了我们根据自己的EA的工作方式,对止损采取了一些不同的看法。例如,我倾向于将我的止损设置得相当严格。因此,我通常更关心订单在哪里会失败,而不是如果它失败了,我将损失多少。但另一方面,如果你对订单关闭时你会损失(或获得)什么更感兴趣,那么以开盘价而不是收盘价做所有的计算是有意义的。只有在你的止损或止盈很紧的情况下(在几个点之内,取决于货币对),这才会成为一个问题。在这种情况下,EA将需要用MODE_STOPLEVEL做一些额外的检查(如你上面的建议),以确保你能真正完成交易。 我主要是从一个纯粹的立场出发,但我可以看到一些有效的论据,可以同时运行它。 - 托万 Rudolph Brits 2009.05.25 08:29 #14 tovan: 说得好。我同意有许多其他的EA以你建议的方式进行操作。这说明我们根据自己的EA的工作方式,对止损采取了一些不同的看法。例如,我倾向于将我的止损设置得相当严格。因此,我通常更关心订单在哪里会失败,而不是如果它失败了,我将损失多少。但另一方面,如果你对订单关闭时你会损失(或获得)什么更感兴趣,那么以开盘价而不是收盘价做所有的计算是有意义的。只有在你的止损或止盈很紧的情况下(在几个点之内,取决于货币对),这才会成为一个问题。在这种情况下,EA将需要用MODE_STOPLEVEL做一些额外的检查(如你上面的建议),以确保你能真正完成交易。我主要是从纯粹的立场出发,但我可以看到一些有效的论据,可以同时运行它。- 托万Tovan 这是否正确,因为我也得到一个130的错误 if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) { if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); } if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss() >(Ask+Point*TrailingStop)+Point) if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) Print("Error_Modify - " ,GetLastError()); else str=StringConcatenate("\n 我的票号是", OrderTicket(), " 我的止损 设置是", DoubleToStr(Ask+Point*TrailingStop,Digits)); //新代码 } } } if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) { if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); } if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss() <Bid-Point*TrailingStop-Point) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green)) Print("Error_Modify - " ,GetLastError()); else str=StringConcatenate("\n 我的票号是", OrderTicket(), " 我的止损设置是", DoubleToStr(Bid-Point*TrailingStop,Digits)); // 新代码 } }130的错误是与进场和出场有关吗--还是可能是因为滑点? 怎样实现定单的移动止损trailingstop ?请高 手指点下,谢谢! Damn Error 130 to 退出策略。阶梯式止损与拖曳式止损 [删除] 2009.05.25 13:16 #15 实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。 要问的问题是。 1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出? 2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出? tovan wrote>> 实际上,Seawolf和Ruptor是正确的。 你在ASK 价位输入多单,在BID价 位出场,对于卖单则相反。 //--VANGROSH ---正确但令人困惑。最好说你的长单TP或SL将在你的TP价格或SL价格==买入价时被执行。这是你看到的,当你看着你的订单碰到TP或SL时,但这与你如何计算这些价格没有关系。 由于止损或止盈是一种退出方式,你需要使用买入价 来计算多头订单的价格。 //--VANGROSH---对不起,这是不对的。你混淆了你所看到的--什么价格会触发退出,与你用来计算TP和SL价格的价格。 请仔细考虑一下这个问题。拿一个买入订单来说。你们都同意我们以ASK价格买入,没有问题。比方说,买入订单的TP是15点,而点差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。 这很简单,如果你只是想在什么价格上你的TP或SL将被击中。在一个买入订单中,以ASK价格进入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你根据ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的TP才会被击中,你的订单将以15点的利润关闭。 SL也是如此。如果你的止损点是30点,那就意味着从进场价格开始计算30点。在买入时,入市价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你真正的止损实际上是入市价(ASK)的35点,因为买入价比ASK价低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么? 我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。 你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。 if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop。 因为你希望你的TS是低于价格的X点,如果被击中,将关闭订单,这就是买入价格。 对于卖出,你使用ASK。 if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop; 因为你想让你的TS在价格之上X点,如果被击中,将关闭订单,这就是ASK价格。 请记住,是买入价将关闭你的买入TP和SL订单。 而ASK价格将关闭你的SELL TP和SL订单。 Rudolph Brits 2009.05.25 14:39 #16 vangrosh: 实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。 要问的问题是。1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出? 2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出? 请仔细思考一下。以一个买入订单为例。你们都同意我们以ASK价格买入--没有问题。比方说,买入订单的TP是15点,而价差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。 这很简单,只要你想一想你的止损点或止赢点会在什么价格被击中。在一个 "买 "的订单中,以ASK价格输入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你从ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的止损才会被击中,你的订单将以15点的利润关闭。SL也是如此。如果你的止损点是30点,那就意味着从进价开始的30点。在买入时,进入价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你的真正止损实际上是入市价(ASK)的35点,因为买入价比ASK价格低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么? 我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。 你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;因为你想让你的TS低于价格X个点,如果达到这个价格将关闭订单,这就是买入价。 对于卖出,你使用ASK。if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;因为你想让你的TS比价格高X个点,如果碰到ASK价格,就可以关闭订单。 请记住,是买入价将关闭你的买入TP和SL订单。而ASK价格将关闭你的卖出TP和SL订单。 Vangrosh谢谢你的建议你能帮助我了解一下吗? 这是否正确?我做了一个自动跟踪的EA如果(OrderType()==OP_SELL && OrderSymbol()==Symbol()){ if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //放置一个TP和SL } if((OrderOpenPrice()-Ask)>(Point*TrailingStop)//放置TP { if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) //检查true { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) //如果为真则修改订单 Print("Error_Modify - ",GetLastError()); else str=StringConcatenate("/n 我的票号是", OrderTicket(), " 我的止损 设置是", DoubleToStr(Ask+Point*TrailingStop,Digits)); //新代码 } } } Damn Error 130 to 退出策略。阶梯式止损与拖曳式止损 如何编码? [删除] 2009.05.25 20:21 #17 vangrosh: 实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。 要问的问题是。 1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出? 2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出? 请仔细考虑一下这个问题。以一个买入订单为例。你们都同意我们以卖出价买入--没有问题。比方说,买入订单的TP是15点,而价差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。 这很简单,只要你想一想你的TP或SL会在什么价格被击中。在一个买入订单中,以ASK价格进入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你根据ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的TP才会被击中,你的订单将以15点的利润关闭。 SL也是如此。如果你的止损点是30点,那就意味着从进场价格开始计算30点。在买入时,入市价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你真正的止损实际上是入市价(ASK)的35点,因为买入价比ASK价格低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么? 我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。 你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。 if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop。 因为你希望你的TS是低于价格的X点,如果被击中,将关闭订单,这就是买入价格。 对于卖出,你使用ASK。 if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop; 因为你想让你的TS在价格之上X点,如果被击中,将关闭订单,这就是ASK价格。 请记住,是买入价将关闭你的买入TP和SL订单。 而ASK价格将关闭你的SELL TP和SL订单。 Vangrosh,正如我在回答Tovan时提到的,只要你清楚地知道你在做什么,你可以用两种方式做。我们远远没有混淆。 也就是说,考虑到你知道进场价格、经纪人的止损限额和价差,你可以通过使其与卖出价或买入价 "相对 "并在必要时进行调整来实现你想要的 "绝对 "止损(也不会产生130个错误!)。 顺便说一下,我更喜欢用你描述的方式。 [删除] 2009.05.25 23:06 #18 cloudbreaker wrote>> Vangrosh,正如我在对Tovan的答复中所暗示的,只要你清楚地知道你在做什么,你就可以用两种方式来做。我们远没有感到困惑。 也就是说,考虑到你知道进场价格、经纪人的止损限额和价差,你可以通过使其与卖出价或买入价 "相对 "并在必要时进行调整来实现你想要的 "绝对 "止损(也不会产生130个错误!)。 顺便说一下,我更喜欢用你描述的方式来做。 好吧,海狼说,"经验法则......如果你在买入时进入,你就以买入价退出,如果你在买入时进入,你就以卖出价退出"。 这不是混淆了吗?我的意思不是说他糊涂了,我的意思是对我来说,他所说的背景并不清楚。如果他说的是计算退出,他的经验法则是不正确的。当我说困惑时,我并不是说你们不知道自己在做什么,或者你们不能用另一种方式来做--我真正想说的是,他们给出指示的方式让人困惑。例如,上面引用的Seawolf的话是正确的,如果他说的是MT中的订单在什么价位退出。我认为对于刚刚学习的人来说,你必须非常清楚你指的是什么背景,因为在教授TP和SL时有两个基本背景。 1)背景或观点是关注在什么价格(买入价或卖出价),一个开放订单的TP和SL将被击中--这是我需要学习的第一件事,只是为了手动交易。 2)关注的背景或观点不是上面的第1条,而是关注我们用什么价格(买入价或卖出价)来计算我们的TP和SL,如果我们希望我们的TP和SL价格是准确的,包括价差。 听着,我也是个新手,如果事情的来龙去脉不是很清楚,我和其他新手很容易就会感到困惑。 而我一开始并不知道有不止一种情况可以查看TP和SL,还有很多其他我们需要了解的东西。 cloudbreaker 写道:"Vangrosh,正如我在回答Tovan时提到的那样,只要你清楚地知道你在做什么,你就可以用两种方式做。 这就是为什么我试图在我的帖子中尽可能清楚地说明情况。像我这样刚开始学习的人并不 清楚我们在做什么,这就是为什么我们需要在适当的背景下被教导一些事情。 在我的经验中,似乎很多时候,我们的知识是假设的,而我们还没有。我们需要首先了解基本规则,然后获得一些经验。只有在那之后,我们才会知道哪些 "规则 "我们可以弯曲或偏离。 顺便说一下,我在帖子里指的不是你。我认为你的回答是迄今为止最清晰和准确的。冒着 "拍马屁 "的风险,当谈到在这个论坛上获得最清晰和准确的答案时,你的帖子是我首先寻找的一些。在这个论坛上,到目前为止,我发现只有4、5个人被证明是比较持续准确的,而且你可以说他们实际上有更多的经验在背后支持他们。 [删除] 2009.05.26 00:06 #19 vangrosh: 嗯,Seawolf说,"经验法则......如果你在卖出价上进入,你就以买入价退出,如果你在买入价上进入,你就以卖出价退出"。 这不是混淆了吗?我的意思不是说他糊涂了,我的意思是对我来说,他所说的背景并不清楚。如果他说的是计算退出,他的经验法则是不正确的。当我说困惑的时候,我不是说你们不知道自己在做什么,或者你们不能用另一种方式来做--我真正想说的是,他们给出指示的方式令人困惑。例如,上面引用的Seawolf的话是正确的,如果他说的是MT中的订单在什么价位退出。我认为对于刚刚学习的人来说,你必须非常清楚你指的是什么背景,因为在教授TP和SL时有两个基本背景。 1)背景或观点是关注在什么价格(买入价或卖出价),一个开放订单的TP和SL将被击中,这是我需要学习的第一件事,只是为了手动交易...... 2)关注的背景或观点不是上面的第1条,而是关注我们用什么价格(买入价或卖出价)来计算我们的TP和SL,如果我们希望我们的TP和SL价格是准确的,包括价差。 听着,我也是个新手,如果事情的来龙去脉不是很清楚,我和其他新手很容易就会感到困惑。 而我一开始并不知道有不止一个背景来看待TP和SL,还有很多其他我们需要了解的东西。 cloudbreaker 写道:"Vangrosh,正如我在回答Tovan时提到的那样,只要你清楚地知道你在做什么,你就可以用两种方式做。 这就是为什么我试图在我的帖子中尽可能清楚地说明情况。像我这样刚开始学习的人并不 清楚我们在做什么,这就是为什么我们需要在适当的背景下被教导一些事情。 在我的经验中,似乎很多时候,我们的知识是假设的,而我们还没有。我们需要首先了解基本规则,然后获得一些经验。只有在那之后,我们才会知道哪些 "规则 "我们可以弯曲或偏离。 顺便说一下,我在帖子里指的不是你。我认为你的回答是迄今为止最清晰和准确的。冒着 "拍马屁 "的风险,当谈到在这个论坛上获得最清晰和准确的答案时,你的帖子是我首先寻找的一些。到目前为止,我在这个论坛上只发现了大约4或5个人,他们被证明是比较持续准确的,而且你可以说他们实际上有更多的经验在背后支持他们。 谢谢你的赞美;非常感谢。 当我说我们没有混淆时,我真的只是为自己和托万说话,因为我们似乎在一个类似的波段上运作。 如果我的帖子在任何方面听起来很唐突,请原谅;这当然不是故意的,我当时也没有那种感觉(虽然我也有这样的时候......)。 我在这个论坛上的一般做法(当我自己不寻求帮助时)是尽力帮助那些正在努力学习编程技能的人。我真的没有时间去理会那些希望一切都为他们完成的人,他们来到论坛的第一篇帖子标题是 "我需要一个成功的EA"。像你这样的人是我在这里保持兴趣的原因,而且你可能比我更了解外汇交易。 介绍一下背景--我从20世纪80年代初就开始做程序员,但几年前放弃了工作,做了一名商业直升机飞行员。然而,鉴于今年我的公司缺乏飞行,我一直在为我的一个朋友编写EA,他拥有一个刚起步的研究公司。我们采取混沌理论(而不是市场知识)的方法进行交易,并且已经代表一个知名的对冲基金对这些EA进行了非常有利的交易。我真的很喜欢这个工作! 祝你好运。 [删除] 2009.05.26 00:52 #20 delcor wrote>> 旺格罗什 谢谢你的建议 你能帮助我了解一下吗? 这是否正确? 我做了一个自动跟踪的EA if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) { 如果(OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //放置一个TP和SL}。 你应该在发送订单时设置你的基础TP和SL,否则就只做一次上面的行。如果你在每一个tick上都做上面这一行 那么你也会得到OrderModify错误1,这将发生在现有的SL值相同的时候。 作为新的价格,意味着价格还没有改变--SL与之前一样。 如果((OrderOpenPrice()-Ask)>(Point*TrailingStop))//放置TP { if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // check true 这看起来很好。我认为你所做的添加 一个点(+Point)是一个好主意。我也做过同样的事情 但在不同的地方和方式,但这是为了解决一个不同的问题,一个你可以得到的问题,当比较双打不工作,所以你添加 一个点,以确保价格大于或小于--否则你的追踪止损有时将无法执行。 剩下的似乎是正确的。{ if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true 修改订单 Print("Error_Modify - ",GetLastError())。 else str=StringConcatenate("/n 我的票号是", OrderTicket(), " 我的止损设置是", DoubleToStr(Ask+Point*TrailingStop,Digits); // 新代码 } } } 这里是MQ EA MACD Sample.mq4中的移动止损例子。 // check for trailing stop if( TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point* TrailingStop)) { if((OrderStopLoss()>(Ask+Point* TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point* TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } 但我发现我从这段代码中得到了错误,因为已知的问题是,当像上面那样对双倍数进行比较时,你的大于>子句有时会评估为TRUE 即使价格完全相同--你打印()了价格,它们也是一样的。你可以搜索一下 "双倍数的比较 "来了解详情。有一些变通方法,比如在stdlib.mq4(在libraries文件夹中)中发现的CompareDoubles()函数,或者在不需要的地方使用NormalizeDouble(),但我发现在这种情况下,像你这样简单地添加一个点就是很好的方法。但我没有测试过你的方法,所以我不确定它是否正确,但似乎是可以的。我将在下一篇文章中给你我在EA中使用的代码。 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我可以明确地说,Seawolf和Ruptor是在说他们的集体后方。
对于OP_BUY订单,你使用卖出价来生成你的进入价格和止损是完全正确的。
事实上,Seawolf和Ruptor是正确的。
你在ASK 价格输入一个多头订单,你在BID 价格退出,对于一个卖出订单来说,则相反。由于止损或止盈是一种退出方式,你需要使用买入价 来计算多头订单的价格。
这是一个相当常见的混淆点,经常被忽视,特别是在处理小的点差时,因为ASK 和BID 价格之间没有什么区别。有时,如果你的止损和滑点不是很紧,那么代码就会工作得很好,但如果你是剥头皮或做任何其他需要精确的事情,那么你需要使用这些准则,以便在进入时获得适当价格 而且 退出。
-
对于一个多头订单,即OP_BUY、OP_BUYSTOP 或OP_BUYLIMIT。
进入价格=ASK
出场价格(止损、止盈或OrderClose(...) )=BID
-
对于空头订单,即OP_SELL,OP_SELLSTOP,或OP_SELLLIMIT。
进场价格 =BID
出场价格(止损,止盈,或收盘(...))=ASK
-
托万
事实上,Seawolf和Ruptor是正确的。
你在ASK 价格输入多头订单,你在BID 价格退出,卖出订单则相反。由于止损或止盈是一种退出方式,你需要使用BID 价格来计算多头订单的价格。
这是一个相当常见的混乱点,经常被忽视,特别是在处理小价差时,因为ASK 和BID 价格之间没有太大的区别。有时,如果你的止损和滑点不是很紧,那么代码会工作得很好,但如果你是剥头皮或做其他需要精确的事情,那么你需要使用这些准则,在进入时获得适当的价格 而且 退出。
-
对于一个多头订单,即OP_BUY、OP_BUYSTOP 或OP_BUYLIMIT。
进入价格=ASK
出场价格(止损、止盈或OrderClose(...) )=BID
-
对于空头订单,即OP_SELL,OP_SELLSTOP,或OP_SELLLIMIT。
进场价格 =BID
出场价格(止损,止盈,或收盘(...))=ASK
-
托万
明白了,我完全明白你的意思--向Seawolf和Ruptor表示最谦卑的歉意。
在我正常关闭订单或操作我自己的隐形止损(这只是调用我正常的关闭订单功能)时,我完全知道对OP_BUYs使用Bid,对OP_SELLs使用Ask。
然而,在开单时,我总是使用进场价格作为基线来计算止损,从未出现过任何问题。我可以看到宽松的价差和严格的止损的组合如何导致无效止损的错误。
我想补充的是,有很多样本的做法和我一样。
如果我们没有严格的止损,我想我们大多数人所经历的这两种技术之间的唯一区别是在实际赚钱或亏钱方面,尽管由于这两种类型的订单 都会 "更早地 "被止损,如果点差相当稳定,它们将倾向于相互抵消。
这种逻辑合理吗?
明白了,我完全明白你的意思--对Seawolf和Ruptor表示最谦卑的歉意。
在我正常关闭订单或操作我自己的隐形止损(这只是调用我的正常关闭订单功能)时,我完全知道对OP_BUYs使用Bid,对OP_SELLs使用Ask。
然而,在开单时,我总是使用进场价格作为基线来计算止损,从未出现过任何问题。我可以看到宽松的价差和严格的止损的组合如何导致无效止损的错误。
我想补充的是,有很多样本的做法和我一样。
如果我们没有严格的止损,我想我们大多数人所经历的这两种技术之间的唯一区别是在实际赚钱或亏钱方面,尽管由于这两种类型的订单都会 "更早地 "被止损,如果点差相当稳定,它们将倾向于相互抵消。
这个逻辑合理吗?
说得好。我同意有许多其他的EA以你建议的方式进行操作。
这说明了我们根据自己的EA的工作方式,对止损采取了一些不同的看法。例如,我倾向于将我的止损设置得相当严格。因此,我通常更关心订单在哪里会失败,而不是如果它失败了,我将损失多少。但另一方面,如果你对订单关闭时你会损失(或获得)什么更感兴趣,那么以开盘价而不是收盘价做所有的计算是有意义的。只有在你的止损或止盈很紧的情况下(在几个点之内,取决于货币对),这才会成为一个问题。在这种情况下,EA将需要用MODE_STOPLEVEL做一些额外的检查(如你上面的建议),以确保你能真正完成交易。
我主要是从一个纯粹的立场出发,但我可以看到一些有效的论据,可以同时运行它。
- 托万
说得好。我同意有许多其他的EA以你建议的方式进行操作。
这说明我们根据自己的EA的工作方式,对止损采取了一些不同的看法。例如,我倾向于将我的止损设置得相当严格。因此,我通常更关心订单在哪里会失败,而不是如果它失败了,我将损失多少。但另一方面,如果你对订单关闭时你会损失(或获得)什么更感兴趣,那么以开盘价而不是收盘价做所有的计算是有意义的。只有在你的止损或止盈很紧的情况下(在几个点之内,取决于货币对),这才会成为一个问题。在这种情况下,EA将需要用MODE_STOPLEVEL做一些额外的检查(如你上面的建议),以确保你能真正完成交易。
我主要是从纯粹的立场出发,但我可以看到一些有效的论据,可以同时运行它。
- 托万
Tovan 这是否正确,因为我也得到一个130的错误
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()){
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if(OrderStopLoss() >(Ask+Point*TrailingStop)+Point)
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("Error_Modify - " ,GetLastError());
else str=StringConcatenate("\n 我的票号是", OrderTicket(), " 我的止损 设置是", DoubleToStr(Ask+Point*TrailingStop,Digits)); //新代码
}
}
}
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss() <Bid-Point*TrailingStop-Point)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("Error_Modify - " ,GetLastError());
else str=StringConcatenate("\n 我的票号是", OrderTicket(), " 我的止损设置是", DoubleToStr(Bid-Point*TrailingStop,Digits)); // 新代码
}
}
130的错误是与进场和出场有关吗--还是可能是因为滑点?
实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。
要问的问题是。
1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出?
2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出?
实际上,Seawolf和Ruptor是正确的。
你在ASK 价位输入多单,在BID价 位出场,对于卖单则相反。
//--VANGROSH ---正确但令人困惑。最好说你的长单TP或SL将在你的TP价格或SL价格==买入价时被执行。这是你看到的,当你看着你的订单碰到TP或SL时,但这与你如何计算这些价格没有关系。
由于止损或止盈是一种退出方式,你需要使用买入价 来计算多头订单的价格。
//--VANGROSH---对不起,这是不对的。你混淆了你所看到的--什么价格会触发退出,与你用来计算TP和SL价格的价格。
请仔细考虑一下这个问题。拿一个买入订单来说。你们都同意我们以ASK价格买入,没有问题。比方说,买入订单的TP是15点,而点差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。
这很简单,如果你只是想在什么价格上你的TP或SL将被击中。在一个买入订单中,以ASK价格进入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你根据ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的TP才会被击中,你的订单将以15点的利润关闭。
SL也是如此。如果你的止损点是30点,那就意味着从进场价格开始计算30点。在买入时,入市价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你真正的止损实际上是入市价(ASK)的35点,因为买入价比ASK价低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么?
我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。
你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop。
因为你希望你的TS是低于价格的X点,如果被击中,将关闭订单,这就是买入价格。
对于卖出,你使用ASK。
if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
因为你想让你的TS在价格之上X点,如果被击中,将关闭订单,这就是ASK价格。
请记住,是买入价将关闭你的买入TP和SL订单。
而ASK价格将关闭你的SELL TP和SL订单。
实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。
要问的问题是。
1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出?
2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出?
请仔细思考一下。以一个买入订单为例。你们都同意我们以ASK价格买入--没有问题。比方说,买入订单的TP是15点,而价差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。
这很简单,只要你想一想你的止损点或止赢点会在什么价格被击中。在一个 "买 "的订单中,以ASK价格输入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你从ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的止损才会被击中,你的订单将以15点的利润关闭。
SL也是如此。如果你的止损点是30点,那就意味着从进价开始的30点。在买入时,进入价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你的真正止损实际上是入市价(ASK)的35点,因为买入价比ASK价格低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么?
我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。
你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;
因为你想让你的TS低于价格X个点,如果达到这个价格将关闭订单,这就是买入价。
对于卖出,你使用ASK。
if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
因为你想让你的TS比价格高X个点,如果碰到ASK价格,就可以关闭订单。
请记住,是买入价将关闭你的买入TP和SL订单。
而ASK价格将关闭你的卖出TP和SL订单。
Vangrosh
谢谢你的建议
你能帮助我了解一下吗?
这是否正确?
我做了一个自动跟踪的EA
如果(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //放置一个TP和SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)//放置TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) //检查true
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) //如果为真则修改订单
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("/n 我的票号是", OrderTicket(), " 我的止损 设置是", DoubleToStr(Ask+Point*TrailingStop,Digits)); //新代码
}
}
}
实际上,看来你们所有人都有点糊涂了。你们中有些人把两件完全不同的事情混为一谈。
要问的问题是。
1) 买入和卖出TP和SL订单是在什么价格执行的?是买入还是卖出?
2) 我们用什么价格来计算买入和卖出的TP和SL。买入还是卖出?
请仔细考虑一下这个问题。以一个买入订单为例。你们都同意我们以卖出价买入--没有问题。比方说,买入订单的TP是15点,而价差是5点。如果你将TP设置为高于买入价15个点,那么你的TP将只有10个点,因为价差低于喊价,高于买入价。从低于入场价(ASK)5点的价格计算15点的TP是没有意义的。你必须总是从你输入订单的价格计算TP或SL。ASK代表买入,BID代表卖出。
这很简单,只要你想一想你的TP或SL会在什么价格被击中。在一个买入订单中,以ASK价格进入,你的TP会在什么价格被击中?在买入价。如果你的止损点在1.2450,你根据ASK价格设置你的止损点,那么当ASK线在1.2450时,你才刚刚开始支付价差。只有当买入线在1.2450时,你的TP才会被击中,你的订单将以15点的利润关闭。
SL也是如此。如果你的止损点是30点,那就意味着从进场价格开始计算30点。在买入时,入市价格是ASK。如果你使用买入价--30点,那么你的止损就不包括点差,所以你真正的止损实际上是入市价(ASK)的35点,因为买入价比ASK价格低5点(点差)。你会得到35点的止损,因为你的止损价格现在比你的入市价格低35点,而入市价格是买入订单的什么?
我只做了几个月,对我有帮助的是在手动交易时观察TP和SL的价格,然后对于我的第一个EA,我只是用十字线工具仔细检查我的TP和SL线,并检查一些关闭的EA订单的TP和SL价格,以确保TP和SL点是准确的。
你需要做的唯一不同的时间是追踪止损。对于买入订单,你使用买入价格。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop。
因为你希望你的TS是低于价格的X点,如果被击中,将关闭订单,这就是买入价格。
对于卖出,你使用ASK。
if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
因为你想让你的TS在价格之上X点,如果被击中,将关闭订单,这就是ASK价格。
请记住,是买入价将关闭你的买入TP和SL订单。
而ASK价格将关闭你的SELL TP和SL订单。
Vangrosh,正如我在回答Tovan时提到的,只要你清楚地知道你在做什么,你可以用两种方式做。我们远远没有混淆。
也就是说,考虑到你知道进场价格、经纪人的止损限额和价差,你可以通过使其与卖出价或买入价 "相对 "并在必要时进行调整来实现你想要的 "绝对 "止损(也不会产生130个错误!)。
顺便说一下,我更喜欢用你描述的方式。
Vangrosh,正如我在对Tovan的答复中所暗示的,只要你清楚地知道你在做什么,你就可以用两种方式来做。我们远没有感到困惑。
也就是说,考虑到你知道进场价格、经纪人的止损限额和价差,你可以通过使其与卖出价或买入价 "相对 "并在必要时进行调整来实现你想要的 "绝对 "止损(也不会产生130个错误!)。
顺便说一下,我更喜欢用你描述的方式来做。
好吧,海狼说,"经验法则......如果你在买入时进入,你就以买入价退出,如果你在买入时进入,你就以卖出价退出"。
这不是混淆了吗?我的意思不是说他糊涂了,我的意思是对我来说,他所说的背景并不清楚。如果他说的是计算退出,他的经验法则是不正确的。当我说困惑时,我并不是说你们不知道自己在做什么,或者你们不能用另一种方式来做--我真正想说的是,他们给出指示的方式让人困惑。例如,上面引用的Seawolf的话是正确的,如果他说的是MT中的订单在什么价位退出。我认为对于刚刚学习的人来说,你必须非常清楚你指的是什么背景,因为在教授TP和SL时有两个基本背景。
1)背景或观点是关注在什么价格(买入价或卖出价),一个开放订单的TP和SL将被击中--这是我需要学习的第一件事,只是为了手动交易。
2)关注的背景或观点不是上面的第1条,而是关注我们用什么价格(买入价或卖出价)来计算我们的TP和SL,如果我们希望我们的TP和SL价格是准确的,包括价差。
听着,我也是个新手,如果事情的来龙去脉不是很清楚,我和其他新手很容易就会感到困惑。
而我一开始并不知道有不止一种情况可以查看TP和SL,还有很多其他我们需要了解的东西。
cloudbreaker 写道:"Vangrosh,正如我在回答Tovan时提到的那样,只要你清楚地知道你在做什么,你就可以用两种方式做。
这就是为什么我试图在我的帖子中尽可能清楚地说明情况。像我这样刚开始学习的人并不 清楚我们在做什么,这就是为什么我们需要在适当的背景下被教导一些事情。
在我的经验中,似乎很多时候,我们的知识是假设的,而我们还没有。我们需要首先了解基本规则,然后获得一些经验。只有在那之后,我们才会知道哪些 "规则 "我们可以弯曲或偏离。
顺便说一下,我在帖子里指的不是你。我认为你的回答是迄今为止最清晰和准确的。冒着 "拍马屁 "的风险,当谈到在这个论坛上获得最清晰和准确的答案时,你的帖子是我首先寻找的一些。在这个论坛上,到目前为止,我发现只有4、5个人被证明是比较持续准确的,而且你可以说他们实际上有更多的经验在背后支持他们。
嗯,Seawolf说,"经验法则......如果你在卖出价上进入,你就以买入价退出,如果你在买入价上进入,你就以卖出价退出"。
这不是混淆了吗?我的意思不是说他糊涂了,我的意思是对我来说,他所说的背景并不清楚。如果他说的是计算退出,他的经验法则是不正确的。当我说困惑的时候,我不是说你们不知道自己在做什么,或者你们不能用另一种方式来做--我真正想说的是,他们给出指示的方式令人困惑。例如,上面引用的Seawolf的话是正确的,如果他说的是MT中的订单在什么价位退出。我认为对于刚刚学习的人来说,你必须非常清楚你指的是什么背景,因为在教授TP和SL时有两个基本背景。
1)背景或观点是关注在什么价格(买入价或卖出价),一个开放订单的TP和SL将被击中,这是我需要学习的第一件事,只是为了手动交易......
2)关注的背景或观点不是上面的第1条,而是关注我们用什么价格(买入价或卖出价)来计算我们的TP和SL,如果我们希望我们的TP和SL价格是准确的,包括价差。
听着,我也是个新手,如果事情的来龙去脉不是很清楚,我和其他新手很容易就会感到困惑。
而我一开始并不知道有不止一个背景来看待TP和SL,还有很多其他我们需要了解的东西。
cloudbreaker 写道:"Vangrosh,正如我在回答Tovan时提到的那样,只要你清楚地知道你在做什么,你就可以用两种方式做。
这就是为什么我试图在我的帖子中尽可能清楚地说明情况。像我这样刚开始学习的人并不 清楚我们在做什么,这就是为什么我们需要在适当的背景下被教导一些事情。
在我的经验中,似乎很多时候,我们的知识是假设的,而我们还没有。我们需要首先了解基本规则,然后获得一些经验。只有在那之后,我们才会知道哪些 "规则 "我们可以弯曲或偏离。
顺便说一下,我在帖子里指的不是你。我认为你的回答是迄今为止最清晰和准确的。冒着 "拍马屁 "的风险,当谈到在这个论坛上获得最清晰和准确的答案时,你的帖子是我首先寻找的一些。到目前为止,我在这个论坛上只发现了大约4或5个人,他们被证明是比较持续准确的,而且你可以说他们实际上有更多的经验在背后支持他们。
谢谢你的赞美;非常感谢。
当我说我们没有混淆时,我真的只是为自己和托万说话,因为我们似乎在一个类似的波段上运作。
如果我的帖子在任何方面听起来很唐突,请原谅;这当然不是故意的,我当时也没有那种感觉(虽然我也有这样的时候......)。
我在这个论坛上的一般做法(当我自己不寻求帮助时)是尽力帮助那些正在努力学习编程技能的人。我真的没有时间去理会那些希望一切都为他们完成的人,他们来到论坛的第一篇帖子标题是 "我需要一个成功的EA"。像你这样的人是我在这里保持兴趣的原因,而且你可能比我更了解外汇交易。
介绍一下背景--我从20世纪80年代初就开始做程序员,但几年前放弃了工作,做了一名商业直升机飞行员。然而,鉴于今年我的公司缺乏飞行,我一直在为我的一个朋友编写EA,他拥有一个刚起步的研究公司。我们采取混沌理论(而不是市场知识)的方法进行交易,并且已经代表一个知名的对冲基金对这些EA进行了非常有利的交易。我真的很喜欢这个工作!
祝你好运。
旺格罗什
谢谢你的建议
你能帮助我了解一下吗?
这是否正确?
我做了一个自动跟踪的EA
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{
如果(OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //放置一个TP和SL}。
你应该在发送订单时设置你的基础TP和SL,否则就只做一次上面的行。如果你在每一个tick上都做上面这一行
那么你也会得到OrderModify错误1,这将发生在现有的SL值相同的时候。
作为新的价格,意味着价格还没有改变--SL与之前一样。
如果((OrderOpenPrice()-Ask)>(Point*TrailingStop))//放置TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // check true
这看起来很好。我认为你所做的添加 一个点(+Point)是一个好主意。我也做过同样的事情
但在不同的地方和方式,但这是为了解决一个不同的问题,一个你可以得到的问题,当比较双打不工作,所以你添加
一个点,以确保价格大于或小于--否则你的追踪止损有时将无法执行。
剩下的似乎是正确的。
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true 修改订单
Print("Error_Modify - ",GetLastError())。
else str=StringConcatenate("/n 我的票号是", OrderTicket(), " 我的止损设置是", DoubleToStr(Ask+Point*TrailingStop,Digits); // 新代码
}
}
}
这里是MQ EA MACD Sample.mq4中的移动止损例子。
但我发现我从这段代码中得到了错误,因为已知的问题是,当像上面那样对双倍数进行比较时,你的大于>子句有时会评估为TRUE
即使价格完全相同--你打印()了价格,它们也是一样的。你可以搜索一下 "双倍数的比较 "来了解详情。有一些变通方法,比如在stdlib.mq4(在libraries文件夹中)中发现的CompareDoubles()函数,或者在不需要的地方使用NormalizeDouble(),但我发现在这种情况下,像你这样简单地添加一个点就是很好的方法。但我没有测试过你的方法,所以我不确定它是否正确,但似乎是可以的。我将在下一篇文章中给你我在EA中使用的代码。