I forgot:
double Dist = 1000000.0。
请谁能帮助我?
1.这只是你代码的一部分,请给我们看一下函数CheckFirstOP()的例子。
2.for 循环是递增的。如果在循环中关闭订单,这将无法正常工作,请看 ->https://www.mql5.com/en/forum/119840。
3.你的变量命名规则......不是很好。
4.请使用SRC按钮来发布你的代码,这样它就能保留格式。像这样读你的代码非常困难。
1.这只是你代码的一部分,请给我们看一下函数CheckFirstOP()的例子。
2.for 循环是递增的。如果在循环中关闭订单,这将无法正常工作,请参见->https://www.mql5.com/en/forum/119840。
3.你的变量命名规则......不是那么好。
4.请使用SRC按钮来发布你的代码,这样它就能保留格式。像这样读你的代码是很困难的。
double Dist=1000000.0; if ( CheckFirstOP(OP_BUY) > 1) { for ( l_pos_44 = 0; l_pos_44 < OrdersTotal(); l_pos_44++) { OrderSelect( l_pos_44, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) continue; double Price = OrderOpenPrice(); if (NormalizeDouble(MathAbs(Bid - Price), Digits) > NormalizeDouble( Dist, Digits)) { Dist = MathAbs(Bid - Price); int Ticket = OrderTicket(); double Lot = OrderLots(); OrderClose( Ticket, Lot, OrderClosePrice(), 3); } } } int CheckFirstOP(int a_cmd_0) { int l_count_4 = 0; for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { if (OrderSelect( l_pos_8, SELECT_BY_POS)) { if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) { if (OrderType() == a_cmd_0) { l_count_4++; break; } } } } return ( l_count_4); }
my fault...i'm very new to this stuf...
3.你的变量命名惯例......不怎么好。
看起来像一个反编译器的命名惯例...
"他是这个东西的新手"
看起来像一个反编译器的名称惯例......
"他是这方面的新手"
可能是的......我想修改我买的一个EA......他们也给我发了代码(他们说是错误的)......现在我明白了这个奇怪的命名法的原因......正如我说的,我是个新手(刚刚在这个网站上读了MQL4的书),至少在开始时不想修改很多东西,所以我让这些名字按照我发现它们的样子。
并没有解决我的问题...
2.for 循环是递增的。如果在循环中关闭订单,这将无法正常工作,请参见 ->https://www.mql5.com/en/forum/119840。
在MQL4的书中没有提到(我想)......反正我试过了。
if ( CheckFirstOP(OP_BUY) > 1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { OrderSelect( i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) continue; double Price = OrderOpenPrice(); if (NormalizeDouble(MathAbs(Bid - Price), Digits) > NormalizeDouble( Dist, Digits)) { Dist = MathAbs(Bid - Price); int Ticket = OrderTicket(); double Lot = OrderLots(); OrderClose( Ticket, Lot, OrderClosePrice(), 3); } } }
it doesn't work, don't know why
现在只需在这一行确定
是的,我试过了,它什么也没改变......这个程序很奇怪:)写一个简单的关闭指令并不难(我想)......
it doesn't work, don't know why当你关闭订单索引5,订单索引6变成索引5,7变成6,等等。 计算起来,你会错过其他每一个未结订单。
向大家问好。我创建了一个代码(修改了其他代码)用于关闭市场订单。
int l_pos_44 = 0;
如果(CheckFirstOP(OP_BUY) > 1) {
for (l_pos_44 = 0; l_pos_44 < OrdersTotal(); l_pos_44++) {
OrderSelect(l_pos_44, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) 继续。
double Price = OrderOpenPrice();
如果(NormalizeDouble(MathAbs(Bid - Price), Digits) < NormalizeDouble(Dist, Digits) ) {
Dist = MathAbs(Bid - Price);
int Ticket = OrderTicket();
double Lot = OrderLots();
OrderClose(Ticket, Lot, Bid, 3)。
}
}
(关闭卖出头寸的代码相同(显然用OP_SELL变量而不是OP_BUY))
int CheckFirstOP(int a_cmd_0) {
int l_count_4 = 0;
for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) {
如果(OrderSelect(l_pos_8, SELECT_BY_POS)) {
如果(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() ) {
如果(OrderType() == a_cmd_0){
l_count_4++;
休息。
}
}
}
}
返回(l_count_4)。
}
我需要一个代码来关闭多头或空头头寸,当有超过1个类型的头寸打开时......所以总共要保留2个头寸(1个买入和1个卖出)......我还需要保留最近打开的头寸,即在这种情况下,买入头寸的打开价格较高,卖出头寸的打开价格较低的那个。问题是,代码没有关闭头寸......没有关闭任何头寸。
当:"if (CheckFirstOP(OP_BUY) == 1) "时,代码会在第一个仓位开仓后立即关闭......也就是说,在买入和卖出订单 开仓后,它们会在下一个交易日关闭。而当:"if (CheckFirstOP(OP_BUY) > 1) "时,没有一个仓位被关闭。我不知道我做错了什么。
有人能帮助我吗?