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

 
ModRed:
还有就是MA指标。而且还有一个与之类似的HMA指标。如何将其插入到EA中?完全复制代码?或者有一个更短的变体?

学习iCustom
 
Mitruha:

这个想法非常好,但你是否在这里看到过这样的程序,可以将交易转移或复制到其他终端。在没有经纪人服务的情况下,是否可以很好地做到这一点?

这样的方案
 
ModRed:
还有就是MA指标。而且还有一个与之类似的HMA指标。如何将其插入到EA中?完全复制代码?或者有一个更短的变体?
它是如何做到的
[Deleted]  

大家好,我有一个问题,我 "丢失 "了这个指标,它是某种平滑的CCI,它可以改变两个参数,周期和一个乘数。 在原始版本中,这些参数分别是20和2。 而且,如果我记得没错,这个指标的名字由两个词组成,第二个词以英文字母 "C "开头。

[删除]  
alsu:

但在一般情况下,当然,你可以重载构造函数,用它来代替Init(),毕竟它是同一个函数。依靠什么变体是每个人的个人问题,在品味问题上,正如我们所知,没有顾问)


而如果初始化失败,在使用方法的情况下,例如Init(),可以描述为返回一个相应类型的值,在出错的情况下返回一个适当的值。因此,调用代码将知道初始化失败,因此该对象不能被使用。当使用构造函数时,调用代码如何知道初始化失败的情况?

 

帮帮我吧,如何让猫头鹰不在信号开仓的同一根柱子上开仓,而是等待新的柱子 并再次检查信号,我是这么做的--逐根柱子开仓。

添加了这个

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

帮帮我吧,如何让猫头鹰不在信号开仓的同一根柱子上开仓,而是等待新的柱子并再次检查信号,我是这么做的--逐根柱子开仓。

添加了这个

и -

类似这样的事情。

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

类似这样的事情。

谢谢你,能不能简单地解读一下这个例子的规定行? --//选定的订单在零点(当前)开仓,所以要开下一个订单还太早。

//所选择的 订单在零点(当前)栏没有打开,这意味着打开下一个栏是可以的 ......???

 
bergkamp.:

谢谢你,是否有可能解读一下这个例子的规定行?

//所选择的订单在零点(当前)栏没有打开,这意味着打开下一个栏是可以的 ......???

这里是返回最后一个开仓 的酒吧的函数。

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

如果该函数返回-1,那么就没有开放的头寸,其数据已被传递给该函数。

使用实例。

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

鉴赏家们请您帮忙......

算法test01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

为什么Buf1中的值与Buf0不同?

为什么一个数值可以使用一个变量,而另一个数值可以使用一个缓冲区(数据阵列)-->(进一步计算需要一个阵列)? 我怎样才能既使用一个阵列,又使用变量m1和m2?

附加的文件:
test01.mq4  2 kb