マルチタイムフレーム・インディケーター - ページ 1204

 
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.以下の行が抜けていました。

Return (rates_total);
}

3.配列の次元を間違えてしまいました。以下のように修正し、グローバル領域に移動しました。

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

ファイル:
 
Naguisa Unada:

1.行末の;が抜けていました。

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}です。

2.2. 以下の行が抜けていました。

Return (rates_total);
}

3.配列の次元を間違えてしまいました。以下のように修正し、グローバル領域に移動しました。

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


改めて、本当にありがとうございました。記載されている全てのタイムフレーム、通貨ペアで アラートするようになりました。

ただし、1バーに1回のアラートではなくなり、ローソク足の最小サイズを超えるローソク足が増えるごとにアラートされるようになりました。前回のメッセージに添付された 'Sample.mq4' の78、84、90行目は、ローソク足ごとに一度だけアラートするようにはなっていません。私は「[]」内の値を変更しようとしましたが、これは明らかに問題を解決しませんでした。どのようにこれを修正するのでしょうか?

いつものように、さらなる支援は非常に高く評価されます。ありがとうございました。

 
greenpar :

しかし、1バーにつき1回のアラートではなく、最小キャンドルポイントサイズを超えるキャンドルポイント増加ごとにアラートが出ています。前回のメッセージに添付した '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を終了しても、ローソク足が最小サイズより大きくなるたびにアラートが表示されます。どうすれば直るのでしょうか?

私のPCでは何の問題もなく正常に動作しています。何かが間違っていると思うのですが、何が間違っているのかわかりません。

 
Naguisa Unada:

私のPCでは何の問題もなく正常に動作しています。何かが間違っていると思うのですが、何が間違っているのかわかりません。


MT4ビルド1090を動かしています。何が問題なのかよくわかりません。多分他の誰かが助けることができる?

ありがとうございます。

 

このインジケーターをどなたか改造していただけないでしょうか。ストキャがクロスしたとき、矢印は2番目のローソク足に表示されますが、私は、ストキャがクロスしたときに毎回すぐに、現在のローソク足に矢印を表示させる必要があります。


ありがとうございます。

 
fxprogramer:

このインジケータは、ストキャがクロスしたとき、2本目のローソク足に矢印が表示されますが、ストキャがクロスしたとき、毎回すぐに現在のローソク足に矢印を表示させたいのですが、どなたか修正していただけないでしょうか?

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

とても簡単です。77行目のi = 1をi = 0に訂正してください。


 
Naguisa Unada:

動作しています、素晴らしいです。

理由: