关闭半数地段。 - 页 18 1...111213141516171819 新评论 Dominic Gilbert 2013.08.12 13:05 #171 好的(更新!)所以基本上,我已经摆脱了当第二个OrderClose()被调用时,"一半的一半的一半等 "的连续平仓现象(所有蓝色的if语句在这里--显然这是好的!)。Close_Half_Order_Buy==True "也不起作用...。 我希望有人能帮助我完成这个任务 :) ( 我已经删除了很多 "打印 "的内容,以使代码的内容更加清晰。) //+--------------------------------------------------------------------------------------------------+ //| Close OP_BUY Half lots @ 1:1 Function | //+--------------------------------------------------------------------------------------------------+ void CloseHalfOrder() { static datetime partclosedonce; static datetime partclosedtwice; double minLot=MarketInfo(Symbol(),MODE_MINLOT); double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP); double half=MathFloor(OrderLots()/2/lotStep)*lotStep; double EMA_Bar = iClose(NULL, PERIOD_H1, 1); double EMA_MA = iMA(Symbol(),60,21,0,1,0,0); for(int c=OrdersTotal()-1; c>=0; c--) { if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true) double FirstTarget_Buy = OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2); Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits)); if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) if(OrderLots()>minLot) if(OrderOpenTime() != partclosedonce) { if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy+(Point/2)) { bool Close_Half_Order_Buy=OrderClose(OrderTicket(),half,Bid,5,Blue); if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError()); } } if(Close_Half_Order_Buy==True && OrderOpenPrice() > OrderStopLoss()) { MoveToBreakEven(); } if(Close_Half_Order_Buy==True) { partclosedonce = OrderOpenTime(); } if(partclosedonce != partclosedtwice && OrderOpenTime() != partclosedtwice) // I dont want this to run UNLESS the first OrderClose() is successful. { if(OrderType()==OP_BUY && EMA_Bar < EMA_MA) { bool EMA_Buy_Close=OrderClose(OrderTicket(),half,Bid,5,CLR_NONE); if(EMA_Buy_Close!=TRUE)Print("EMA_Buy_Close Last Error = ",GetLastError()); if(EMA_Buy_Close==True)partclosedtwice = OrderOpenTime(); } } } } Dominic Gilbert 2013.08.13 13:42 #172 有没有人? GreenMoney 2013.08.13 19:23 #173 DomGilberto: 好的(更新!)所以基本上,我已经摆脱了当第二个OrderClose()被调用时(所有蓝色的if语句所在的地方--显然这是好的!)在手数上连续关闭 "一半一半等等 "的现象。Close_Half_Order_Buy==True "也不起作用...。 我希望有人能帮助我完成这个任务 :) 下面的代码可以编译(通过声明MagicNumber变量并注释掉MoveToBreakEven()函数),但 不是 测试了。 //+--------------------------------------------------------------------------------------------------+ //| Close OP_BUY Half lots @ 1:1 Function | //+--------------------------------------------------------------------------------------------------+ void CloseHalfOrder() { static bool FirstBuyTarget_hit = false, SecondBuyTarget_hit = false; int ct = 0; double minLot = MarketInfo(Symbol(),MODE_MINLOT); double lotStep = MarketInfo(Symbol(),MODE_LOTSTEP); double EMA_Bar = iClose(NULL, PERIOD_H1, 1); double EMA_MA = iMA(Symbol(),60,21,0,1,0,0); for(int c = OrdersTotal() - 1; c >= 0; c--) if (OrderSelect(c,SELECT_BY_POS)) if (OrderSymbol() == Symbol() && OrderType() <= OP_SELL) if (OrderMagicNumber() == MagicNumber) { double half=MathFloor(OrderLots()/2/lotStep)*lotStep; double FirstTarget_Buy = OrderOpenPrice() + ((OrderTakeProfit() - OrderOpenPrice()) / 2); Print ("FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy,Digits)); ct++; if (!FirstBuyTarget_hit) if (OrderType() == OP_BUY && Bid >= FirstTarget_Buy + (Point/2)) { if (OrderClose(OrderTicket(),half,Bid,5,Blue)) { MoveToBreakEven(); FirstBuyTarget_hit = true; break; } else Print("Close_Half_Order_Buy Last Error = ", GetLastError()); } if (FirstBuyTarget_hit && !SecondBuyTarget_hit) if (OrderType() == OP_BUY && EMA_Bar < EMA_MA) { if (OrderClose(OrderTicket(),half,Bid,5,CLR_NONE)) SecondBuyTarget_hit = true; else Print("EMA_Buy_Close Last Error = ",GetLastError()); } break; } if (ct == 0) { FirstBuyTarget_hit = false; SecondBuyTarget_hit = false; } } 上述代码假设每个货币对 只下一个订单。 Dominic Gilbert 2013.08.13 21:27 #174 非常感谢你的帮助!我真的很感激 :) 你能不能帮我做最后一件事;目前我有一个固定的1:2的获利 目标(硬TP)。实际上,我想把这个从订单中移除。然而,正如你在上面看到的,相关的OrderClose()函数正在使用OrderTakeProfit()来计算OrderClose()函数应该在哪里关闭。 我的问题是,是否有办法存储OrderTakeProfit()的价格,但不是让它固定在订单中,而是使用OrderClose()@OrderTakeProfit()的价格来平仓一组手数?原因是有时我的交易会有巨大的收益,但由于我把OrderTakeProfit()固定在开仓单中,所有的手都会在那里平仓,而我只想在那个出场价格上部分平仓。我对大的运行者使用追踪止损......希望这有意义? 就这样吧!然后我就完成了,尘埃落定!终于完成了! 更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半的东西。这和我之前使用静态数据时的情况差不多?有什么想法吗? Dominic Gilbert 2013.08.14 20:27 #175 (感觉我已经用尽了这个主题) 我有上面的最后两个问题,这就完成了?我需要知道的是,我怎样才能存储OrderTakeProfit()的价格,这样当我修改它时,我仍然可以使用这个确切的价格来做OrderClose()?一个静态的双倍数可以吗? GreenMoney 2013.08.15 01:21 #176 DomGilberto: 更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半,后关闭另一半。这和我之前使用静态数据时的情况是一样的?有什么想法吗? 发表你对上述代码所做的任何修改,并发表日志/日记条目(或屏幕截图)。 Tjipke de Vries 2013.08.15 06:07 #177 DomGilberto:非常感谢你的帮助!我真的很感激 :) 你能不能帮我做最后一件事;目前我有一个固定的1:2的获利目标(硬TP)。实际上,我想把这个从订单中移除。然而,正如你在上面看到的,相关的OrderClose()函数正在使用OrderTakeProfit()来计算OrderClose()函数应该关闭的位置。 我的问题是,是否有办法存储OrderTakeProfit()的价格,但不是让它固定在订单中,而是使用OrderClose()@OrderTakeProfit()的价格来关闭一个设定的手数?原因是有时我的交易会有巨大的收益,但因为我把OrderTakeProfit()固定在开仓单中,所有的手都会在那里平仓,而我只想在那个出场价格上部分平仓。我对大的运行者使用追踪止损......希望这有意义? 就这样吧!然后我就完成了,尘埃落定!终于完成了!更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半的东西。这和我之前使用静态数据时的情况差不多?有什么想法吗? 将你的止盈设置为一个巨大的水平,你仍然可以使用你的 相关OrderClose()函数 ,这些函数使用OrderTakeProfit()来计算OrderClose()函数应该在哪里 关闭。 Dominic Gilbert 2013.08.15 09:20 #178 deVries - 从字面上看,我今天早上才发现...开始把另一个修改放进去......然后意识到我应该在第一个订单下达时就把它改掉...... 13 - 我根本没有对它做任何修改。它的工作方式与我发布的代码相同,但你使用的是静态的bool,而不是静态的datetime?这是我在运行回测时看到的唯一真正的区别?除此之外,第二个OrderClose()函数 带有移动平均线和低于它的收盘价;如果它在另一个orderclose()之前先出现,它仍然会关闭? GreenMoney 2013.08.15 13:45 #179 DomGilberto: 十三--我根本没有对它做任何改动。它的工作方式与我发布的代码相同,但你使用的是静态的bool,而不是静态的datetime?这是我在运行回测时看到的唯一真正的区别?除此之外,第二个OrderClose()函数有移动平均线和低于它的收盘价;如果它在另一个orderclose()之前先出现,它仍然会关闭? 由于你使用了问号,我不确定你是在问我还是告诉我高亮部分。 如果测试器显示第二个部分收盘发生在第一个之前,请从策略测试器 生成的日志/日记中发布你的交易结果,显示第二个部分收盘(移动平均线)发生在 第一个部分收盘之前。 Dominic Gilbert 2013.08.16 11:04 #180 Thirteen: 由于你使用了问号,我不确定你是在问我还是告诉我高亮部分。 如果测试器显示第二次部分收盘发生在第一次之前,请将你的交易结果从策略测试器生成的日志/日记中贴出来,显示第二次部分收盘(移动平均数)发生在 第一次部分收盘之前。 谢谢你给我回信,我今天晚些时候会把日志贴出来 :) 1...111213141516171819 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好的(更新!)所以基本上,我已经摆脱了当第二个OrderClose()被调用时,"一半的一半的一半等 "的连续平仓现象(所有蓝色的if语句在这里--显然这是好的!)。Close_Half_Order_Buy==True "也不起作用...。
我希望有人能帮助我完成这个任务 :)
( 我已经删除了很多 "打印 "的内容,以使代码的内容更加清晰。)
好的(更新!)所以基本上,我已经摆脱了当第二个OrderClose()被调用时(所有蓝色的if语句所在的地方--显然这是好的!)在手数上连续关闭 "一半一半等等 "的现象。Close_Half_Order_Buy==True "也不起作用...。
我希望有人能帮助我完成这个任务 :)
下面的代码可以编译(通过声明MagicNumber变量并注释掉MoveToBreakEven()函数),但 不是 测试了。
上述代码假设每个货币对 只下一个订单。
非常感谢你的帮助!我真的很感激 :)
你能不能帮我做最后一件事;目前我有一个固定的1:2的获利 目标(硬TP)。实际上,我想把这个从订单中移除。然而,正如你在上面看到的,相关的OrderClose()函数正在使用OrderTakeProfit()来计算OrderClose()函数应该在哪里关闭。
我的问题是,是否有办法存储OrderTakeProfit()的价格,但不是让它固定在订单中,而是使用OrderClose()@OrderTakeProfit()的价格来平仓一组手数?原因是有时我的交易会有巨大的收益,但由于我把OrderTakeProfit()固定在开仓单中,所有的手都会在那里平仓,而我只想在那个出场价格上部分平仓。我对大的运行者使用追踪止损......希望这有意义?
就这样吧!然后我就完成了,尘埃落定!终于完成了!
更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半的东西。这和我之前使用静态数据时的情况差不多?有什么想法吗?
我有上面的最后两个问题,这就完成了?我需要知道的是,我怎样才能存储OrderTakeProfit()的价格,这样当我修改它时,我仍然可以使用这个确切的价格来做OrderClose()?一个静态的双倍数可以吗?
更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半,后关闭另一半。这和我之前使用静态数据时的情况是一样的?有什么想法吗?
发表你对上述代码所做的任何修改,并发表日志/日记条目(或屏幕截图)。
非常感谢你的帮助!我真的很感激 :)
你能不能帮我做最后一件事;目前我有一个固定的1:2的获利目标(硬TP)。实际上,我想把这个从订单中移除。然而,正如你在上面看到的,相关的OrderClose()函数正在使用OrderTakeProfit()来计算OrderClose()函数应该关闭的位置。
我的问题是,是否有办法存储OrderTakeProfit()的价格,但不是让它固定在订单中,而是使用OrderClose()@OrderTakeProfit()的价格来关闭一个设定的手数?原因是有时我的交易会有巨大的收益,但因为我把OrderTakeProfit()固定在开仓单中,所有的手都会在那里平仓,而我只想在那个出场价格上部分平仓。我对大的运行者使用追踪止损......希望这有意义?
就这样吧!然后我就完成了,尘埃落定!终于完成了!
更新:上面的代码是一个不错的写法。我玩了一会儿,但它没有按照正确的顺序关闭。它仍然是先关闭一半的东西。这和我之前使用静态数据时的情况差不多?有什么想法吗?
将你的止盈设置为一个巨大的水平,你仍然可以使用你的 相关OrderClose()函数 ,这些函数使用OrderTakeProfit()来计算OrderClose()函数应该在哪里 关闭。
13 - 我根本没有对它做任何修改。它的工作方式与我发布的代码相同,但你使用的是静态的bool,而不是静态的datetime?这是我在运行回测时看到的唯一真正的区别?除此之外,第二个OrderClose()函数 带有移动平均线和低于它的收盘价;如果它在另一个orderclose()之前先出现,它仍然会关闭?
十三--我根本没有对它做任何改动。它的工作方式与我发布的代码相同,但你使用的是静态的bool,而不是静态的datetime?这是我在运行回测时看到的唯一真正的区别?除此之外,第二个OrderClose()函数有移动平均线和低于它的收盘价;如果它在另一个orderclose()之前先出现,它仍然会关闭?
由于你使用了问号,我不确定你是在问我还是告诉我高亮部分。 如果测试器显示第二次部分收盘发生在第一次之前,请将你的交易结果从策略测试器生成的日志/日记中贴出来,显示第二次部分收盘(移动平均数)发生在 第一次部分收盘之前。
谢谢你给我回信,我今天晚些时候会把日志贴出来 :)