如何解决如何在不计算最低持仓买入和最高持仓卖出的情况下平仓?
我设法获得最高的、全部的和利润..不能获得最低的.. 对于最低我们可以使用 MathMin(lowest,OrderOpenPrice()) 吗? 仍然坚持如何通过保持最高(卖出)和最低(买入)未平仓头寸来平仓
assign_column_number
double HighestOpenPrice(int m)
{
double highest=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TradES))
continue;
if(OrderType()==m && m==0 && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
highest=MathMax(highest,OrderOpenPrice());
if(OrderType()==m && m==1 && OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
highest=MathMax(highest,OrderOpenPrice());
}
return(highest);
}
double TotalOpenProfit(int direction)
{
double result = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,MODE_TradES)) continue;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if((direction < 0 && OrderType() == OP_BUY) || (direction > 0 && OrderType() == OP_SELL)) continue;
result += OrderProfit()+OrderSwap()+OrderCommission();
}
return(result);
}
解决方法
您可以在不迭代所有订单的情况下执行此操作。如果在您的策略中,最新订单在买入的情况下具有最高价格或在卖出的情况下具有最低价格,您可以简单地分配发送新订单时的票号到全局变量。例如:
//Global variables
int lastSellTicket = 0;
int lastBuyTicket = 0;
和订单发送案例(例如销售)
int ticket = OrderSend(Symbol(),OP_SELL,lot,Bid,"Sell",magic);
if(ticket > 0) {
lastSellTicket = ticket;
}
else{
Print("Error send order. Error code: ",GetLastError());
}
如果不是最新的订单(而是最高/最低价),您可以做同样的事情,但在发送订单之前,使用最高/最低OrderOpenPrice()
和当前开仓价之间的比较。
示例(购买):
double lastBuyOpenPrice = -1;
if(OrderSelect(lastBuyTicket,SELECT_BY_TICKET)){
lastBuyOpenPrice = OrderOpenPrice();
}
int ticket = OrderSend(Symbol(),OP_BUY,Ask,"Buy",magic);
if(ticket > 0 ) {
if(Ask > lastBuyOpenPrice ){ //If current open price is greater than the latest one
lastBuyTicket = ticket;
}
}
else{
Print("Error send order. Error code: ",GetLastError());
}
然后,在您的 TotalOpenProfit
和 CustomCloseAll
函数中添加逻辑以避免计算/关闭这些最新订单:
if(OrderTicket() != lastSellTicket || OrderTicket() != lastBuyTicket){
//your logic...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。