//+------------------------------------------------------------------+//| тест.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar *eurusd_H1; // объявим экземпляр класса для симмвола EURUSD
CNevBar *eurusd_M15; // объявим экземпляр класса для симмвола EURUSD
CNevBar *audusd_M30; // объявим экземпляр класса для симмвола AUDUSD
CNevBar *audusd_M5; // объявим экземпляр класса для симмвола AUDUSD//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
eurusd_H1=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M30=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD
eurusd_M15=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M5=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---delete eurusd_H1;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M30;// удалим экземпляр класса для симмвола AUDUSDdelete eurusd_M15;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M5;// удалим экземпляр класса для симмвола AUDUSD
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
if(eurusd_H1.new_bar("EURUSD",PERIOD_H1))
{
Alert("EURUSD"," Новый бар на Н1");
}
if(eurusd_M15.new_bar("EURUSD",PERIOD_M15))
{
Alert("EURUSD"," Новый бар на M15");
}
if(audusd_M30.new_bar("AUDUSD",PERIOD_M30))
{
Alert("AUDUSD"," Новый бар на M30");
}
if(audusd_M5.new_bar("AUDUSD",PERIOD_M5))
{
Alert("AUDUSD"," Новый бар на M5");
}
//---
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
テスト結果
2016.02.2021:09:432015.01.1000:00 тест3 test started
2016.02.2021:09:452015.01.1200:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:09:472015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:09:502015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:532015.01.1200:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:592015.01.1200:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:102015.01.1200:20 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:132015.01.1200:25 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:232015.01.1200:35 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:262015.01.1200:40 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:342015.01.1200:50 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:362015.01.1200:55 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на Н12016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:462015.01.1201:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:502015.01.1201:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:572015.01.1201:17 Tester: stop button pressed
MT4、コミュニティに協力してください。
1.エキスパートアドバイザーでは、M1チャートで(ティックまたは0.5秒タイマーで)作業し、H1チャートの新しいローソクの 瞬間に計算を行う必要があります。
我々は、各時間の最後のM1キャンドル(NN:00分)に続いて、M1キャンドルの開始をキャッチすることができますが、それは非常に良いものではありません...また、H1ローソク足がその瞬間に表示されないこともあります。
もしかしたら、もっとエレガントなやり方があるのでは?
2.Expert Advisor のテキストにあるインジケータコードと比較して、iCustom() を通してインジケータ値を取得するのにかかる時間はどれくらいですか?
3. Expert Advisorのテキストに表示されるインジケータのコードが、より速く計算される場合、M1チャートに付属するExpert Advisorでは、H1チャート上のインジケータの値を計算する方法は?
MT4、コミュニティに助けを求めています。
1.エキスパートアドバイザーでは、M1チャートをティックまたは0.5秒タイマーで操作し、H1チャートに新しいローソクが 表示された瞬間に計算をする必要があります。
我々は、各時間の最後のM1キャンドル(NN:00分)に続いて、M1キャンドルの開始をキャッチすることができますが、それは非常に良いものではありません...また、H1ローソク足がその瞬間に表示されないこともあります。
もしかしたら、もっとエレガントなやり方があるのでは?
2.Expert Advisor のテキストにあるインジケータコードと比較して、iCustom() を通してインジケータ値を取得するのにかかる時間はどれくらいですか?
3. Expert Advisorのテキストに表示されるインジケータのコードが、より速く計算される場合、M1チャートに付属するExpert Advisorでは、H1チャート上のインジケータの値を計算する方法は?
最初の質問に対する答えですが、この関数は新しいバーを 定義します。
使用例
最初の質問に対する答えですが、この関数は新しいバーを 定義します。
Sergeyさん、どうもありがとうございます。ドキュメントに目を通しましたが、どういうわけかiTime()を見逃していました.:
また、なぜOnInit()の中でNevBar()を呼び出すのでしょうか?
最初の関数呼び出し、それ以外は即座にトリガーされます。OnInit()が呼び出されない ようにするために
最初の関数呼び出し、それ以外は即座にトリガーされます。OnInit()が呼び出されない ようにするために
セルゲイさん、ありがとうございました。フォーラムでは、「スタティック変数を使うな!」とビビッてました。" :)
セルゲイさん、ありがとうございました。フォーラムでは、「スタティック変数を使うな!」とビビッてました。" :)
初めて知りました、何がそんなに怖いんでしょうね、私もほとんど使いませんが、ある種の作業には向いているようです。
ポイントは、静的変数は同じシンボルと時間枠に対して NevDay()が呼び出された場合にのみ使用できることです。 2つ以上のシンボルがある場合、NevDay()は不正確な値を返します。私のExpert Advisorは多通貨対応です ...:(
多通貨モードで必要な場合は、以下の例をご覧ください。MT4とMT5で動作します。
ポイントは、同じシンボルと時間枠で NevDay()が呼び出された場合のみ、静的変数を使用できることです。 2つ以上のシンボルがある場合、NevDay()は不正な値を返します。私のExpert Advisorは多通貨対応です ...:(
以下は、クラスを使った別のオプションです。
テスト結果