多单或空单到达指定盈利数值全部平仓

楼主  收藏   举报   帖子创建时间:  2019-05-05 14:38 回复:0 关注量:875
该函数执行多单或空单到达指定盈利数值全部平仓。

  1. extern double yingli=0;//设定盈利值

  2. //+------------------------------------------------------------------+
  3. //| Expert initialization function                                   |
  4. //+------------------------------------------------------------------+
  5. int onInit()
  6. {
  7. //---

  8. //---
  9. return(INIT_SUCCEEDED);
  10. }
  11. //+------------------------------------------------------------------+
  12. //| Expert deinitialization function                                 |
  13. //+------------------------------------------------------------------+
  14. void onDeinit(const int reason)
  15. {
  16. //---

  17. }
  18. //+------------------------------------------------------------------+
  19. //| Expert tick function                                             |
  20. //+------------------------------------------------------------------+
  21. void onTick()
  22. {
  23. //---

  24. if (Profit_total_buy() >= yingli)   iCloseOrders("Buy");
  25. if (Profit_total_sell()>= yingli)   iCloseOrders("Sell");

  26. }
  27. //+------------------------------------------------------------------+

  28. //---
  29. double Profit_total_buy()
  30. {
  31. double Profit=0;
  32. for(int i=0;i<=OrdersTotal();i++)
  33. {
  34. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  35. if( OrderSymbol()!=Symbol())                         continue;
  36. if(OrderType()==OP_BUY)
  37. Profit=Profit+OrderProfit();
  38. }
  39. return(Profit);
  40. }

  41. //---
  42. double Profit_total_sell()
  43. {
  44. double Profit=0;
  45. for(int i=0;i<=OrdersTotal();i++)
  46. {
  47. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  48. if( OrderSymbol()!=Symbol())                         continue;
  49. if(OrderType()==OP_SELL)
  50. Profit=Profit+OrderProfit();
  51. }
  52. return(Profit);
  53. }

  54. //---
  55. void iCloseOrders(string myType)
  56. {
  57. if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)==false) return;
  58. //-----------------------
  59. if (myType=="Buy")//平掉所有多头订单
  60. {
  61. for(int i=OrdersTotal()-1;i>=0;i--)
  62. {
  63. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  64. if( OrderSymbol()!=Symbol()) continue;
  65. //--- check order type
  66. if(OrderType()==OP_BUY)
  67. {
  68. if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,White))
  69. Print("OrderClose error ",GetLastError());
  70. continue;
  71. }
  72. }
  73. }
  74. //-----------------------
  75. if (myType=="Sell")//平掉所有空头订单
  76. {
  77. for(int i=OrdersTotal()-1;i>=0;i--)
  78. {
  79. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  80. if( OrderSymbol()!=Symbol()) continue;
  81. //--- check order type
  82. if(OrderType()==OP_SELL)
  83. {
  84. if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Red))
  85. Print("OrderClose error ",GetLastError());
  86. continue;
  87. }
  88. }
  89. }
  90. }
打赏