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

 
.roman.:

不必要的计算(与问题无关)已被删除。打印机被添加到代码中,专门用来显示这个问题。尽管订单符号与EA开启的符号进行了比较,但EA可能会显示以下内容(从Ozi图表中取欧元的订单数据,例如,如本案例)。

                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     

这不可能,袋鼠的问价不可能高于2015年欧洲美元的任何公开价格......

而所有对所选订单的检查最好在选择之后进行,用一个单独的if()子句。

 
evillive:

这不可能,袋鼠的问价不可能高于2015年欧洲美元的任何开盘价......。

而对所选订单的所有检查应该在选择之后进行,用一个单独的if()子句。

这是正确的,它不能。这就是为什么它在1.11262的eu上发出了Bid<openPrice订单。

换句话说,你是否建议使用if(OrderSelect())检查是否存在订单,然后在嵌入的if中,我们已经将图表符号与订单符号、开盘价 等进行比较?

 
.roman.:

这是正确的,它不能。这就是为什么它在1.11262为欧盟发出了一个Bid<openPrice订单。

换句话说,你是否建议使用if(OrderSelect())检查订单,然后在嵌入的if中比较图表符号与订单符号、开盘价等?

是的,没错,首先是OrderSelect(),然后是下一个检查其余的参数。
 

跳来跳去是没有用的。

在一行中写选择顺序 和检查符号和魔术师,或者把它们分成3行,都没有区别。根据新建筑的变化,检查条件是分阶段的,也就是说,如果第一个条件没有得到满足,后面的条件就不会被检查。这与3条线是一样的。第一个条件得到满足,第二个条件被检查。只有当第二个条件也得到满足时,我们才会继续检查第三个条件。

问题可能是,在代码的删除部分有一个用户函数的调用,其中选择了另一个订单。

 

如果有任何关于与订单合作的说法,这将是我注意到的第一件事。但只有计算,没有使用任何一个用户功能。目前还不清楚到底是什么原因导致一个订单 从另一对中被选中。这就是为什么我对文档中提到的 "软件环境 "如此困惑,并且已经按照evillive 的建议重新编写了代码,准备用手鼓跳舞。下一个变态将是通过marketinfo与所需货币对的bid/ask进行强制比较。


UPD.: 问题解决了。实际上发现了一个嵌套函数,它使用自己的OrderSelect。谢谢你的想法,AlexeyVik

 
大家好,能否告诉我如何解决一个问题,我在循环中找到了我想要的条数,但我还需要循环中的过去条数,如何简洁地实现这个问题?谢谢你。
for(i=limit; i>=0; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime(Symbol(),0,i-1))-TimeDayOfWeek(iTime(Symbol(),0,i));
if (yesterday_weekday ==1)
yesterday_time=iTime(Symbol(),0,i);
yesterday_shift=iBarShift(Symbol(),0,yesterday_time0);//последний бар 

}
 

我已经创建了一个EA(不是为了工作,只是为了练习)。

如果我在IF函数中设置这两个参数,如果我逐一设置,一切都会正常工作,这是代码(另外,我如何确保如果我已经有一个开放的买入订单,下一个买入订单不会开放,即使所有条件都符合)?

//+------------------------------------------------------------------+
//|                                                        новый.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()

  {
  
double PC = iClose ("EURUSD", PERIOD_H1, 0);  

double MA = NormalizeDouble (iMA ("EURUSD", PERIOD_H1, 12, 0, MODE_LWMA, PRICE_MEDIAN, 0), 4); 


if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point);

   
return (0);





   
  }
//+------------------------------------------------------------------+
 
inuboh:

我已经创建了一个EA(不是为了工作,只是为了练习)。

如果我一个一个地设置它们,就能正常工作,也就是说,代码(如果我已经有一个打开的买入订单,我如何使买入订单不打开下一个,即使所有条件都正确?)

并不是说它是所有麻烦的来源,而是纯粹出于学术兴趣:为什么要同时进行OnInit()、OnDeinit(),然后突然启动()?

而对于这个问题,强烈不建议这样的比较问==MA,在历史上极少成真。那么,PC-->MA 这样的表达是什么意思呢?

至于一买一卖的权限,我们循环查看所有市场头寸,并将其与指定的标准--符号、类型、神奇数字进行比较,如果找到了所寻求的头寸,则将计数器增加1。然后,在必要时,检查这个计数器。

事情就是这样的。

   _ExpertOrdersB=0;
   _ExpertOrdersS=0;

   for(int z=OrdersTotal()-1; z>=0; z --)
     {
      if(!OrderSelect(z,SELECT_BY_POS))
        {
         Print(". OrderSelect("+IntegerToString(z)+", SELECT_BY_POS ) FAIL!. Error #"+IntegerToString(GetLastError()));
        }
      if((OrderMagicNumber()==magic) && OrderSymbol()==_Symbol)
        {
          switch(OrderType())
           {
            default: break;
            case 0:
               _ExpertOrdersB++;
               break;
            case 1:
               _ExpertOrdersS++;
               break;
           }
        }
     }


if (_ExpertOrdersB < 1) //если нет покупок, то пытаемся купить, при условии, что:
if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point); 
 
evillive:

并不是说这是所有问题的根源,而是纯粹出于学术兴趣:为什么同时进行OnInit()、OnDeinit(),然后突然启动()?

而对于这个问题,强烈不建议这样的比较问==MA,在历史上极少成真。那么,PC-->MA 这样的表达是什么意思呢?

至于一买一卖的权限,我们循环浏览所有市场头寸,并将其与指定的标准--符号、类型、神奇数字进行比较,如果找到所寻求的头寸,则将计数器增加1。然后我们在必要时看一下计数器。

出于 "习惯",我修复了start() )

为什么问价==MA 是一个罕见的事件? 当前的买价是否很少触及移动平均线

在我看来,PC-->MA 是指如果之前的收盘价高于移动平均线(我还没有想出其他方法)。

因此,当我用 Ask == MA,然后 PC-->MA 逐一启用IF功能时 ,它 工作得很好,但当我把它们结合起来时,它就不工作了!

 
evillive:

并不是说这是所有问题的根源,而是纯粹出于学术兴趣:为什么同时进行OnInit()、OnDeinit(),然后突然启动()?

而对于这个问题,强烈不建议这样的比较问==MA,在历史上极少成真。那么,PC-->MA 这样的表达是什么意思呢?

至于一买一卖的权限,我们循环浏览所有市场头寸,并将其与指定的标准--符号、类型、神奇数字进行比较,如果找到所寻求的头寸,则将计数器增加1。然后,在必要时,检查这个计数器。

事情就是这样的。

我的理解是,PC-->MA与PC-1>MA是一样的。