이전 글에서는 Expert Advisor에 배포하기 전 필요한 첫 번째 단계인 맞춤형 지표를 iCustom 기능으로 변환하는 과정을 소개했습니다. 우리는 iCustom 기능의 6가지 다른 매개변수를 정의하며 마지막 세 가지 매개변수인 표시기 매개변수, 모드 및 Shift에 특히 주의를 기울입니다.
복잡한 사용자 정의 표시기 NonLagMA_7.1을 iCustom 표시기 함수로 변환하는 예를 사용하고 해당 표시기 매개변수 및 패턴을 찾는 방법을 보여주었습니다. 연역적 발견 프로세스 .
이전에 토론에서 iCustom 기능의 모드 매개변수(라인/신호)를 찾기 위해 조사 작업을 수행할 때 빨간색으로 강조 표시된 데이터시트가 시각적 단서를 제공한다고 지적했습니다. NonLagMA는 선 자체로 표시되는 첫 번째 모드(mode=0), Up은 파란색 선으로 표시되는 두 번째 모드(mode =1), Dn은 (mode = 2) 빨간색 선으로 표시되는 세 번째 모드라고 추론합니다. . 네 번째 추세 모드(mode = 3)는 여기서 시각적으로 표시되지 않지만 코드 자체에 표시됩니다. 논리는 trend == 1이면 추세가 상승하고, trend = -1이면 추세가 하락한다는 논리입니다. .
이제 개요가 생겼습니다 NonLagMA 네 가지 사용자 정의 지표 모드를 사용하면 다양한 모드에 따라 최소 세 가지 유형의 전문 조언자를 생성할 수 있습니다.
MA 라인 자체를 사용하여( 모드=0) EA는 마치 십자가처럼 함께 작동합니다.
상향 파란색 선(Mode=1) 및 Dn 빨간색 선(Mode=2)과 함께 사용되는 EA는 NonLagMA가 파란색으로 변할 때 매수합니다. 붉게 변할 때.
추세 신호(모드=3)가 있는 EA를 사용하여 추세가 상승할 때 매수하고 추세가 하락할 때 매도합니다.
세 EA는 모두 동일한 외부 변수를 공유합니다.
외부 가격 = 0 ;
외부 길이 = 150;
외부 int 변위 = 0; //DispLace 또는 Shift
외부 double PctFilter = 0; //십진수 동적 필터< /p>
외부 색상 = 1; //색상 모드 전환(1색)
External int ColorBarBack = 1; //색상 모드로 복귀
외부 이중 편차 = 0; //상한/하한 편차
외부 알람 모드 = 0; //가청 알람 스위치(0-off, 1-on)
외부 int WarningMode = 0 ; // 소리 경고 스위치(0-off, 1-on)
외부 변환 = 1;
이전 글에 있던 과정입니다 위의 지표 매개변수를 발견한 방법은 기사에서 검토되었지만 다시 다루겠습니다. 가장 간단한 방법은 지표 소스 코드의 외부 변수를 복사하여 Expert Advisor에 붙여넣은 다음 위의 식별자로 iCustom 함수 지표를 채워 세 번째 매개변수(지표 이름)와 마지막 두 매개변수 뒤에 위치하도록 하는 것입니다. (모드 및 교대).
따라서 iCustom 지표를 다음에서 변환하게 됩니다.
Double ma = iCustom (NULL,0,”NonLagMA_v7.1″,0,0,Shift);
이를 위해:
< br/>
double ma = iCustom(NULL, 0, “NonLagMA_v7.1”, Price,Length,Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 0,Shift).
참고: 이 특정 지표에는 9개의 지표 매개변수가 있지만 가장 중요한 매개변수는 길이라는 점에 유의해야 합니다. 이동 평균과 마찬가지로 길이를 변경하면 NonLagMA의 기본 구조가 변경됩니다. 다른 매개변수는 기본값인 0으로 둘 수 있습니다.
NonLagMA EA #1: MA 라인 신호 사용(모드 = 0)
비지연 MA 크로스오버
의도 //매수: 종가가 NonLagMA를 교차할 때
//Sell: 종가가 NonLagMA보다 낮은 경우
Indicator
double macurrent = iCustom(NULL, 0, “NonLagMA_v7.1”, Price,Length 호출 , 변위, PctFilter , 색상, ColorBarBack, 편차, AlertMode, WarningMode, 0,Shift).
double maprevious = iCustom(NULL, 0, "NonLagMA_v7.1", Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 0, Shift+1).
Double close_current = iClose(NULL,0,Shift);
double close_previous = iClose(NULL,0,Shift+1) ;
BuyCond if (close_current >= macurrent && close_previous <= maprevious)
SellCond if (close_current < = macurrent && close_previous >= maprevious)
설명:
여기 있습니다 더 이상 설명이 없습니다. 우리는 MA 크로스오버를 수행하는 것과 거의 동일한 방식으로 이 NonLagMA 크로스오버를 사용합니다. 빠른 NonLagMA 교차/느린 NonLagMA 아래를 나타낼 수 있지만 설명을 위해 NonLagMA 아래/위의 현재 종가만 나타냅니다. 최종 결과는 다소 비슷할 것입니다.
표시기 호출에서 내 iCustom 표시기 기능의 모드 매개변수(마지막에서 두 번째)가 0으로 설정되어 있습니다. 위에서 본 것처럼 0은 NonLagMA 라인 자체를 나타냅니다.
현재 종가와 이전 종가를 표현할 때 iClose 기능을 사용한다는 점 참고해주세요. iClose 기능은 다른 시간 범위, 통화 기호 또는 오프셋 값으로 종가를 사용하려는 경우 유용합니다. Close 또는 Bid를 사용하는 경우 현재 기호의 현재 가격만 참조하는 것입니다. 제 경우에는 현재 종가(Shift)와 이전 종가(Shift+1) 등 다양한 이동 값을 사용하고 싶기 때문에 close_current = iClose(NULL,0,Shift) 변수라는 메서드를 구성하고 close_previous라는 변수 = iClose(NULL,0,Shift+1).
NonLagMA EA #2: 파란색 UP 및 빨간색 Dn 색상 변경(모드 1 및 3)
p>
NonLagMA 라인 색상 변경
Intent //구매: 현재 라인이 파란색이고 이전 라인이 빨간색일 때
//판매: 현재 라인이 파란색일 때 다운되고 빨간색이고 이전 라인이 업되고 파란색일 때
지시자
call double buy_macurrent = iCustom(NULL, 0, "NonLagMA_v7. 1", 가격, FastLen, 변위, PctFilter, 색상, ColorBarBack, 바이어스, AlertMode, WarningMode, 1, Shift).
double buy_maprevious = iCustom(NULL, 0, "NonLagMA_v7.1", Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 1, Shift+1).
double Sell_macurrent = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode , 2, 교대).
double Sell_maprevious = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode , 2, Shift+1).
BuyCond if (sell_maprevious!=EMPTY_VALUE && Sell_macurrent==EMPTY_VALUE && buy_macurrent!=EMPTY_VALUE)
SellCond if(buy_maprevious!=EMPTY_VALUE && buy_macurrrent==EMPTY_VALUE && Sell_macurrent!=EMPTY_VALUE)
설명:
표시기 호출 섹션에서는 buy_ma(파란색 선) 및 Sell_ma(빨간색 선)에 대해 생성된 변수를 볼 수 있으며, 마지막 매개변수 Shift:current(Shift)와 이전 매개변수의 차이를 설정하여 생성된 각 변수의 현재 및 이전 버전을 볼 수 있습니다. (시프트+1). buy_ma와 Sell_ma의 차이는 두 번째 매개변수인 mode 매개변수입니다. buy_ma의 모드는 파란색(UP) 선이므로 1이고, Sell_ma의 모드는 빨간색(Dn) 선이므로 2입니다.
입력 조건을 볼 때 가장 먼저 이상하게 생각되는 것은 EMPTY_VALUE개의 단어와 느낌표입니다. 내가 EMPTY_VALUE로 무엇을 했는지 궁금해서 머리를 긁적일 수도 있습니다.
글쎄, 내부적으로, 전문 용어로 EMPTY_VALUE는 함수를 나타냅니다:
p>
void SetIndexEmptyValue(int index, double value)
이 함수는 플롯 선을 null 값으로 설정합니다. Null 값은 데이터 창에 표시되거나 표시되지 않습니다. 기본적으로 빈 값은 EMPTY_VALUE입니다.
일반 영어에서 EMPTY_VALUE는 데이터 창에 해당 선/신호/화살표에 대해 아무것도 표시되지 않음을 의미합니다. NonLagMA의 경우 선이 파란색일 때마다 데이터 창의 UP 행에는 표시기 데이터 값이 표시되고, 데이터 창의 Dn 행에는 아무것도 표시되지 않고 빈 값이 표시됩니다. 반대로 선이 빨간색이면 데이터 창의 Dn 행에는 지표 데이터 값이 표시되고 Up 행에는 아무것도 표시되지 않고 비어 있습니다.
이제 buy_macurrent = EMPTY_VALUE라고 말하면 파란색 선이 전혀 필요하지 않다고 말하려는 것입니다. 값). buy_macurrent!= EMPTY_VALUE라고 하면 느낌표(!)는 "필요하지 않음"을 의미하므로 파란색 선에 값이 없는 것을 원하지 않거나, 즉 파란색 선이 표시되기를 원하며, 가치를 가지게 됩니다.
일반 영어로 구매 조건을 살펴보면 다음과 같이 말합니다. 이전 빨간색 선이 실제로 존재할 때 구매할 것이며(sell_maprevious!=EMPTY_VALUE) 이제는 존재하지 않으며(sell_macurrent=EMPTY_VALUE) 파란색 선이 존재합니다(buy_macurrent!=EMPTY_VALUE).
반대로, 매도 조건의 경우 이전 파란색 선이 존재했을 때(buy_maprevious!=EMPTY_VALUE) 매수할 것이며 현재는 존재하지 않지만(buy_macurrent=EMPTY_VALUE) 빨간색 선은 존재합니다(sell_macurrent!= EMPTY_VALUE) ) .
NonLagMA EA #3: 추세 변화(모드 4)
  ; 시차 이동평균 추세
