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

 
extralifes:

帮助我理解这段代码。我不知道如何正确描述这种状况。

这里是EA的一个部分。

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
某种菜园....
 
butthead:

我明白,心理因素阻止了我......贪婪......害怕失去哪怕是300磅......。我应该怎么做?忘记真正的账户...


如果我改变我的心态呢? 不是 "以赢为目标",而是 "以不输为目标"。
 

帮助理解!

这个想法的本质是:当iMACD增加时--我们保持买入,一旦它开始减少--我们关闭买入并打开卖出。使用最近的三个值进行比较,不包括当前值。

该代码有一个问题:它在iMACD值+-0时开出多个订单,正如我所看到的。Normalizedouble() 并没有帮助。

以下是代码。

int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
 
extralifes:

帮助我理解这段代码。我不知道如何正确描述这种状况。

这里是专家顾问的一个片断。


total=OrdersTotal();

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
你能告诉我怎么做才正确吗?


它不是这样工作的吗?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }
 

没有通过如果不工作。

应该是只要条件(d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2是正确的,只开卖单,只要iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

反之亦然。

能否通过while或bool来写?我在编程方面完全处于紧缩状态。我理解逻辑链,但我的手很慢,无法将其转化为代码。

 
extralifes:

没有通过如果不工作。

应该是只要条件(d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2是正确的,只开卖单,只要iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

反之亦然。

可以通过while或bool来完成吗?我在编程方面完全处于紧缩状态。我理解逻辑链,但我的手很慢,无法将其转化为代码。

是每条街开一次,还是每个刻度开一次?
 

你好!我不想(有时也会)被StopOut抓住。我决定用一个值来限制这批货,这样就不会在最坏的情况下抓住StopOut。经历了很长一段时间的试验和错误。也许有人有办法解决?

输入数据。

- 货币对 - 不一定是欧元兑美元

- 价格(买入/卖出价格)

- 指定的止损点(假定最坏的情况是,即使达到止损水平,也不会捕捉到止损点)。

- 设置地段价值

- 所有其他数值应使用MT4功能获得:1手的大小,杠杆,交叉率。

最好能有一个代码。

理论上我明白我需要的是:余额减去StopLoss水平的可能损失除以保证金。而且这个值应该大于StopOut(按百分比计算)。

 
Cmu4:

帮助理解!

这个想法的本质是:当iMACD增加时,我们保持买入,一旦它开始下降,我们就关闭买入并打开卖出。使用最近的三个值进行比较,不包括当前值。

该代码有一个问题:它在iMACD值+-0时开出多个订单,正如我所看到的。Normalizedouble()并没有帮助。

以下是代码。


int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2 &&  MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2 && MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
也许这就是问题所在
 
ilunga:
打开,直到钱用完为止?还是每个柱子打开一次?还是每个刻度打开一次?

每一个新棒 都要检查该条件。在这种情况下,时间框架是每小时。这一情况在每小时开始时被检查。
 
Vinin:

也许这就是问题所在

不......我按照你的建议做了--同样的事情仍然存在。

另外,我还修改了代码,按条件分别划分为开场和结尾区块。这都是一样的。我不知道现在该怎么做。

这是测试者的截图,预告片中测试者的专家顾问。

附加的文件: