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

 
Sergstuddek:


(班级很好,但仍有一个问题))

我在理论上理解它,但在实践中它不工作,你能看一下我的代码并告诉我哪里有问题吗?

我知道这是一个非常简单的EA,但我刚刚开始我的旅程)))),我已经有一个问题了

// 专家顾问的本质是,首先它打开了第一个买入订单。
// 然后在两个方向上放置止动器
//在一边作为一个开放订单的延续
//在图表反转的情况下,在另一边再做两次
//止损与顾问最后开出的订单有关。
//每开出一个新的挂单,以前的挂单都会被删除。
//和新的挂单止损已经相对于新的未平仓订单开放。


止损可以理解为两件事--止损单(Take Profit和Stop Loss)和止损单(Bystop和Sell Stop)。这里的 "停止 "是什么意思,可能只有你明白。请准确地使用术语。计算机必须得到精确的指令。描述也必须尽可能的精确
 
drknn:
止损可以理解为两件事--止损单(Take Profit和Stop Loss)和止损单(Bystop和Sell Stop)。这里的 "停止 "是什么意思,可能只有你明白。请准确地使用术语。你必须向计算机发出精确的指令。描述也必须尽可能的精确

我很抱歉有不准确的地方,但止损单是止损单(买入止损和卖出止损)。
 
Sergstuddek:

我为不准确之处道歉:我是指止损单(买入止损和卖出止损)。
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}


这个函数写得不对。订单应在订单列表中从最后一个到第一个进行搜索。你的方法将导致1个订单被跳过,因为在它被删除后,订单列表将按其位置移动。该环路应组织如下。

for (int i=OrdersTotal()-1;i>=0;i--){

此外,如果订单未被选中,你不需要进行突破--你不需要退出循环--你需要找出订单未被选中的原因。具体情况如下。

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
  Print("При выборе ордера № ",i," произошла ошибка № ",GetLastError());

res=OrderDelete(OrderTicket()); - 这也不够正确。OrderDelete()函数有一个布尔类型。而在下达删除订单的同时,我们还需要处理订单不能被删除的情况。换句话说,它是这样的。

res=OrderDelete(OrderTicket());
if(!res){
  Print("Ордер № ",OrderTicket()," удалить не получилось - ошибка № ",GetLastError());
}

我以后再看其他的。

 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
}

启动功能代码书写不正确。

通过第一个功能,你把买入和卖出的订单加起来。你需要分别计算买入订单和卖出订单。问题就在这里。如果市场上有1个买单,那么买入的止损点应该设置为较大的手数。对吗?如果市场上有卖单,那么买入止损应该设置为正常手数,卖出止损应该设置为较大手数。如果你在一个函数中把买入和卖出的订单相加,你如何检测哪个订单在市场上是开放的?试着根据这些事实重做代码。

 

你能告诉我如何从经纪人那里自动下载历史记录吗?压在家里一个小时,有点不方便。

 
_dude_:

你能告诉我如何从经纪人那里自动下载历史记录吗?压在家里一个小时,有点不方便。

瓦迪姆-顺子已经为你解决了这个问题。加载历史记录的脚本。在基地(脚本部分)还有一些。
 
gince:

关于该指标的问题。

该指标是一个交叉指标。它把很多箭头引向一边,然后又有很多箭头引向另一边。如何做到只抽到第一批的人。我已经按照代码中描述的方式进行了尝试,但当我切换框架时,箭头会发生变化。

请告知如何正确操作。


我必须看一下这个指标。也许有一个解决方案
 
nemo811:
请帮助我纠正我的专家顾问。你需要让它与安装了它的图表上的货币对的订单(用户自己的和打开的)一起工作。我们指的是确定利润或损失的时间。在目前的版本中,当一个条件(抓住存款%)发生时,它试图关闭所有货币对的所有头寸(MAGIC=0),我不需要它。有必要完全划定所有货币对的界限。我提前表示感谢。

在不同的留言板上也要做同样的事情--这就是垃圾邮件,你可能会被禁言。
 
Vinin:

在不同的主题中写同样的东西--这是垃圾信息,会被禁言。

我很抱歉--和以往一样,我想一次做完所有事情))
 

谢谢你的关注和理解 ))

能够自己解决这个问题。

插入了一个棘手的行 如果(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) 继续。

到一个同样棘手的地方。在那之后,一切都按计划进行。

谢谢你对魔术师的提示。我不是一个程序员,所以有时和没有想到的东西,因为缺乏知识。