KimIV의 유용한 기능 - 페이지 84

 
vopros писал(а) >>

이고르, 안녕!

기존 표시기에 소리 알림을 구현하는 방법을 알려주세요.

예를 들어 지그재그에서. 새 줄을 그릴 때 사운드 트랙이되도록 어디에서 어떻게 쓸 수 있습니까?

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/en/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum | RPoint 표시기 코드를 다시 작성했습니다. '알포인트'
//| 원주민 및 하르코 |
//| http://forex.kbpauk.ru/ |품질 지그재그
//+----------------------------------------------- --------------------+

 

여러분, 프로그래머 여러분, Kim's Indicator에서 Expert Advisor(합리적인 가격에)를 만드십시오.

우편으로 세부 사항

블라디미르

vladmo@mail.ru

//+----------------------------------------------- --------------------+
//| i-MorningRange.mq4 |
//| Kim Igor V. 일명 KimIV |
//| http://www.kimiv.ru |
//| |
//| 02/08/2006 아침 범위 표시기. |
//+----------------------------------------------- --------------------+
#property copyright "Kim Igor V. aka KimIV"
#속성 링크 " http://www.kimiv.ru "

#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 파란색
#property indicator_color2 주황색

//------- 표시기의 외부 매개변수 -------------------------------
외부 문자열 CheckTime = "08:00"; // 범위 확인 시간
extern bool ShowHistory = True; // 과거 레벨 표시
외부 정수 NumberOfDays = 5; // 히스토리 일수
extern bool ShowComment = True; // 주석 표시

//------- 인디케이터 버퍼 ------------------- ---
더블 dBuf0[], dBuf1[];

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
무효 초기화() {
SetIndexArrow(0, 217);
SetIndexBuffer(0, dBuf0);
SetIndexStyle(0, DRAW_ARROW, 1, 2);
SetIndexArrow(1, 218);
SetIndexBuffer(1, dBuf1);
SetIndexStyle(1, DRAW_ARROW, 1, 2);

삭제 라인();
for (int i=0; i<2; i++) {
ObjectCreate("HLine"+i, OBJ_HLINE, 0, 0,0);
}

for (i=0; i<NumberOfDays; i++) {
CreateLines("upLine"+i, indicator_color1);
CreateLines("dnLine"+i, indicator_color2);
}
}