의도 //매수: 현재 추세가 상승하고 이전 추세가 하락할 때
//매도: 현재 추세가 상승할 때 이전 추세는 하향세입니다. 다음
지표
double trend_macurrent = iCustom(NULL, 0,"NonLagMA_v7.1",Price,FastLen,Displace, PctFilter, Color, ColorBarBack, 편차, AlertMode, WarningMode, 3,Shift).
double trend_maprevious = iCustom(NULL, 0, NonLagMA_v7.1″,Price,FastLen,Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 3,Shift+1).
BuyCond if (trend_macurrent==1 && trend_maprevious==-1)
SellCond if (trend_macurrent==-1 && trend_maprevious==1)
설명
trend_ma 및 위 두 EA의 이전 유형 버전 간의 차이점은 두 번째 매개변수인 모드입니다. 모드는 3이며 우리가 발견한 바와 같이 추세 신호를 나타냅니다. 추세 신호는 이전 모드처럼 데이터 창에 나타나지 않지만 나타납니다. 표시기 코드:
Trend[shift]=Trend[shift+1];
< /p>
If (MABuffer[shift]-MABuffer[shift+1] > 필터) trend[shift]= 1;
If (MABuffer[shift+1]-MABuffer[shift] > 필터 ) trend[shift]=-1;
이 코드는 추세가 어떻게 형성되는지 계산합니다. 일반 영어로 trend = 1 이면 추세가 길고, trend = -1이면 추세가 짧은 것입니다.
위 내용을 진입조건에 넣으면 아주 간단합니다. 현재 추세는 상승(trend_current==1)하고 이전 추세는 하락(trend_previous==-1)하고 싶다고만 말하면 됩니다. 매도 조건의 경우 현재 추세를 원한다고만 말하면 됩니다. 하락세(trend_current== -1)이고 이전 추세는 상승세(trend_previous==1)였습니다.