Max Enrik : 실제로 계속 업데이트를 중지 하려면 아래 코드를 편집하는 방법을 모르겠습니다.
새 달에 새 바코드를 적용합니다.
막대가 신뢰할 수 없음(새로 고침/재연결이 차트의 막대 수를 변경할 수 있음) 볼륨이 신뢰할 수 없음(눈금 누락) 항상 시간을 사용하십시오. 새 양초 - MQL4 forum 틱당 한 번만 호출할 수 있기 때문에 새 막대 기능을 만드는 데 동의하지 않습니다. 변수는 여러 번 테스트할 수 있습니다.
//+------------------------------------------------------------------+ //| 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()에서 모든 선을 그린 다음 마지막 막대의 오픈 시간이 변경될 때마다 새 막대가 있다는 것을 알게 될 때마다 새로 그릴 수 있습니다.
하지만 정확히 무엇을 하려는 것인지 잘 모르겠습니다.
확인! 나는 무언가를 시도 할 것이다. 그럼 나는 여기로 돌아올 것이다 .
감사해요.
@마르코 vd 하이덴
그것에 대한 연구 를 시작하기 전에. 정말 묻고 싶습니다. start() 함수 가 차트(/MT4 플랫폼)를 느리게 합니까?
ps 나는 모든 코드를 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
감사해요!
정말 도움 이 필요합니다. 누군가 내 질문에 대답해 주세요.
감사해요.
틱당 한 번만 호출할 수 있기 때문에 새 막대 기능을 만드는 데 동의하지 않습니다. 변수는 여러 번 테스트할 수 있습니다.
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()' 함수를 사용한 적이 없기 때문에)
어쨌든, Mr. William 당신의 코멘트는 정말로 저에게 아이디어를 줬고 또한 저에게 무언가를 가르쳐주었습니다.
(ps 혹시 제가 잘못 생각하고 있다면 알려주세요)
사전 빌드 600(2014년 2월 3 일 )에는 start()만 있었습니다. 이제 OnTick (EA), OnCalculate (지표) 및 OnStart (스크립트)가 있습니다. 지표에 대해 이야기하고 있다는 것을 잊었습니다.
새로운 이벤트 처리 기능 - 기능 - 언어 기본 - MQL4 참조 를 사용하여 시작하십시오. 룩백을 올바르게 수행하는 방법을 참조하세요 .