[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 30

 
AndrewX:

请告知如何在开仓条件下设置正确的检查--该仪器是否有开仓的情况。如果有一个符号的头寸(任何卖出或买入),那么开仓就不会发生,否则就会触发开仓的信号?

下面是代码(我认为它负责开仓)。

在逻辑上似乎是正确的,但在一个工具上仍能打开几个姿势,这是不可行的。

P.S. 我不是一个程序员。如果有可能的话,可以向傻瓜解释得更详细一些。


这并不困难。最好是组织2个计算订单的次级方案。

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

此外,在代码本身,prich。

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

MAGIC常量最好在用户变量中声明。像这样。

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

尝试过


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


这并不复杂。最好是组织2个计算订单的子程序。

接下来,在代码本身,prich。

最好在用户变量中声明MAGIC常量。像这样。

谢谢,我会看一下,但对我来说可能有点复杂。
 
AndrewX:
谢谢,我会看一下,但对我来说可能有点复杂。

我在这个帖子里附上了一个EA文件。请看一下吧。
附加的文件:
 
早晨好!也许我关于不优化 的问题很复杂或者没有兴趣?
 
volshebnik:
早晨好!也许我关于不优化的问题很复杂或者没有兴趣?

这有许多可能的原因。从琐碎的--缺乏历史到变异的--没有盈利的选择。虽然它可能更简单--专家顾问中的一个错误
 

请告诉我机器人是否创建了挂单。

挂单的命令被发送到服务器。

放在队列中的挂单是否显示在终端上?

和我手动设置挂单 一样吗? 未结订单在上面,挂单在下面,是否在终端显示?

 
Jaguar1974:

请告诉我机器人是否创建了挂单。

挂单的命令被发送到服务器。

放在队列中的挂单是否显示在终端上?

和我手动设置挂单的情况一样吗?


你说的 "排队 "是什么意思?专家顾问向服务器发送订单,设置一个挂单。如果这个订单的参数是正确的,服务器就会设置挂单,这将立即显示在客户终端。如果 "专家顾问 "在某一步骤发送订单以放置挂单(它是通过一个循环完成的),那么每一个新订单都由服务器单独处理。这些订单被放在队列中 - 专家顾问已发出订单 - 服务器已作出回应。专家顾问再次发出订单,并在等待服务器的回复。

订单排队是什么意思?你这话是什么意思?

 
Vinin:

这有许多可能的原因。从琐碎的--缺乏历史,到变异的--没有盈利的选择。虽然它可能更简单--专家顾问中的一个错误。
我检查了一下,它有1999年以来的专家顾问的历史。我已经检查了所有的变体(也没有获利)。如果我只设置一个МА参数,例如从100到110,那么优化就会 "死亡"--没有结果,没有图表....。更不用说列入其他参数了。
 
volshebnik:
我查过了--有1999年以来的历史记录。我勾选了显示所有变体的复选框(非盈利的也是)。我甚至只把一个MA参数放在优化上,例如从100到110,所有的--优化 "死亡"--没有结果,没有图表....。更不用说列入其他参数了。

我必须要看一下专家顾问。这样一来,就没有什么可说的了