任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 887

 
tuner:
执行void start(),就不会有错误。
谢谢你!错误已经消失了,但头寸仍然无法关闭。
 
rapid_minus:
谢谢你!错误已经消失了,但头寸仍然无法关闭。
没有足够的代码,无法准确判断是什么原因造成的
 
tuner:
没有足够的代码来说明具体的原因是什么


摘录。

void CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&(MA_1>MA_2) || ((Yellow_0-Red_0)>)(Yellow_1-Red_1)&& ((MB_0<MB_1)&&(MB_1>MB_2))))
while(true)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
if (ord_close = false)
{
Comment("BAY position closing failed with error #",GetLastError();//错误的信息
break;
}
else
{
Ord=0;
break;
}

}

这可能是开放的原因。

void CritOpen()
{
if (//condition for opening//)

while(true)
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,NULL,10011,0,clrNONE); //开单 BAY, MAGIC 10011
if(ticket<=0)
{
Comment("开仓BAY-10011失败,错误#",GetLastError()。

break;
}
else
{
Comment("BAY-10011仓位以0手开仓。1,price", Ask);
Ord=(Ord+1);
break;
}
}

 
rapid_minus:


摘录。


...

before ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red) 。

如果能用OrderSelect()函数 来选择订单就更好了。我不明白这样一个围绕关闭函数的循环的目的是什么...

 
evillive:

before ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red) 。

如果能用OrderSelect()函数来选择订单就更好了。

我有唯一的一个。嗯,实际上一开始是这样的。我开始用摸索的方法寻找原因。我不明白这个循环的意义。

我只是用类比的方法作弊:如果我用循环打开,那么我也应该关闭......

 

伊戈尔-金有我们的例子。

void start() {
ManagePositions();
}

//+----------------------------------------------------------------------------+
//|按市场价格平仓|
//| 参数。|
//| sym - 仪器名称("" - 当前符号)。|
//| op - 操作(-1-任何位置)|
//| mn - 魔术数字(-1-任何魔法)|
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal() 。

如果(sym=="") sym=符号();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES){
if (OrderSymbol()==sym && (op<0 || OrderType()==op)){
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}

但编译器要求检查OrderClose的返回值

 
rapid_minus:

伊戈尔-金有我们的例子。


但编译器要求对OrderClose的返回值进行检查

那么,就像例子中那样做--先选择,然后关闭。如果是唯一的订单或一百万个订单,这并不重要,因为每个订单都必须首先被选中。

检查非常简单 if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell))Print("Closing error #",GetLastError())。

 
rapid_minus:

伊戈尔-金把我们的作为一个例子。

...

但编译器要求对OrderClose的返回值进行检查

这是因为在伊戈尔写函数的时代,编译器并不要求检查返回值,而今天的编译器如果不检查返回值就会发誓
 
evillive:

因此,像例子中那样做--先选择,然后关闭。不管是只有一个订单还是一百万个订单,每个订单都必须先被选中。

检查非常简单 if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell))Print("Closing error #", GetLastError())。

我做了以下工作:如果(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red))
{
Comment(" BAY位置关闭 失败,错误#",GetLastError())。
break;
}
否则
{
Ord=0;
break;
}

一直要求 "返回值应被检查。

像这样做了。

ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if (ord_close = false)
{
Comment("BAY位置关闭失败,错误#",GetLastError(); //错误信息
break;
}
else
{
Ord=0;
break;
}

沉默不语。但在这两种情况下,它都没有关闭仓位。

ZS: 我认为在定义关闭和打开条件时有一个错误

上面的帖子显示了一个接近条件的例子。那里会有什么问题呢?

 
rapid_minus:

它是无声的。但在这两种情况下,它都没有关闭仓位。

ZS:我认为在平仓和开仓的条件定义上有一个错误

在上面的帖子中,有一个接近条件的例子。那里会有什么问题呢?

好吧,如果默默地,没有错误,不关闭,那么关闭条件就不对。我们需要重新思考和改写这个非常条件。

这里的括号不知为何安排得不对。

if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))

这个怎么样?

if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))