//+----------------------------------------------- --------------------+
//| 객체 생성 과거의 라인 |
//| 옵션: |
//| 아니오 라인 이름 |
//| cl - 라인 색상 |
//+----------------------------------------------- --------------------+
무효 CreateLines(문자열 번호, 색상 cl) {
ObjectCreate(아니요, OBJ_TREND, 0, 0.0, 0.0);
ObjectSet(아니요, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(아니요, OBJPROP_WIDTH, 1);
ObjectSet(아니요, OBJPROP_COLOR, cl);
ObjectSet(아니오, OBJPROP_RAY, 거짓);
}

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 deinit() {
삭제 라인();
논평("");
}

//+----------------------------------------------- --------------------+
//| 수평선 제거. |
//+----------------------------------------------- --------------------+
무효 DeleteLine() {
for (int i=0; i<2; i++) {
ObjectDelete("라인"+i);
}

for (i=0; i<NumberOfDays; i++) {
ObjectDelete("업라인"+i);
ObjectDelete("dnline"+i);
}
}

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
무효 시작() {
날짜 시간 t1, t2, dt;
이중 p1, p2;
정수 b1, b2, sd=0;

t1=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=높음[최고(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=낮음[최저(NULL, 0, MODE_LOW, b1-b2+1, b2)];

SetHLine(0, p1);
SetHLine(1, p2);

if (쇼 히스토리) {
dt=decDateTradeDay(CurTime());
for (int i=0; i<NumberOfDays; i++) {
DrawLines(dt, i);
dt=decDateTradeDay(dt);
동안 (TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}

if (ShowComment) Comment("CheckTime="+CheckTime);
}

//+----------------------------------------------- --------------------+
//| 현재 날짜의 수평선 세부 정보를 설정합니다. |
//+----------------------------------------------- --------------------+
무효 SetHLine(int nl, 이중 pp) {
색상 CL;

if (pp!=EMPTY_VALUE) {
스위치(nl) {
사례 0: cl=indicator_color1; 부서지다;
사례 1: cl=indicator_color2; 부서지다;
}
ObjectSet("HLine"+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine"+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine"+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+----------------------------------------------- --------------------+
//| 차트에 선 그리기 |
//| 옵션: |
//| dt - 거래일 날짜 |
//| nd - 일 번호(객체 번호 매기기용) |
//+----------------------------------------------- --------------------+
무효 DrawLines(날짜 시간 dt, int nd) {
날짜 시간 t1, t2;
이중 p1, p2;
정수 b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=높음[최고(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=낮음[최저(NULL, 0, MODE_LOW, b1-b2+1, b2)];

ObjectSet("업라인"+nd, OBJPROP_TIME1, t1);
ObjectSet("업라인"+nd, OBJPROP_PRICE1, p1);
ObjectSet("업라인"+nd, OBJPROP_TIME2, t2);
ObjectSet("업라인"+nd, OBJPROP_PRICE2, p1);

ObjectSet("dnLine"+nd, OBJPROP_TIME1, t1);
ObjectSet("dnLine"+nd, OBJPROP_PRICE1, p2);
ObjectSet("dnLine"+nd, OBJPROP_TIME2, t2);
ObjectSet("dnLine"+nd, OBJPROP_PRICE2, p2);
}

//+----------------------------------------------- --------------------+
//| 거래일 1일 감소 |
//| 옵션: |
//| dt - 거래일 날짜 |
//+----------------------------------------------- --------------------+
날짜/시간 decDateTradeDay(날짜/시간 dt) {
intty=TimeYear(dt);
int tm=시간 월(dt);
int td=시간일(dt);
intth=TimeHour(dt);
intti=시간분(dt);

td--;
if (td==0) {
tm--;
if (tm==0) {
타이 --;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; 그렇지 않으면 td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+----------------------------------------------- --------------------+

 
이고르, 안녕! Expert Advisors에는 두 가지(Expert1 및 Expert2)가 있습니다. Expert1에는 각각의 새 라인 에서 데이터를 기록하는 파일이 있습니다. Expert2에는 파일의 최대값과 비교해야 하는 값이 있습니다. 이 최대 숫자를 추출하도록 도와주세요.
 
Milka писал(а) >>
이고르, 안녕! Expert Advisor는 두 가지(Expert1 및 Expert2)가 있으며 Expert1에는 각 줄마다 데이터를 기록하는 파일이 있습니다. Expert2에는 파일의 최대값과 비교해야 하는 값이 있습니다. 이 최대 숫자를 추출하도록 도와주세요.

Expert 2에서는 모든 숫자를 배열에 로드한 다음 ArrayMaximum() 함수를 사용합니다.

 
KimIV >> :

Expert 2에서는 모든 숫자를 배열에 로드한 다음 ArrayMaximum() 함수를 사용합니다.

배열에 데이터를 로드할 수 없습니다.

 
Milka писал(а) >>

배열에 데이터를 로드할 수 없습니다.

배열 작업을 위한 함수에 대해서는 이 항목을 참조하십시오. 예제에서 배열은 데이터로 채워져야 합니다.

 

이고르, 안녕!

차트에 선을 만들 때(예: - ObjectCreate (tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) ) 플랫폼은 무한 길이의 광선을 그립니다. 그러나 교과서는 말합니다 - LINE! OBJ_TREND를 원하는 길이의 세그먼트로 바꾸는 방법을 찾을 수 없습니다. 모든 광선을 수동으로 변환하거나 부정 행위(삼각형처럼 그리기) - 그렇지 않은 것 같습니다. 말하다...

 
alexpert007 писал(а) >>

이고르, 안녕!

차트에 선을 만들 때(예: - ObjectCreate (tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) ) 플랫폼은 무한 길이의 광선을 그립니다. 그러나 교과서는 말합니다 - LINE! OBJ_TREND를 원하는 길이의 세그먼트로 바꾸는 방법을 찾을 수 없습니다. 모든 광선을 수동으로 변환하거나 부정 행위(삼각형처럼 그리기) - 그렇지 않은 것 같습니다. 말하다...

ObjectSet (tLine, OBJPROP_RAY, False)을 사용합니다.

 

안녕하세요 이고르

포지션의 부분 청산 문제는 특히 실수로 이미 제기되었습니다 131(p. 49-50 avt. 6232). 부분 폐쇄는 문제가 되지 않지만 로그의 오류 131은 도덕적으로 고문을 계속 쓸 수 없도록 합니다. 그것을 사용하여 스레드 "포지션의 부분 폐쇄를 위한 기성 기능이 있습니까?" 스레드에서 "포지션의 1/3 닫기" 기능에 대한 링크를 찾았지만 여기, 이 스레드에서 둘 중 하나를 찾지 못했습니다 이 기능 또는 작성자의 질문 6232에 대한 귀하의 답변입니다. 문제 해결에 부분적으로 도움이 되었습니다.rid's answer (p. 50). 로그에서 오류가 발생하지 않았지만 부작용이 나타났습니다. 첫 번째 열린 위치가 필요에 따라 닫히지 않았습니다.

비교를 위해 첫 번째 닫는 차트는 "원래대로"이지만 오류 131이 계속 발생합니다.

오류가 없는 차트이지만 첫 번째(어떤 이유로든 첫 번째) 열린 위치가 잘못 마감된 경우:

 

닫는 코드는 다음과 같았습니다.

파일:
codv1.mq4  8 kb