只在盈利目标时关闭盈利的交易 - 页 3 1234 新评论 Keith Watford 2013.07.30 00:22 #21 af1: Hi GumRai, thanks for your time. I've already tried with your changes, but orders keep closing at 1. In other words, profitable orders are not waiting to reach 25. 甚至使用DeVries和Raptor之前提供的那行代码? if(CloseAllNow) CloseAll(); if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit(); if(BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll(); if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit(); if(ClosePendingOnly) ClosePendingOrdersOnly(); 希望你没有改变这一行,你在考虑它 if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit(); 如果你确实把它改成了25.00,那么你将会有所有1美元以上的盈利交易被关闭 af1 2013.07.30 05:03 #22 GumRai: 甚至使用DeVries和Raptor之前提供的那行代码? 希望你没有改变这一行,你在考虑它 如果你确实把它改成了25.00,那么你将会有所有1美元以上的盈利交易被关闭 我已经尝试了所有的建议,但还是不能正确关闭。 Keith Watford 2013.07.30 06:42 #23 af1: 我已经尝试了所有的建议,但还是不能正确关闭。 也许你可以展示一下你目前所使用的完整代码 af1 2013.07.30 09:05 #24 GumRai: 也许你可以展示一下你目前正在使用的完整代码 //|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //| Close //| Last Updated 12-12-2006 10:00pm //|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #define NL "\n" extern int ProfitTarget = 25; // closes all orders once Float hits this $ amount extern bool CloseAllNow = false; // closes all orders now extern bool CloseProfitableTradesOnly = true; // closes only profitable trades extern double ProftableTradeAmount = 1; // Only trades above this amount close out extern bool ClosePendingOnly = false; // closes pending orders only extern bool UseAlerts = false; //+-------------+ //| Custom init | //|-------------+ int init() { } //+----------------+ //| Custom DE-init | //+----------------+ int deinit() { } //+------------------------------------------------------------------------+ //| Closes everything //+------------------------------------------------------------------------+ void CloseAll() { int i; bool result = false; while(OrdersTotal()>0) { // Close open positions first to lock in profit/loss for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS)==false) continue; result = false; if ( OrderType() == OP_BUY) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 15, Red ); if ( OrderType() == OP_SELL) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 15, Red ); if (UseAlerts) PlaySound("alert.wav"); } for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS)==false) continue; result = false; if ( OrderType()== OP_BUYSTOP) result = OrderDelete( OrderTicket() ); if ( OrderType()== OP_SELLSTOP) result = OrderDelete( OrderTicket() ); if ( OrderType()== OP_BUYLIMIT) result = OrderDelete( OrderTicket() ); if ( OrderType()== OP_SELLLIMIT) result = OrderDelete( OrderTicket() ); if (UseAlerts) PlaySound("alert.wav"); } Sleep(1000); } } //+------------------------------------------------------------------------+ //| cancels all orders that are in profit //+------------------------------------------------------------------------+ void CloseAllinProfit() { for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS); bool result = false; if ( OrderType() == OP_BUY && OrderProfit()+OrderSwap()>ProftableTradeAmount) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red ); if ( OrderType() == OP_SELL && OrderProfit()+OrderSwap()>ProftableTradeAmount) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); if (UseAlerts) PlaySound("alert.wav"); } return; } //+------------------------------------------------------------------------+ //| cancels all pending orders //+------------------------------------------------------------------------+ void ClosePendingOrdersOnly() { for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS); bool result = false; if ( OrderType()== OP_BUYSTOP) result = OrderDelete( OrderTicket() ); if ( OrderType()== OP_SELLSTOP) result = OrderDelete( OrderTicket() ); } return; } //+-----------+ //| Main | //+-----------+ int start() { int OrdersBUY; int OrdersSELL; double BuyLots, SellLots, BuyProfit, SellProfit; //+------------------------------------------------------------------+ // Determine last order price | //-------------------------------------------------------------------+ for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderType()==OP_BUY) { OrdersBUY++; BuyLots += OrderLots(); BuyProfit += OrderProfit() + OrderCommission() + OrderSwap(); } if(OrderType()==OP_SELL) { OrdersSELL++; SellLots += OrderLots(); SellProfit += OrderProfit() + OrderCommission() + OrderSwap(); } } if(CloseAllNow) CloseAll(); if(CloseProfitableTradesOnly && ProfitTarget == 0.0) CloseAllinProfit(); if(BuyProfit+SellProfit >= ProfitTarget && !CloseProfitableTradesOnly) CloseAll(); if(CloseProfitableTradesOnly && BuyProfit+SellProfit >= ProfitTarget) CloseAllinProfit(); if(ClosePendingOnly) ClosePendingOrdersOnly(); Comment(" Comments Last Update 12-12-2006 10:00pm", NL, " Buys ", OrdersBUY, NL, " BuyLots ", BuyLots, NL, " Sells ", OrdersSELL, NL, " SellLots ", SellLots, NL, " Balance ", AccountBalance(), NL, " Equity ", AccountEquity(), NL, " Margin ", AccountMargin(), NL, " MarginPercent ", MathRound((AccountEquity()/AccountMargin())*100), NL, " Current Time is ",TimeHour(CurTime()),":",TimeMinute(CurTime()),".",TimeSeconds(CurTime())); } // start() Keith Watford 2013.07.30 11:17 #25 请回看我的帖子 https://forum.mql4.com/56959/page2#822980 你不是只把盈利的交易加起来。你是在计算净利润或亏损 af1 2013.07.31 19:14 #26 GumRai: 请回看我的帖子 https://forum.mql4.com/56959/page2#822980 你不是只把盈利的交易加起来。你是在计算净利润或亏损 GumRai,我已经按照Raptor和你的建议修改了代码。 https://www.mql5.com/en/forum/146091 https://www.mql5.com/en/forum/146091/page2#822980 现在看来,关闭是正确的。谢谢你! 还有一件事。如果我想只计算盈利的买入,或只计算盈利的卖出交易,而不是计算所有盈利的交易,我应该怎么改? 我在想,这个改动只计算买入量,但我不确定。这样做对吗? 从这里开始。 if(OrderType()==OP_SELL) { OrdersSELL++; SellLots += OrderLots(); ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap(); if(ThisTradeProfit>0) BuyProfit += ThisTradeProfit; } 到这一点。 //if(OrderType()==OP_SELL) { //OrdersSELL++; //SellLots += OrderLots(); //ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap(); //if(ThisTradeProfit>0) //BuyProfit += ThisTradeProfit; } Keith Watford 2013.07.31 21:23 #27 我想你可以在输入参数 中添加2个外部bool,称为 "BuyTradesOnly "和"SellTradesOnly",最初都设置为false 。 然后if(OrderType()==OP_SELL && BuyTradesOnly == false) { OrdersSELL++; SellLots += OrderLots(); ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap(); if(ThisTradeProfit>0) BuyProfit += ThisTradeProfit; } af1 2013.08.01 07:36 #28 GumRai: 我想你可以在输入参数中添加2个外部bool,称为 "BuyTradesOnly "和"SellTradesOnly",最初都设置为假 。 然后 我没有添加2个外部bool,我只是把它改为关闭 "只买入订单" for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderType()==OP_BUY) { OrdersBUY++; BuyLots += OrderLots(); double ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap(); if(ThisTradeProfit>0) BuyProfit += ThisTradeProfit; } 并将其改为关闭 "只卖出订单" for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderType()==OP_SELL) { OrdersSELL++; SellLots += OrderLots(); double ThisTradeProfit=OrderProfit() + OrderCommission() + OrderSwap(); if(ThisTradeProfit>0) BuyProfit += ThisTradeProfit; } 所以现在我有两个EA。一个用于平仓买入,一个用于平仓卖出。这对我来说很好。 我在两个账户上进行了测试,模拟账户和真实账户。在模拟账户上运行良好,但在真实账户上,一旦达到盈利目标,它将开始平仓,但当剩余的订单降到盈利目标以下时,它将停止平仓。如果在平仓的时候价格在变化,就会发生这种情况。因此,它倾向于留下盈利的订单,而不是将它们全部关闭(盈利的订单)。 我读了RaptorUK的这个帖子https://www.mql5.com/en/forum/139654。这是类似的东西,但我真的不知道什么是这个问题的最佳解决方案。 Simon Gniadkowski 2013.08.01 07:56 #29 af1: 我读了RaptorUK的这个帖子https://www.mql5.com/en/forum/139654。是这样的,但我真的不知道什么才是解决这个问题的最好办法。 该解决方案在该主题中给出 ......这就是我创建它的原因。 循环中的倒数不是向上。 af1 2013.08.01 08:04 #30 RaptorUK: 解决办法在主题中给出了......这就是我创建它的原因。 循环中的倒数,而不是上升。 好的,Raptor,我会尝试做这个循环,但在做之前,如果我只是改变一下 从这个。 } Sleep(1000); } 到这个。 } Sleep(5000); RefreshRates(); continue; } 这样做能解决问题吗? 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Hi GumRai, thanks for your time. I've already tried with your changes, but orders keep closing at 1. In other words, profitable orders are not waiting to reach 25.
甚至使用DeVries和Raptor之前提供的那行代码?
希望你没有改变这一行,你在考虑它
如果你确实把它改成了25.00,那么你将会有所有1美元以上的盈利交易被关闭
甚至使用DeVries和Raptor之前提供的那行代码?
希望你没有改变这一行,你在考虑它
如果你确实把它改成了25.00,那么你将会有所有1美元以上的盈利交易被关闭
我已经尝试了所有的建议,但还是不能正确关闭。
我已经尝试了所有的建议,但还是不能正确关闭。
也许你可以展示一下你目前所使用的完整代码
也许你可以展示一下你目前正在使用的完整代码
请回看我的帖子
https://forum.mql4.com/56959/page2#822980
你不是只把盈利的交易加起来。你是在计算净利润或亏损
请回看我的帖子
https://forum.mql4.com/56959/page2#822980
你不是只把盈利的交易加起来。你是在计算净利润或亏损
GumRai,我已经按照Raptor和你的建议修改了代码。
https://www.mql5.com/en/forum/146091
https://www.mql5.com/en/forum/146091/page2#822980
现在看来,关闭是正确的。谢谢你!
还有一件事。如果我想只计算盈利的买入,或只计算盈利的卖出交易,而不是计算所有盈利的交易,我应该怎么改?
我在想,这个改动只计算买入量,但我不确定。这样做对吗?
从这里开始。
到这一点。
我想你可以在输入参数 中添加2个外部bool,称为 "BuyTradesOnly "和"SellTradesOnly",最初都设置为false 。
然后
我想你可以在输入参数中添加2个外部bool,称为 "BuyTradesOnly "和"SellTradesOnly",最初都设置为假 。
然后
我没有添加2个外部bool,我只是把它改为关闭 "只买入订单"
并将其改为关闭 "只卖出订单"
所以现在我有两个EA。一个用于平仓买入,一个用于平仓卖出。这对我来说很好。
我在两个账户上进行了测试,模拟账户和真实账户。在模拟账户上运行良好,但在真实账户上,一旦达到盈利目标,它将开始平仓,但当剩余的订单降到盈利目标以下时,它将停止平仓。如果在平仓的时候价格在变化,就会发生这种情况。因此,它倾向于留下盈利的订单,而不是将它们全部关闭(盈利的订单)。
我读了RaptorUK的这个帖子https://www.mql5.com/en/forum/139654。这是类似的东西,但我真的不知道什么是这个问题的最佳解决方案。
我读了RaptorUK的这个帖子https://www.mql5.com/en/forum/139654。是这样的,但我真的不知道什么才是解决这个问题的最好办法。
解决办法在主题中给出了......这就是我创建它的原因。 循环中的倒数,而不是上升。
好的,Raptor,我会尝试做这个循环,但在做之前,如果我只是改变一下
从这个。
到这个。
这样做能解决问题吗?