Max Enrik: 実は、以下のコードをどのように編集すれば連続更新を停止 できるのか見当がつきません。
新しい月のために新しいバーコードを適応させる。
Bars is unreliable (a refresh/reconnect can change the number of bars on the chart) volume is unreliable (miss ticks) Always use time.Bars is unreliable (a refresh/reconnect can change bar on the chart).新しいローソク足 - MQL4フォーラム 私は新しいバー関数を作ることに反対です、それは1ティックにつき1回しか呼び出すことができないからです。変数は何度もテストすることができます。
//+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ voidOnTimer() { if(M1!=iTime(Symbol(),PERIOD_M1,0)) { M1=iTime(Symbol(),PERIOD_M1,0); // overwrite old value with new value //Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M1",0,M1,0); }
if(M5!=iTime(Symbol(),PERIOD_M5,0)) { M5=iTime(Symbol(),PERIOD_M5,0); //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M5",0,M5,0); }
if(M15!=iTime(Symbol(),PERIOD_M15,0)) { M15=iTime(Symbol(),PERIOD_M15,0); //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M15",0,M15,0); }
if(M30!=iTime(Symbol(),PERIOD_M30,0)) { M30=iTime(Symbol(),PERIOD_M30,0); //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M30",0,M30,0); }
if(H1!=iTime(Symbol(),PERIOD_H1,0)) { H1=iTime(Symbol(),PERIOD_H1,0); //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-H1",0,H1,0); }
if(H4!=iTime(Symbol(),PERIOD_H4,0)) { H4=iTime(Symbol(),PERIOD_H4,0); //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-H4",0,H4,0); }
if(D1!=iTime(Symbol(),PERIOD_D1,0)) { D1=iTime(Symbol(),PERIOD_D1,0); //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-D1",0,D1,0); }
if(W1!=iTime(Symbol(),PERIOD_W1,0)) { W1=iTime(Symbol(),PERIOD_W1,0); //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-W1",0,W1,0); }
if(MN1!=iTime(Symbol(),PERIOD_MN1,0)) { MN1=iTime(Symbol(),PERIOD_MN1,0); //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-MN1",0,MN1,0); } } //+------------------------------------------------------------------+
#オブジェクトの順序
3つのオブジェクトを 作成し、それらのオブジェクトが互いに交差している。
#1 水平線、#2 垂直線、#3 トレンドライン
これらのZ位置を 設定する必要がある。
どのようにZポジションの 値を与えることができますか?
ありがとうございます。
OnInit()ですべての線を描画し、最後のバーからの開始時間が変わるたびに新しい線を描画すれば、新しいバーがあったことを知ることができます。
しかし、あなたが何をしたいのかよくわかりません。
OK! 私は何かを試して みます。その後、ここに戻って きます。
ありがとうございました。
マルコ・ファット・ヘイデン(Marco vd Heijden
それについて研究を 始める前に。本当に聞きたいのですが、start()関数は チャート(/ MT4 Platforms)を遅くするのでしょうか?
p.s 私はすべてのコードをstart() 特殊関数に入れました、そのコードはピリオドライン- H1, H4, D1, W1, MN1に対して機能します。
良い週末をお過ごしください。
あなたのコメントをありがとうございました。(コメント後、私は私のインジケータのすべてを変更することにしました - 私はほとんどすべての私のインジケータをstart() 関数で 作ったので。)
以下のコードをstart() 関数に入れましたが、私のインジケーターにはどの 方法が良いでしょうか?
実は、以下のコードを編集して連続更新を 止める方法(init()関数内にある全てのstart()コードを 削除する方法)が全く分かりません。
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
if ( _Period < PERIOD_MN1 )
{
//---time convert
datetime _tltpMN1 = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
datetime _time = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1 );
//---name
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
ObjectCreate ( 0, _vlineName_MN, OBJ_VLINE , 0, _time, 0 );
ObjectSetString ( 0, _vlineName_MN, OBJPROP_TOOLTIP , _tltpMN1 );
ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR , C'180,160,080' );
ObjectSet ( _vlineName_MN, OBJPROP_BACK , true );
ObjectSet ( _vlineName_MN, OBJPROP_HIDDEN , true );
ObjectSet ( _vlineName_MN, OBJPROP_SELECTABLE , false );
ObjectSet ( _vlineName_MN, OBJPROP_STYLE , STYLE_SOLID );
} //---if Close
} //---for Close
ありがとうございます。
本当に困って います、どなたか 回答お願いします。
ありがとうございます。
私は新しいバー関数を作ることに反対です、それは1ティックにつき1回しか呼び出すことができないからです。変数は何度もテストすることができます。
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
インジケーターの代わりにエキスパートに入れることで、将来的に取引戦略を追加する際に簡単に使用することができます。
バーの問題については、バーの開始時刻を datetime変数に格納し、記録された時刻と実際の時刻を比較するだけで、新しいバーが発生するたびにそれがトリガーされます。
以下はその例です。
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M1=iTime(Symbol(),PERIOD_M1,0);
M5=iTime(Symbol(),PERIOD_M5,0);
M15=iTime(Symbol(),PERIOD_M15,0);
M30=iTime(Symbol(),PERIOD_M30,0);
H1=iTime(Symbol(),PERIOD_H1,0);
H4=iTime(Symbol(),PERIOD_H4,0);
D1=iTime(Symbol(),PERIOD_D1,0);
W1=iTime(Symbol(),PERIOD_W1,0);
MN1=iTime(Symbol(),PERIOD_MN1,0);
//--- set timelines
ObjectMove(0,"Time-M1",0,M1,0);
ObjectMove(0,"Time-M5",0,M5,0);
ObjectMove(0,"Time-M15",0,M15,0);
ObjectMove(0,"Time-M30",0,M30,0);
ObjectMove(0,"Time-H1",0,H1,0);
ObjectMove(0,"Time-H4",0,H4,0);
ObjectMove(0,"Time-D1",0,D1,0);
ObjectMove(0,"Time-W1",0,W1,0);
ObjectMove(0,"Time-MN1",0,MN1,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M1!=iTime(Symbol(),PERIOD_M1,0))
{
M1=iTime(Symbol(),PERIOD_M1,0); // overwrite old value with new value
//Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M1",0,M1,0);
}
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0);
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
if(M15!=iTime(Symbol(),PERIOD_M15,0))
{
M15=iTime(Symbol(),PERIOD_M15,0);
//Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M15",0,M15,0);
}
if(M30!=iTime(Symbol(),PERIOD_M30,0))
{
M30=iTime(Symbol(),PERIOD_M30,0);
//Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M30",0,M30,0);
}
if(H1!=iTime(Symbol(),PERIOD_H1,0))
{
H1=iTime(Symbol(),PERIOD_H1,0);
//Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H1",0,H1,0);
}
if(H4!=iTime(Symbol(),PERIOD_H4,0))
{
H4=iTime(Symbol(),PERIOD_H4,0);
//Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H4",0,H4,0);
}
if(D1!=iTime(Symbol(),PERIOD_D1,0))
{
D1=iTime(Symbol(),PERIOD_D1,0);
//Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-D1",0,D1,0);
}
if(W1!=iTime(Symbol(),PERIOD_W1,0))
{
W1=iTime(Symbol(),PERIOD_W1,0);
//Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-W1",0,W1,0);
}
if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
{
MN1=iTime(Symbol(),PERIOD_MN1,0);
//Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-MN1",0,MN1,0);
}
}
//+------------------------------------------------------------------+
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
コメントありがとうございます。
コメントいただいてから、コメントについて調べ 始めていました。(私は'Void OnTick()'関数を使用したことがないので)
とにかく、Williamさん、あなたのコメントは本当に私にアイデアを与え、また何かを教えてくれました。
(p.s.もし私の考えが間違っていたら、教えてください)
ビルド600以前(2014年 2月3日)はstart() しかなかった。今はOnTick (EA、)OnCalculate (インジケーター、)OnStart (スクリプト)があります。 インジケーターの話だったのを忘れてました。
新しいイベント処理関数の 使用を開始- 関数 - 言語の基礎 - MQL4 Reference.ルックバックを正しく 行う方法を参照してください。