//------- 표시기의 외부 매개변수 ------------------------------- 외부 정수 CCI_Period_0 = 14; // 현재 TF의 CCI 주기 외부 정수 Level_0 = 100; // 현재 TF의 CCI 레벨 외부 int TF_1 = 60; // 첫 번째 TF의 분 수 외부 정수 CCI_Period_1 = 14; // 첫 번째 TF의 CCI 기간 외부 정수 Level_1 = 100; // 첫 번째 TF의 CCI 레벨 외부 정수 TF_2 = 240; // 두 번째 TF의 분 수 외부 int CCI_Period_2 = 14; // 두 번째 TF의 CCI 기간 외부 정수 Level_2 = 100; // 두 번째 TF의 CCI 레벨 외부 정수 NumberOfBars = 1000; // 계산할 막대의 수(0-모두) extern int ExtBars=3; 정수 당;
//------- 인디케이터 버퍼 ------------------- --- 이중 buf0[];
//+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 초기화 기능 | //+----------------------------------------------- --------------------+ 무효 초기화() { 표시자숫자(1);
//+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 초기화 해제 기능 | //+----------------------------------------------- --------------------+ 무효 deinit() { 논평(""); }
//+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 반복 기능 | //+----------------------------------------------- --------------------+ 무효 시작() { 이중 cci0, cci1, cci2; int nb1, nb2, 개수; 정수 LoopBegin, sh;
1.mq4(첨부) EA의 시각적 테스트 중에 3-cci-h3 표시기(첨부)를 차트로 드래그하면 계산된 cci의 절대적으로 동일한 매개변수를 사용하여 표시기 신호 및 실제 cci(오른쪽 상단 모서리에 있는 개체 텍스트)가 일치하지 않습니다.
왜요?
그리고 어떤 이유로 이 칠면조에서는 경고가 작동하지 않습니다.
어드바이저 코드:
표시기 코드:
//+----------------------------------------------- --------------------+
//| i-3CCI-h.mq4 |
//| johnfantom & kimiv |
//| http://www.kimiv.ru |
//| |
//| 2006년 1월 2일 하나의 바이알에 3개의 TF가 포함된 CCI. |
//+----------------------------------------------- --------------------+
#property copyright "johnfantom & KimIV"
#속성 링크 "http://www.kimiv.ru"
#속성 표시기_분리_창
#속성 표시기_버퍼 1
#property indicator_color1 다저블루
#속성 표시기_최대 1.4
#속성 표시기_레벨1 0
#속성 표시기_최소 -1.2
//------- 표시기의 외부 매개변수 -------------------------------
외부 정수 CCI_Period_0 = 14; // 현재 TF의 CCI 주기
외부 정수 Level_0 = 100; // 현재 TF의 CCI 레벨
외부 int TF_1 = 60; // 첫 번째 TF의 분 수
외부 정수 CCI_Period_1 = 14; // 첫 번째 TF의 CCI 기간
외부 정수 Level_1 = 100; // 첫 번째 TF의 CCI 레벨
외부 정수 TF_2 = 240; // 두 번째 TF의 분 수
외부 int CCI_Period_2 = 14; // 두 번째 TF의 CCI 기간
외부 정수 Level_2 = 100; // 두 번째 TF의 CCI 레벨
외부 정수 NumberOfBars = 1000; // 계산할 막대의 수(0-모두)
extern int ExtBars=3;
정수 당;
//------- 인디케이터 버퍼 ------------------- ---
이중 buf0[];
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
무효 초기화() {
표시자숫자(1);
SetIndexBuffer(0, buf0);
SetIndexLabel(0, "i-3CCI-h");
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexEmptyValue(0, 0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 deinit() {
논평("");
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
무효 시작() {
이중 cci0, cci1, cci2;
int nb1, nb2, 개수;
정수 LoopBegin, sh;
if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=바 수-1;
LoopBegin=MathMin(막대-1, LoopBegin);
count=IndicatorCounted();
(sh=카운트, sh>=0, sh--) {
nb1=iBarShift(NULL, TF_1, 시간[sh+1], 거짓);
nb2=iBarShift(NULL, TF_2, 시간[sh+1], 거짓);
cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1);
cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
/* 이중 cci[3];
cci[0]=cci0;
cci[1]=cci1;
cci[2]=cci2;
string s1="cci-0 *** "+DoubleToStr(cci[0],3);
string s2="cci-1 *** "+DoubleToStr(cci[1],3);
string s3="cci-2 *** "+DoubleToStr(cci[2],3);
문자열 str[3];
str[0]=s1;
str[1]=s2;
str[2]=s3;
colorcol=라임;
for(int y=0;y<3;y++)
{ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);
ObjectSet("텍스트 신호"+y,OBJPROP_CORNER,1);
ObjectSet("텍스트 신호"+y,OBJPROP_XDISTANCE,35-25);
ObjectSet("텍스트 신호"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
if(cci[y]>=0)col=라임;else col=빨간색;
if(cci[y]>Level_0) col=아쿠아;
if(cci[y]<-Level_0) col=다크바이올렛;
ObjectSetText("textSignal"+y,str[y],15,"타호마",col);
}
*/
if (cci0>Level_0 && cci1>Level_1 && cci2>Level_2) {buf0[sh]=1;
if (per != Time[0]당) {per = Time[0]당;
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(시간[sh]),".",
TimeDay(시간[시]),".",
TimeMonth(시간[시]),"; ",
TimeHour(시간[시]),":",
TimeMinute(시간[시])," ",
"구입");}}
if (cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) {buf0[sh]=-1;
if (per != Time[0]당) {per = Time[0]당;
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(시간[sh]),".",
TimeDay(시간[시]),".",
TimeMonth(시간[시]),"; ",
TimeHour(시간[시]),":",
TimeMinute(시간[시])," ",
"판매");}}
}
}
//+----------------------------------------------- --------------------+
직접 해보십시오. 뭔가가 전혀 작동하지 않습니다. 후플로가 그립니다.
이론적으로 라인은 일치해야 합니다. 그러나 실제로는 조금 다르게 나타납니다.
무엇이 잘못될 수 있는지 말씀해 주십시오.
버퍼에 값을 쓰는 재귀 함수를 만들었습니다.
표시기에서 호출하면 잘 작동합니다. 고문에 넣으려고하면 대답은 0입니다.
무엇이 잘못될 수 있습니까?
무엇이 잘못될 수 있는지 말씀해 주십시오.
버퍼에 값을 쓰는 재귀 함수를 만들었습니다.
표시기에서 호출하면 잘 작동합니다. 고문에 넣으려고하면 대답은 0입니다.
무엇이 잘못될 수 있습니까?
아마도 버퍼 크기가 설정되지 않은 것 같습니다!?
플러그가 있는 곳을 찾았습니다.
IndicatorCounted는 표시기 에 0을 제공하고 어드바이저에서 -1을 제공하는 것으로 나타났습니다(함수에 정확성 검사가 있으므로 >=0이므로 어드바이저에서 고려되지 않음)
왜 이런 일이 발생하고 오류를 제거하는 방법은 무엇입니까?
MT4 빌드 225, 페어 유로스드 M1.
플러그가 있는 곳을 찾았습니다.
IndicatorCounted는 표시기 에 0을 제공하고 어드바이저에서 -1을 제공하는 것으로 나타났습니다(함수에 정확성 검사가 있으므로 >=0이므로 어드바이저에서 고려되지 않음)
왜 이런 일이 일어나고 오류를 제거하는 방법은 무엇입니까?
MT4 빌드 225, 페어 유로스드 M1.
https://docs.mql4.com/en/customind
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
열기 및 닫기는 다른 틱에서 발생합니다. 그리고 Advisor는 한 번 변수 t에 할당된 것을 더 이상 기억하지 않습니다. 또는 전역 또는 정적으로 만들어야 합니다.
전역은 함수 외부에서 정의됩니다. 또는 정적 int로 선언
열기 및 닫기는 다른 틱에서 발생합니다. 그리고 Advisor는 한 번 변수 t에 할당된 것을 더 이상 기억하지 않습니다. 또는 전역 또는 정적으로 만들어야 합니다.
전역은 함수 외부에서 정의됩니다. 또는 정적 int로 선언
확실히 적립해 주셔서 감사합니다.))
내가 설정한 표시기에서(시간[i]와 비교하기 위해):
그런 다음 루프에서
결과적으로 StrToTime (StartRange) 및 StrToTime(EndRange)은 0을 반환 합니다.
- 그 이유와 해결 방법은?