多时间框架指标 - 页 1204

 
greenpar :

再次感谢您的帮助。我已经纳入了你所概述的修改,但我仍然有问题/错误(见附件文件)。如果我能够得到一些进一步的指导,那就太好了。

谢谢你。

我上传了一个固定的程序和一个完整的样本。
附加的文件:
 
Naguisa Unada:
我上传了一个固定的程序和一个完整的样本。

再次感谢您的帮助,我已经按照建议进行了修改(见下面的附件文件和代码)。我在编译时仍然遇到许多错误(见附件中的编译错误图片),我怀疑这与下面代码中的高亮行有关。

请记住,我希望在这个指标文件中加入其他时间框架、货币对,以及其他指标(如ADX)。

如果有任何进一步的帮助,我将不胜感激。

#property description   "Indicator alerts when candle size is larger than CandlePoint value for specified period"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0


//+------------------------------------------------------------------+
//| Declaring Constants                                         |
//+------------------------------------------------------------------+
#define  RESET 0

//+------------------------------------------------------------------+
//| Enumeration for the indication of operation                                         |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Input parameters of the indicator                                           |
//+------------------------------------------------------------------+
//--- Candle point size
input uint CandlePointM1 = 5;                   // Minimum candle points for Period M1
input uint CandlePointM5 = 5;                   // Minimum candle points for Period M5
int timeFrame[] = {PERIOD_M1, PERIOD_M5, PERIOD_H1};
string currencyPairs[] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}

//+------------------------------------------------------------------+
//| Custom indicator initialisation function                                            |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Deinitialisation                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom iteration function                                           |
//+------------------------------------------------------------------+
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[])


//+------------------------------------------------------------------+
//| Candle size indicator                                               |
//+------------------------------------------------------------------+
{
int range;
static datetime alertBar[] = {0, 0, 0}; // used for one alert/bar
datetime candleTime[3];

for(int i=0; i<3; i++)
        {
        for (int j=0 ;j<3 ;j++)
                {
                double candleLow, candleHigh;
                candleLow = iLow(currencyPairs[i],timeFrame[j],0);
                candleHigh = iHigh(currencyPairs[i],timeFrame[j],0);
                range = int((candleHigh-candleLow)/_Point);
                candleTime[j] = iTime(currencyPairs[i],timeFrame[j],0);

if (alertBar[j] != candleTime[j])
        {
        if (timeFrame[j] == PERIOD_M1 && range>int(CandlePointM1))
                {
                        Alert(currencyPairs[i], "PERIOD_M1", "candle >", CandlePointM1, "points");
                        alertBar[j] = candleTime[j];
                }
                if (timeFrame[j] == PERIOD_M5 && range>int(CandlePointM5))
                        {
                        Alert(currencyPairs[i], "PERIOD_M5", "candle >", CandlePointM5, "points");
                        alertBar[j] = candleTime[j];
                        }
                }
        }
}


附加的文件:
 
greenpar :

再次感谢您的帮助,我已经按照建议进行了修改(见下面的附件文件和代码)。我在编译时仍然遇到许多错误(见附件中的编译错误图片),我怀疑这与下面代码中的高亮行有关。

请记住,我希望在这个指标文件中加入其他时间框架、货币对,以及其他指标(如ADX)。

如果有任何进一步的帮助,我将不胜感激。


1.在行的末尾;缺少。

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD" };

2.缺少了以下几行。

返回(rate_total)。
}

3.我把数组的尺寸放错了。现已修改如下,并移至全局区域。

datetime alert_bar [3] [3];
datetime candleTime [3] [3];

附加的文件:
 
Naguisa Unada:

1.在该行的末尾;被丢失。

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD" };

2.以下几行缺失。

返回(rate_total)。
}

3.我把数组的尺寸放错了。现已修改如下,并移至全局区域。

datetime alert_bar [3] [3];
datetime candleTime [3] [3];


再次非常感谢你。现在,它在列出的所有时间框架和货币对 中都发出了警报。

但是,它不再是每个柱状图都发出警报,而是每增加一个烛光点,超过最小烛光点的大小,它就发出警报。你在上一条信息中附上的'Sample.mq4'中的第78、84和90行并没有确保每根蜡烛只发出一次警报。我试图改变"[]"中的数值,但这显然没有解决问题。怎样才能解决这个问题呢?

如同往常一样,我们将非常感谢任何进一步的帮助。谢谢你。

 
greenpar :

然而,它不再是每个柱状图都发出警报,而是每增加一个蜡烛点都会发出警报,超过最小蜡烛点的大小。你在上一条信息中附上的'Sample.mq4'中的第78、84和90行没有确保它在每个蜡烛上只发出一次警报。我试图改变"[]"中的数值,但这显然没有解决问题。怎样才能解决这个问题呢?

当然是这样。我应该在 "OnInit "中写下以下几行。

 //ArrayResize(candleTime, CPNO); 
 //ArrayResize(alert_bar,  CPNO); 
 //ArrayInitialize(alert_bar, 0); 
int OnInit ()
{
         //--- indicator buffers mapping 
        TFNO = ArraySize (timeFrame);
        CPNO = ArraySize (currencyPairs);
        
         ArrayResize (candleTime, CPNO);
         ArrayResize (alert_bar,  CPNO);
         ArrayInitialize (alert_bar, 0 );
        
         if ( StringLen ( Symbol ()) > 6 )
        {
                sufix = StringSubstr ( Symbol (), 6 , 0 );
                 for ( int i = 0 ; i < CPNO; i++)
                        currencyPairs[i] += sufix;
        }
         //--- 
         return ( INIT_SUCCEEDED );
}

[]内的数字用上面的 "ArrayResize "来调整。即使货币对 的数量增加,这里也会自动调整,但如果你想增加另一个时间框架,你必须直接修改程序。这是因为它是MQL4的规范。

 
Naguisa Unada:

当然是这样的。我应该在 "OnInit "中写以下几行。

[]中的数字是用上面的 "ArrayResize "调整的。即使货币对 的数量增加,这里也会自动调整,但如果你想增加另一个时间框架,你必须直接修改程序。这是因为这是MQL4的规范。


再次感谢您。我已经把代码加进去了。

每一个烛光点的增加超过最小烛光点的大小,警报仍然在提醒 - 即使从图表中删除指标,重新编译,退出MT等。我怎样才能解决这个问题呢?

如同往常一样,我们将非常感谢任何进一步的帮助。谢谢你。

 
greenpar :

即使从图表中删除该指标,重新编译,退出MT等,每一个蜡烛点的增加超过最小蜡烛点的大小,该警报仍在提醒。我怎样才能解决这个问题?

在我的电脑上,它可以正常工作,没有任何问题。我认为有些地方出了问题,但我不知道是什么问题。

 
Naguisa Unada:

在我的电脑上,它可以正常工作,没有任何问题。我认为有些地方出了问题,但我不知道是什么。


我正在运行MT4 build 1090。不知道问题出在哪里。也许其他人可以帮忙?

谢谢你

[删除]  

谁能修改一下这个指标,当曲线相互交叉时,箭头显示在第二根蜡烛上,但我需要箭头显示在当前的蜡烛上,每次当曲线相互交叉时立即显示。


谢谢

附加的文件:
 
fxprogramer:

谁能修改一下这个指标,当STOCH相互交叉时,箭头显示在第二根蜡烛上,但我需要箭头显示在当前蜡烛上,每次当STOCH相互交叉时立即显示。

//for(i=1; i<=limit; i++) 
  for(i=0; i<=limit; i++) 

这很简单。将第77行的i = 1改为i = 0。