[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 917

 
_SS_:
我如何创建一个函数并调用它?
阅读课本...:)
 

artemida70,用S.Kovalev的教程组装了我的第一个EA。事实证明,其批判性功能的工作是有损失的。编写了我的标准函数。检查了它的错误,然后编译了专家顾问。作为工作的结果,我得到了。

- 关于标准函数:O-错误,1个警告。

-对于专家顾问的编译:О-错误,О-警告。

但在策略测试器中的工作并没有进行,在函数int init, int start, int deinit中放入了测试ALERTS。我在响应中看到,控制权从Terminal传给了int init函数,而控制权没有传给int start函数--没有响应ALERT。当EA被卸载时,有一个来自int deinit函数的响应。

请您对这种情况提出建议。非常需要有经验的专业人士的建议。

谢谢你

artmedia70:
阅读教程...:)
 
artmedia70:
这里你有一个奇怪的结构。你正在做终端的标准订单循环。从零到OrdersTotal() -1。然后你在循环中检查终端是否完全没有订单。你为什么不检查订单的票呢?或者魔力?而你的旗帜由于某种原因=0。而为什么不假呢?然而,你是老板。你的逻辑,你必须了解它...:)

谢谢你的提示))))。正是在这一点上:。从零到OrdersTotal()-1...这就是测试者没有继续下订单的原因))))。

我使用这个方案是因为我从别人的课上学到了这个方案。如果你能描述一个更合理的方法,我将非常感激))))

 

我被坑了,我已经快一个月没有走出mql4了,我想我是要疯了还是怎么了?

我不知道我想用它来做什么。

我把它放在那里,至少给我一个提示,什么是错的? 大师们,请帮助傻瓜们!。

我在日志中没有看到任何错误。
 
Extern double StopLoss=50.0;
extern double TakeProfit=50.
0;
extern double Lots=1;
extern int total;

int start()
{
double Price_1, Price_2, min, max;
RefreshRates();
Price_1=Bid;
Price_2=Ask;

min=iLow(NULL, 0,2);
max=iHigh(NULL, 0,2);
total=OrdersTotal();
if(total<1)

{ if(Price_1>)max)
OrderSend(Symbol(,OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point, "My order#",16384,0,Green);

if(Price_2<min)
OrderSend(Symbol(,OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point, "My order#",16384,0,Green);
}
}
return(0);
 
boris.45:

artemida70,用S.Kovalev的教程组装了我的第一个EA。事实证明,其批判性功能的工作是有损失的。编写了我的标准函数。检查了它的错误,然后编译了专家顾问。作为工作的结果,我得到了。

- 关于标准函数:O-错误,1个警告。

-对于专家顾问的编译:О-错误,О-警告。

但在策略测试器中的工作并没有进行,在函数int init, int start, int deinit中放入了测试ALERTS。我在响应中看到,控制权从Terminal传给了int init函数,而控制权没有传给int start函数--没有响应ALERT。当EA被卸载时,有一个来自int deinit函数的响应。

请您对这种情况提出建议。非常需要有经验的专业人士的建议。

谢谢你


我想看看你在那里做了什么......:)
我不明白这意味着什么--IC的标准功能对损失起作用。毕竟,任何功能,如果它跟踪开放标准,可能正确地工作或不正确地工作,因此它可能有错误。但策略本身--它可以是亏损的,也可以是盈利的。标准功能只跟踪策略所设定的标准,并向交易功能 发送信号。
 
ViktorF:

谢谢你的提示))))。正是在这一点上:。从零到OrdersTotal() -1...这就是测试者没有继续下订单的原因))))。

我使用这个方案是因为我从别人的课上学到了这个方案。如果你能描述一个更合理的方法,我会非常感激))))。

有很多方法。一切都取决于你想找到什么。

在任何情况下,你都可以开始在订单中循环使用

for (int i =0; i<OrdersTotal(); i++)

然后准确检查你想在循环中找到的东西。

if (OrderSelect(i, SELECT_BY_POS) // 如果订单被选中(这里,我省略了MODE_TRADES函数参数,因为它是默认选中的)。

然后--你已经检查了你需要的订单参数,例如,Magik

if (OrderMagicNumber()==Magic) // 如果订单有给定的魔法号码,那么。那么这就是我们需要的顺序......

嗯...或其类型...

if (OrderType()==OP_BUY || OrderType()==OP_SELL) // 如果订单类型是 买入或卖出...

等。

虽然,我们可以用完全不同的方式来做......这一切都取决于你的习惯,也取决于代码的要求...

 
gheka:

应该可以。"笑脸 "是在笑吗?
 

大家好!我的专家顾问中有以下代码(见下文)。按照我的理解,开仓 的信号来自两个指数的指标。我们怎样才能使订单只基于一个指标开仓,比如说CCI?非常感谢你。

int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return (0);
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
}

int checkMomentum() {
   double Momentum = iMomentum(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("Momentum ", Momentum);
   if (Momentum > 100 && Momentum < 101) return (1);
   if (Momentum < 100 && Momentum > 99) return (-1);
   return (0);
}
 

帮助,EA在达到利润时没有关闭所有订单

void CloseAllOrders()
{
  for (int i = 0; i < OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
      {
        if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
        if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }        
      }
    }
  }
}
原因: