该程序是一个函数,命名为f0_0。该函数主要完成以下几个任务:

  1. 刷新交易品种的报价;
  2. 关闭已有的订单;
  3. 删除已有的未成交的挂单。

具体来说,该函数首先调用RefreshRates()函数刷新交易品种的报价。然后,它通过OrdersTotal()函数获取已有订单的数量,如果订单数量大于0,则进入第一个for循环。该循环从最新订单开始遍历,直到最远订单为止。在循环中,程序通过OrderSelect()函数选择订单,然后判断该订单是否属于当前交易品种(如果AllSymbols为FALSE,则只处理当前交易品种的订单),以及是否属于当前EA(如果AllOrders为FALSE,则只处理当前EA的订单)。如果订单符合条件,则通过OrderType()函数获取该订单的类型(买单或卖单),并进入switch语句。

在switch语句中,如果订单类型为OP_BUY(即买单),则根据当前趋势模式(TrendingMode)来判断是否需要设置止损价。如果需要,则判断当前订单的止损价是否大于开仓价。如果是,则退出switch语句;否则,通过OrderClose()函数关闭该订单,并计算该订单的盈亏、佣金和利息,并将其加到Ld_8变量中。如果订单类型为OP_SELL(即卖单),则同样根据当前趋势模式来判断是否需要设置止损价,并判断当前订单的止损价是否小于开仓价。如果是,则退出switch语句;否则,通过OrderClose()函数关闭该订单,并计算该订单的盈亏、佣金和利息,并将其加到Ld_16变量中。如果订单类型不是买单或卖单,则判断Gi_488变量是否小于0。如果是,则通过GetLastError()函数获取错误代码,并调用f0_14()函数输出错误信息;否则,通过Sleep()函数等待一段时间后再次调用RefreshRates()函数刷新报价。

接着,程序再次调用OrdersTotal()函数获取已有订单的数量,如果订单数量大于0,则进入第二个for循环。该循环与第一个循环类似,不同之处在于它只处理未成交的挂单(包括买入停止单、买入限价单、卖出停止单和卖出限价单),并通过OrderDelete()函数删除这些挂单。如果订单类型不是挂单,则同样判断Gi_488变量是否小于0,如果是,则通过GetLastError()函数获取错误代码,并调用f0_14()函数输出错误信息;否则,通过Sleep()函数等待一段时间后再次调用RefreshRates()函数刷新报价

void f0_0 int cmd_0; RefreshRates; int order_total_4 = OrdersTotal; double Ld_8 = 0; double Ld_16 = 0; if order_total_4 0 如果有订单 for G_pos_320 = order_total_4 - 1; G_pos_320 = 0;

原文地址: https://www.cveoy.top/t/topic/fHyF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录