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

 

大家好。请帮助理解这种情况。

为什么在一个案例中,testF2,当我把Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i);一切都发生得很好,因为它应该。

但在另一种情况下,testF1,同样的动作Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);最后一根杠被压垮? 为什么在iCCI的情况下不会发生,而iMA却会压垮??????

有什么办法可以解决这个问题吗?

附加的文件:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

对于无穷大的yem,当i=0时,计算-1 bar时,你会被抛出。

这样更好。

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

如果你需要像你引用的变体那样向右移动1-n条,最好在init中通过SetIndexShift(0,1)明确实现它。

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

当i=0时,如果yem是无限的,当计算-1 bar时,你会被抛出。

这样更好。

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

如果你需要像你引用的变体那样向右移动1-n条,最好在init中通过SetIndexShift(0,1)明确实现它。



非常感谢,但我完全理解,但为什么用iCCI就可以,用iMA就不行?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


你计算从价格到下单价格的距离,而你需要从价格到当前的止损!)

如果空头站立,那么它将被引导到第一个区块,如果多头站立,那么它将被引导到第二个区块,然后是尾随止损。

如果空头是好的,那么他们就进入第一块,如果是多头,那么就进入第二块,之后是计算、检查和追踪止损。


我还是做不到......我只是尝试了很久,我已经尝试了很多东西,我都不记得我做过什么了))
 
clubsmi:


非常感谢,但我完全理解,但为什么它对iCCI有效而对iMA无效?


这里和那里都有错误,只是由于计算的特殊性,iCCI的错误并不明显。

和MA的应用,特别是EMA的应用,我认为导致了它们的可见性。

 
vadynik:

仍然没有任何东西出来...我只是尝试了很久,我已经尝试了很多东西,我不记得我做过什么))

用OrderStopLoss()代替sl。
 
Vinin:

你要靠小费生活吗?
直到我成为这方面的专家。
你现在不需要小费了,是吗?:)
 

有一个程序开了两个买入 或卖出的订单,比如说EURAUD和AUDUSD。该程序只有在终端中没有这些或其他货币对的未平仓订单时才会发挥作用。如果终端中至少有一个订单存在,交易将不会打开。我的问题是,无论终端中是否有未平仓的订单,如何对开仓进行编程?我预先感谢你的答复。

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

有一个程序打开了两个买入或卖出订单,比如说EURAUD和AUDUSD。该程序只有在终端中没有这些或其他货币对的未平仓订单时才会发挥作用。如果终端中至少有一个订单存在,交易将不会打开。我的问题是,无论终端中是否有未平仓的订单,如何对开仓进行编程?我预先感谢你的答复。


移除检查
if(OrdersTotal()==0)
 
evillive:

移除支票
是的,现在有了,但是它打开了一大堆的交易,而我只需要在指定的货币对上打开两个交易,比如说欧元兑美元和澳元兑美元。