订单关闭不工作 - 页 3

 

谢谢threwdel,我会研究你的编码。你真的是太客气了。再次感谢

 
thrdel:


如果你的意思是这不是关闭订单的最佳方式,我同意,但如果这个人不想使用订单选择(或不知道如何使用),并且不在市场上留下任何未平仓的订单,那就可以了。

我们试图在这里互相帮助,而你的回答没有起到一点作用,你没有告诉他如何使用订单选择功能,他的EA现在也没有因为你的评论而有任何改善。

下次你想帮忙的时候,要用正确的方式,把正确的代码放在那里,这样别人才可能真正学到东西。

 
谢谢大家对我的问题发表意见。我的目的是在bar2满足某些条件时进入交易。 我正在测试GBPJPY,一次只开一笔交易,因为我对MQL4非常陌生。只有一笔交易,我就能在Orderclose()中使用票据。我仍然不熟悉OrderSelect。因此,如果bar3满足某些条件,交易就会关闭。 我想问一个问题,有没有办法把程序的执行情况存储在一个文件里,以便调试?因为我发现,当程序执行时,我不知道哪部分的执行出了问题。
 
chuale:
谢谢大家对我的问题发表意见。我的目的是在bar2满足某些条件时进入交易。 我正在测试GBPJPY,一次只开一笔交易,因为我对MQL4非常陌生。只有一笔交易,我就能在Orderclose()中使用票据。我仍然不熟悉OrderSelect。因此,如果bar3满足某些条件,交易就会关闭。 我想问一个问题,有没有办法把程序的执行情况存储在一个文件里,以便调试?因为我发现,当程序执行时,我不知道哪部分的执行出了问题。

不客气,Chuale,我也从这个论坛上的其他人那里学到了很多东西,所以没问题。你其实不需要把程序的执行情况保存到文件中,有几种方法可以观察你的变量值和可能出现的错误。我主要使用Comment()函数 和Print()函数。如果你需要,我可以把例子发给你。正如我之前提到的,GBPJPY没有给我带来积极的结果,但是USDJPY有。我只做了一个月的回测(2014年1月21日-2015年2月25日),在我的设置下,回报率略高于400美元。我一有时间就会测试其他货币对,并让你知道。另外,如果你需要帮助,如何使用Print()或Comment()来实时查看屏幕上的数值,请告诉我。之前附上的图片是你一个月内的EA表现图。到目前为止,看起来并不坏。
 

亲爱的thedel。

谢谢你

是的,我正在使用Print()。我需要知道,如果有更多的未完成交易,如何使用OrderSelect()。对于单笔交易,如果我使用SELECT_BY_POS,索引的值应该是多少(OrderSelect (int index, in select, int pool=MODE_TRADES)?是1吗?

还是什么值?

 
chuale:
谢谢所有回答我问题的人。我的目的是在bar2满足特定条件时进入交易。 我正在测试GBPJPY,一次只开一笔交易,因为我对MQL4非常陌生。只有一笔交易,我就能在Orderclose()中使用票据。我仍然不熟悉OrderSelect。因此,如果bar3满足某些条件,交易就会关闭。 我想问一个问题,有没有办法把程序的执行情况存储在一个文件里,以便调试?因为我发现,当程序执行时,我不知道哪部分的执行出了问题。


下面是一个如何使用Order Select函数的例子。

在这个例子中,CountTrades函数检查所有的开仓和挂单,丢弃那些没有匹配的符号和魔法号码的订单,只计算我们需要的订单。

在这个例子中,它将从最近的订单到第一个订单进行选择。

如果你需要更多帮助,请告诉我。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment("You have "+myTrades+" open trades.");
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;// we start counting from zero
int trade;  // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next order
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,then
   if(OrderType()==OP_SELL                                         // if it's an open sell do this.....
   || OrderType()==OP_BUY)                                         // if it's an open buy do this......      
   count++;                                                        // in this example increase the counter since I'm counting all my orders
   }
return(count);                                                     // When finished counting, return the result
}
 
thrdel:


如果你的意思是这不是关闭订单的最佳方式,我同意,但如果这个人不想使用OrderSelect(或不知道如何使用),并且不在市场上留下任何未平仓的订单,那么它是有效的。

我们试图在这里互相帮助,而你的回答没有起到一点作用,你没有告诉他如何使用订单选择功能,他的EA现在也没有因为你的评论而有任何改善。

下次你想帮助别人时,请用正确的方式,把正确的代码放在那里,这样别人才可能真正学到东西。


如果你想帮忙,那就正确解释吧

你说

thrdel:

首先你用OrdersTotal()计算订单。

total=OrdersTotal();


你给的例子不好......

如果这个人不想使用OrderSelect(),那么他就必须停止EA的编程。

你在这里说的是大胡话,https://www.mql5.com/en/forum/149958/page2#915413

我评论了你的示例代码,并告诉你该怎么做。

有很多例子我已经给出了如何做...

如果你想找到它们,可以用谷歌搜索

 
thrdel:


你有几件事做错了。我假设你想让这个EA在M1时间框架的日元对上工作。你是想只在新条上下单,只在新条上平仓,还是想在新条上进场,如果满足条件就出场?这是我的想法。

首先,你用OrdersTotal()计算订单。

然后计算你的变量

如果市场上有订单,检查它们是否必须被关闭

如果市场上没有订单,检查是否满足进入条件。

如果你有任何问题,请告诉我。

 
当编译以下内容时:它说Time函数 没有定义。请指示。
if(Time[0]==previousTime) return(0);         //EA will not go past this point unless it is a new bar
   previousTime=Time[0];                        // If it was a new bar , it's old now but continue to the end
 
chuale:
当编译以下内容时:它说Time函数没有定义。请指示。


好的,我把它修好了,因为我把Time的括号打错了,应该是[]而不是()。谢谢
原因: