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

 
artmedia70:
数组的大小为零。不要忘记ArrayResize(),或者只是为数组设置正确的大小
谢谢,我的做法不同,我在指标中找到ArrayMaximum(),并通过iCustom 将该值传递给专家顾问:)
 
大家好,我有一个脚本,使用外部DLL 的调用,专门计算引号,并创建一个带有必要几率的文件,有没有办法让这个脚本按计划运行?我需要它每天在某一时刻运行?
 

你好。

图片显示。

第一个窗口是成交量指标,把货币流量指数(10)放在上面。

我做了一个单独的指标,在那里我再次采取成交量,用成交量重新计算,并试图像第一个窗口那样做 - 25%,50%,75%

我试了一下我的方法,但它看起来并不理想。

如果有人在这方面遇到问题,请分享你的建议。

谢谢

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
他说的是减去第二条。以及极限值的平均值。他想取笑我,我猜。我会告诉他去他妈的自己,你知道我的意思 :)
二年级学生,七年级学生,仍然不知道有这样的国家 - 白俄罗斯,来到一年级学生和kochetsya。而在回答任何问题时,他只是发送或告诫他们:他们应该学习。你应该在门上仔细阅读你所在的分支。我还只是在学习字母表,所以不要太激动,反正我也听不懂。
 

也要向evilliveartmedia70 表示衷心的感谢。感谢你的耐心和时间。我相信这不仅仅是我对你的看法。每个来到这个主题的人都在寻求帮助,并且主要从你那里得到帮助。Thank you/谢谢你

 

你好,亲爱的专业人士,我已经很久没有和你联系了。

问题是,有一个专家顾问有2个穆瓦克的交叉点,但没有人愿意开一个订单。

无效的贸易()。

{ double ma_fast=ma(Period_, Shift_, Method_MA_, Apply_to_, 0), ma_slow=ma(Period__, Shift__, Method_MA__, Apply_to__, 0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)

{

if(sumSO>0 && !ClosePos(OP_SELL)) 返回。

如果(MO(OP_BUY,GetLot(),GetComment())==-1) 返回。

if(!ModifyByTicket(T)) 返回。

NumbUp=0;NumbDn=0。

}

否则

等等...

也就是说,如果有一个跨越的距离,打开一个订单

我需要一个代码来找到最后一次穿越的时间 ...

然后从当前时刻到历史上的时间,在一定时期内搜索一个订单......如果没有找到一个订单,就打开一个订单。

我为此探索了追踪器的代码,一切似乎都很清楚。

但我不知道如何为曲线交叉后的第一根柱子计时,所以它是最右边的一根柱子。

我觉得需要一个专门的操作员,但我无法制定它。

 
evillive:

这不是做这件事的方法。为所有3个缓冲区调用iCustom,将每个值写到自己的变量中,然后对这些值做你想做的事。

对于布林带,根据帮助中的例子,对于第二个条形,你不需要取消选择它们。

谢谢你。

但由于我是文盲,我不得不一直翻看我的手册,我挖出了以下内容:自定义指标 是按照作者的算法编写的程序。而教程中说,iCustom返回指定的自定义指标的值

但我不使用任何自定义(即我理解的--由我开发的)指标。

我需要检索标准指标(如果我可以这样称呼它们的话)的值:移动平均线、布林线和随机震荡指标,以及我所指定的参数。当然,我是 "凭直觉 "做的--我发现的第一件事将被应用。 但你建议的变体对我来说似乎也不合适。

如果不使用所有这些缓冲区、数组和循环,就没有解决方案吗?我在他们那里就像大海中的一块巨石--我一下子就沉下去了。

 
sannin:

你好,亲爱的专业人士,我已经很久没有和你联系了。

问题是,有一个专家顾问有2个穆瓦克的交叉点,但没有人愿意开一个订单。

无效的贸易()。

{ double ma_fast=ma(Period_, Shift_, Method_MA_, Apply_to_, 0), ma_slow=ma(Period__, Shift__, Method_MA__, Apply_to__, 0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)

{

if(sumSO>0 && !ClosePos(OP_SELL)) 返回。

如果(MO(OP_BUY,GetLot(),GetComment())==-1) 返回。

if(!ModifyByTicket(T)) 返回。

NumbUp=0;NumbDn=0。

}

否则

等等...

即,如果有一个交叉的距离,打开一个订单

我需要一个代码来找到最后一次穿越的时间 ...

然后从当前时刻到历史上的时间,在一定时期内搜索一个订单......如果没有找到一个订单,就打开一个订单。

我为此探索了追踪器的代码,一切似乎都很清楚。

但我不知道如何为曲线交叉后的第一根柱子计时,使其成为最右边的一根柱子。

我觉得需要一个专门的操作员,但我无法制定它。

这个专家顾问并不是通过交集来工作的。标准如下:如果快速的МА比慢速的高X个点,并且没有开仓,就在市场上开仓。

为了找到交叉点,人们应该总是取两个值--交叉点之前的快/慢速MA和交叉点之后的快/慢速MA,以便找出它们的交换位置,可以这么说。换句话说

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - 快速的МА在第一和第二小节之间从下往上越过了慢速的МА。

在一个无限循环中,从零条到检测到交叉点,将是X+1条,你需要X条的时间,也就是交叉点后最近的一条。

 
rapid_minus:

谢谢你。

但是,由于我是文盲,我不得不一直翻阅教科书,这是我挖出来的:自定义指标是一个程序...,按照作者的算法编写。而教程中说,iCustom返回指定的自定义指标的值

但我不使用任何自定义(即我理解的--由我开发的)指标。

我需要检索标准指标(如果我可以这样称呼它们的话)的值:移动平均线、布林线和随机震荡指标,以及我所指定的参数。当然,我是 "凭直觉 "做的--我发现的第一件事将被应用。 但你建议的变体对我来说似乎也不合适。

如果不使用所有这些缓冲器、数组和循环,就没有解决方案吗?我在他们那里就像大海中的一块巨石--我一下子就沉下去了。

没错,当使用布林线时,你不需要调用iCustom,但iBands应该为每条指标线单独调用。不调用指标 的替代方法("不使用缓冲器、数组、循环")是在专家顾问中实现该指标的计算算法,并在需要时读取所需的值(你可以只读取所需的值,例如,只读取底线)。但完全没有循环和数组都是不行的。
 
sannin:

你好,亲爱的专业人士,我已经很久没有和你联系了。

问题是,有一个专家顾问有2个穆瓦克的交叉点,但没有人愿意开一个订单。

无效的贸易()。

{ double ma_fast=ma(Period_, Shift_, Method_MA_, Apply_to_, 0), ma_slow=ma(Period__, Shift__, Method_MA__, Apply_to__, 0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)

{

if(sumSO>0 && !ClosePos(OP_SELL)) 返回。

如果(MO(OP_BUY,GetLot(),GetComment())==-1) 返回。

if(!ModifyByTicket(T)) 返回。

NumbUp=0;NumbDn=0。

}

否则

等等...

即,如果有一个交叉的距离,打开一个订单

我需要一个代码来找到最后一次穿越的时间 ...

然后从当前时刻到历史上的时间,在一定时期内搜索一个订单......如果没有找到一个订单,就打开一个订单。

我为此探索了追踪器的代码,一切似乎都很清楚。

但我不知道如何为曲线交叉后的第一根柱子计时,使其成为最右边的一根柱子。

我觉得需要一个专门的操作员,但我无法制定它。

这里有一个例子,我展示了如何在跨越2个穆夫后测量一个小节。
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }