新手的冒险 - 页 11

 
niko:
谢谢CB,我应该注意到这一点,所以错误是在最后(130)。

那么它是否有效?


CB

 

嘿,CB,它正在运行交易,但我还没有详细检查交易,看看逻辑是否正确跟进(乍一看似乎是这样)。因此,这是我要说的一个巨大的 "谢谢你!!!!":-)

在策略运行盈利之前,还有一段路要走,因为代码只是一种自动交易的方式,我需要在自己这边做一些工作来完善策略本身。看起来所有这些努力都得到了回报,但我仍然对编码感到超级困惑。我将开始自己制作一些小代码,在图表上显示评论,并对这些代码进行修改,以帮助我学习你使用的函数 和其他东西。我非常感谢你对这个CB的帮助,以及你的耐心,因为我一直在问同样的事情,并且一遍又一遍地犯同样的错误。谢谢您的帮助。

 
CB,这让我想起了一件事。我怎样才能对你的代码进行修正,允许在同一方向上有2个或最多3个交易(这就像你的代码的第二版)。我们使用旧代码的OP_BUY/OP_SELL,所以我们需要改变一些东西。如果你以 "骨架 "的形式告诉我该怎么做(例如:建立一个函数 来做这个......),那么我可以试着编码,并把它拿回来给你审查。这种方式比你自己编码要好,因为我可以跟随你的逻辑并学习编码的部分。你怎么看?(我可以看到我们有一个外部变量,我们在其中设置我们允许在同一方向上进行多少次交易,然后我们做一个函数来计算买入,另一个函数来计算卖出,然后我们在start()中调用这两个函数,并在那里检查外部变量...类似这样的东西?
 

这将是很容易的。

为自己设定一个参数,即未结订单的最大数量。如果你需要经常改变它,就把它外置。

然后只通过改变fnOrderDuplicate()函数 来实现 - 你不应该改变start()函数。这将有助于保持应用程序的现有架构。


CB

 
伙计,我希望有一天我能够说'这很容易!'。好吧,我去做,看看会发生什么!谢谢你!"。
 

嘿,CB,我现在花了2个小时试图做你在上面的帖子中要求的事情,看了其他的代码和文档,但没有进展(我只是不知道该怎么做)。伙计,我一直被这样卡住,太烦人了,即使是最简单的事情!一定有一种方法比我现在的学习方式更容易,因为我觉得我在学习上没有任何进展,你们好心为我写所有的代码。


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
嘿,CB,对上述问题有什么帮助吗,如何修复代码来做一个方向的多个交易?
 
niko:
嘿,CB,任何帮助在上面的点,如何修复的代码,做一个方向的多个交易?

只需将:如果 (iDuplicateOrders == 0改为:如果 (iDuplicateOrders<= iMaxDuplicateOrders

CB

 

嘿,CB,谢谢你的建议。有了这个选项,我就不能调节一个方向上允许有多少未平仓的订单(比如说我让extern iMaxDuplicateOrders = 4;),EA会运行4个短线,而不是平均分配参数(比如:最大2个短线,最大2个长线)。我是否应该尝试制作一个bool fnOrderDuplicate的副本(例如:bool fnOrderDuplicateBuys,和bool fnOrderDuplicateSells),然后在bool fnShouldWeTrade中分别引用每个副本。在我看来,这可能是可行的,你怎么看?

 
niko:

嘿,CB,谢谢你的建议。有了这个选项,我就不能调节一个方向上允许有多少未平仓的订单(比如说我让extern iMaxDuplicateOrders = 4;),EA将运行4个短线,而不是平均分配参数(比如:最大2个短线,最大2个长线)。我是否应该尝试制作一个bool fnOrderDuplicate的副本(例如:bool fnOrderDuplicateBuys,和bool fnOrderDuplicateSells),然后在bool fnShouldWeTrade中分别引用每个副本。在我看来,这可能是可行的,你怎么看?


设置iMaxDuplicateOrders = 4将意味着每个方向上最多有4个订单,因为我们在增加计数器之前检查 方向。


功夫不负有心人。在这个例子中,反过来说也是应该的。抱歉--我已经对你没有自己做出修改感到失望了。所有需要做的就是把限制从一个单子改成一个变量。


从注释中可以看出,你只是在用散文重新创建代码,而没有真正理解其逻辑。


CB