CreateLines(); // Function that creates time lines
//--- load open times M5=iTime(Symbol(),PERIOD_M5,0);
//--- set timelines
ObjectMove(0,"Time-M5",0,M5,0);
//--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ voidOnTimer() { if(M5!=iTime(Symbol(),PERIOD_M5,0)) { M5=iTime(Symbol(),PERIOD_M5,0); // overwrite old value with new value //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M5",0,M5,0); } } //+------------------------------------------------------------------+
ビルド600以前(2014年 2月3日)はstart() しかなかった。今はOnTick (EA、)OnCalculate (インジケーター、)OnStart (スクリプト)があります。 インジケーターの話だったのを忘れてました。
新しいイベント処理関数の 使用を開始- 関数 - 言語の基礎 - MQL4 Reference.ルックバックを正しく 行う方法を参照してください。
そうなんです。今、私はあなたがはるかに明確に理解 し、そんなに多くに感謝 します。
そして、#20の コメントで、もう一つアイデアが 浮かびました。(一度、あなたがそれを私と共有し、今私は私の心の中にそれを保つ)
また、私は自分のインジケータのためにより良いコードを書こうと し、今私はコメント#18-@Marco vd Heijdenを学習 しようとします。
それから私は広く あなたのコメントを研究します。
もう一度ありがとうございます。
インジケーターの代わりにエキスパートに入れることで、将来的に取引戦略を追加する際に簡単に使用することができます。
バーの問題については、バーの開始時刻を datetime変数に格納し、記録された時刻と実際の時刻を比較するだけで、新しいバーが発生するたびにそれがトリガーされます。
以下はその例です。
まず第一に、あなたの多くの明確なコメントの ための巨大な感謝。
私はまだIndicatorに 滞在しています。しかし、1つの問題に 直面しました。"Strategy Tester "でテスト できないのです。MT4 'Not Responding'.
#1 - Marcoはそれがどこから来るのか、教えていただけますか?
#2 - 下のコードは正しいですか?
私が試したのは以下のコードです。
string _vlineName_M5 ;
int _prd = PERIOD_M5 ;
int _prd_add = PeriodSeconds( _prd ) ;
datetime _dt_Prd_M5 ;
int _time_M5 ;
datetime _prdCvrt_M5 ;
datetime _timeCvrt_M5 ;
//---init
EventSetMillisecondTimer( 10 );
_CreateLines();
//---timer
if ( _dt_Prd_M5 != iTime( Symbol(), _prd, 0 ) )
{
_dt_Prd_M5 = iTime( Symbol(), _prd, 0 );
_CreateLines();
}
//---_CreateLines()
//---
int _dayCnt_M5 = 0;
int _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_M15, _dayCnt_M5 ) );
for ( int i = 0; i < _cnt_M5; i++ )
{
//---time convert
_time_M5 = Time[i];
_prdCvrt_M5 = PeriodSeconds( _prd );
_timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;
//---name
_vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );
//---
if ( _Period < PERIOD_M30 )
{
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}
}
}
ObjectMove ( 0, _vlineName_M5, 0, _dt_Prd_M5, 0 );
私はそれに取り組むのを止めました、私はあなたのコメントの後に続けるでしょう。(実は、上記のコードを併用すると、他のインジケータが潰れてしまうのではないかと心配しています)
本当にありがとうございます。
MT4 Backtesterのチャートイベント(Migel) - MQL4 フォーラム
MT4ストラテジーテスターでは、タイマー機能は動作しないので、tick関数に入れる必要があります。
MT4 Backtesterのチャートイベント(Migel) - MQL4 フォーラム
ありがとうございます。
私は その問題がコードから来るのではないことを確かに知って います。
Marco vd Heijden:
以下はその一例です。
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M5=iTime(Symbol(),PERIOD_M5,0);
//--- set timelines
ObjectMove(0,"Time-M5",0,M5,0);//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0); // overwrite old value with new value
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
}
//+------------------------------------------------------------------+
ありがとうございました。
このコメントは私に多くの ことを教えて くれました。
そのコードは、私が前のコメントで投稿したものと同じように動作しているようです。
しかし、私はそのコード(それはPeriod_M5のために動作しているもの)がクロック12:00で動作 しない必要があります(それは多分13:00、14:00です...)と 下のコードは 'OBJ_VLINEの過去の時間を 無視して(それは私にとって良いです)、現在クロック12:00 中に下のコードは私に追加の現在の時間の VLINEを示していますが、私はそれを望んでいない。
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
} //---if Close
私は私の問題を 解決するために何かを試してみ ましたが、それは正しく動作しませんでした。
また、私はスクリーンショットを 追加しました。
私は本当にその問題を解決する必要があります私を助けてください。
事前に大きな感謝を。
どうしてわかるのでしょうか?
接続が切れて しまったので、接続が切れた 状態で「Strategy Tester」を使ってみたところ、私には完璧に機能 しました。
ウィリアム さんや皆さんの コメントを読んで、確信に 変わりました。
それだけではダメなのでしょうか、すみません。
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
} //---if Close
この例では、12:00を除くすべての時間に行が表示されます。これは、!= differ then 12ステートメントで除外しているので、==が12と等しい場合は行が表示されません。
この例では、12:00を除くすべての時間で行が表示されます。
素晴らしい 人 だ、ありがとう:))
それはシンプルですが、私はそれを気にしない。シンプル でいいじゃない ですか。
(実はこのインジケータでは'=='を使っているのですが、本当は'OnTimer'に注目しました)
//--- 2回目の編集...
これはこれでいいのですが、時刻が00:00になると、また現在時刻の VLINEが追加で表示されます。
TimeHour( _timeCvrt_M5 ) == 1 ||
TimeHour( _timeCvrt_M5 ) == 2 ||
TimeHour( _timeCvrt_M5 ) == 3 ||
TimeHour( _timeCvrt_M5 ) == 5 ||
TimeHour( _timeCvrt_M5 ) == 6 ||
TimeHour( _timeCvrt_M5 ) == 7 ||
TimeHour( _timeCvrt_M5 ) == 9 ||
TimeHour( _timeCvrt_M5 ) == 10 ||
TimeHour( _timeCvrt_M5 ) == 11 ||
TimeHour( _timeCvrt_M5 ) == 13 ||
TimeHour( _timeCvrt_M5 ) == 14 ||
TimeHour( _timeCvrt_M5 ) == 15 ||
TimeHour( _timeCvrt_M5 ) == 17 ||
TimeHour( _timeCvrt_M5 ) == 18 ||
TimeHour( _timeCvrt_M5 ) == 19 ||
TimeHour( _timeCvrt_M5 ) == 21 ||
TimeHour( _timeCvrt_M5 ) == 22 ||
TimeHour( _timeCvrt_M5 ) == 23
)
(私は研究されたので、私は数回このコメントを更新 しました。)
よろしくお願いします。