다른 날에는 이 기능을 약간 변경하고 파일의 첫 번째 줄을 작성하는 기능을 담당하는 fs 매개변수를 추가했습니다. 이 매개변수는 나머지 줄(예: 테이블 헤더)과 다릅니다. 첫 번째 줄은 두 가지 조건이 동시에 충족되는 경우에만 파일에 기록됩니다. 줄의 길이가 0보다 크고 파일 크기가 0입니다. 그리고 이전 버전과의 호환성을 유지하기 위해 새 매개 변수를 선택 사항으로 만들었습니다.
WritingLineInFile() 함수의 매개변수:
fn - 파일 이름
st - 파일에 쓰여진 문자열
fs - 첫 번째 줄(테이블 헤더)
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.04.2012 |//+----------------------------------------------------------------------------+//| Описание : Запись строки в файл |//| Параметры: |//| fn - имя файла |//| st - строка |//| fs - первая строка (шапка таблицы) |//+----------------------------------------------------------------------------+void WritingLineInFile( string fn, string st, string fs= "" ) {
int fh= FileOpen (fn, FILE_READ | FILE_WRITE , " " );
if (fh> 0 ) {
if ( FileSize (fh)== 0 && StringLen (fs)> 0 ) FileWrite (fh, fs);
FileSeek (fh, 0 , SEEK_END );
FileWrite (fh, st);
FileClose (fh);
}
}
정당화해, 나타샤, 왜 안 돼? 반대로 월간 순환 종료 후 연도를 반대 방향으로 줄이는 것이 논리적으로 보입니다. 당신이 지적한 표현에서, 연도를 줄이는 것은 분을 완전히 되감고 한 시간 후에 시침을 뒤로 움직이는 것과 같습니다. 기능의 고유한 버전을 가져와서 논의할 것입니다. 아마도 귀하의 버전이 저보다 더 성공적일 것입니다.
글쎄, 나는이 기능에 대한 철저한 테스트를 마친 것 같습니다. 필요한 경우 스프레드를 고려하여 최적화하려고 했습니다... 이 함수는 현재 열려 있는 포지션의 최대 손실을 포인트 단위로 반환합니다. 일반적으로 매개변수를 함수에 전달하여 분석에 필요한 위치를 필터링할 수 있습니다.
sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
tf - 막대의 높음 및 낮음 값을 볼 차트 기간입니다. 기본값 0 - 현재 기간.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.05.2012 |//| Описание : Возвращает максимальную просадку в пунктах текущих открытых |//| позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//+----------------------------------------------------------------------------+int GetDrawdownOpenPosInPoint( string sy= "" , int op=- 1 , int mn=- 1 , int tf= 0 ) {
if (sy== "0" ) sy= Symbol ();
if (tf== 0 ) tf= Period ();
datetime to=TimeOpenFirstPos(sy, op, mn); // Время открытия первой позицииdatetime tb=GetTimeOpenBar(sy, tf, to);
int dd, md= 0 ; // Просадкаdouble po, sp; // Пункт, спрэдint i, k= OrdersTotal (); // Номера позицийint nb; // Номер бараif (tb> 0 ) {
while (tb< TimeCurrent ()) {
dd= 0 ;
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
if ((op< 0 || OrderType ()==op) && ( OrderType ()==OP_BUY || OrderType ()==OP_SELL)) {
if (tb> OrderOpenTime ()) {
nb= iBarShift ( OrderSymbol (), tf, tb, True);
if (nb>= 0 ) {
po= MarketInfo ( OrderSymbol (), MODE_POINT);
if (po== 0 ) Message( "В обзоре рынка отсутствует символ " + OrderSymbol ()+ ". Точность расчётов не гарантируется!" );
else {
if ( OrderType ()==OP_BUY) {
dd+=( OrderOpenPrice ()- iLow ( OrderSymbol (), tf, nb)+po)/po;
}
if ( OrderType ()==OP_SELL) {
sp=po* MarketInfo ( OrderSymbol (), MODE_SPREAD);
dd+=( iHigh ( OrderSymbol (), tf, nb)- OrderOpenPrice ()+sp)/po;
}
}
}
}
}
}
}
}
if (md<dd) md=dd;
tb+= 60 *tf;
}
}
return (md);
}
추신. GetDrawdownOpenPosInPoint() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
KimIV : 정당화해, 나타샤, 왜 안 돼? 반대로 월간 순환 종료 후 연도를 반대 방향으로 줄이는 것이 논리적으로 보입니다. 당신이 지적한 표현에서, 연도를 줄이는 것은 분을 완전히 되감고 한 시간 후에 시침을 뒤로 움직이는 것과 같습니다. 기능의 고유한 버전을 가져와서 논의할 것입니다. 아마도 귀하의 버전이 저보다 더 성공적일 것입니다.
저는 이렇게 추론했습니다. 과거와 미래의 7분기 시작을 결정해야 한다고 가정해 보겠습니다. 그런 다음 각각 nq= -7 및 nq=7입니다. Mathfloor 는 과거에 대해 -2를 반환하고 미래에 대해 +1을 반환합니다(문서의 기능 설명에 따라). 따라서 과거 상황에 대해 미래에 추가하는 것보다 1년 더 뺍니다.... .. 과거에 대한 추가 계산을 계속하면 연도를 다시 줄여야 하고 2009년에 자신을 찾을 수 있습니다 .....
안타깝게도 시간이 부족하여(사이트 페이지를 읽을 시간이 거의 없음) 지금 제 생각에 정확한 코드를 제공할 수 없지만 필요한 경우 수정하는 것이 어렵지 않을 것이라고 생각합니다.
저는 이렇게 추론했습니다. 과거와 미래의 7분기 시작을 결정해야 한다고 가정해 보겠습니다. 그런 다음 각각 nq= -7 및 nq=7입니다. Mathfloor는 과거에 대해 -2를 반환하고 미래에 대해 +1을 반환합니다(문서의 기능 설명에 따라). 따라서 과거 상황에 대해 미래에 추가하는 것보다 1년 더 뺍니다.... . 과거에 대한 추가 계산을 계속하면 연도를 다시 줄여야하고 2009 년에 자신을 찾을 수 있습니다 ...
나는 당신의 추론에 동의하지만 작업과 관련된 데이터 유형을 잊어 버렸습니다. MathFloor() 함수 는 완전히 생략할 수 있습니다. 첨부 파일에서 스크립트의 출력을 참조하십시오.
안녕하세요, 이고르))))) 솔직히 말씀드리면 답변이 잘 이해가 안 되었고 첨부된 대본에서도 명확히 설명이 안되어 오히려 그 반대입니다...)))) 하지만 시간이 지나면 알게 되리라 생각합니다 )))) 리턴 라인 (StrToTime(ye+"."+mo+".01"))에 플러스가 있는 이유를 알려주세요.
WritingLineInFile() 함수.
다른 날에는 이 기능을 약간 변경하고 파일의 첫 번째 줄을 작성하는 기능을 담당하는 fs 매개변수를 추가했습니다. 이 매개변수는 나머지 줄(예: 테이블 헤더)과 다릅니다. 첫 번째 줄은 두 가지 조건이 동시에 충족되는 경우에만 파일에 기록됩니다. 줄의 길이가 0보다 크고 파일 크기가 0입니다. 그리고 이전 버전과의 호환성을 유지하기 위해 새 매개 변수를 선택 사항으로 만들었습니다.
WritingLineInFile() 함수의 매개변수:
추신. 기능 테스트를 위한 스크립트가 첨부되어 있습니다.
DateBeginQuarter
우선 다음 라인을 이해하려고 노력합니다.
기본적으로 nq = 0이므로 결과가 항상 0이기 때문에 MathMod (nq/4) 표현식에서 무엇을 얻는지 명확하지 않습니다. 0/4에는 나머지가 없기 때문에 두 번째 줄도 명확하지 않습니다. 설명 부탁드립니다.
질문해 주셔서 감사합니다. 덕분에 기능을 다시 확인해보니 오류가 있네요. 인라인
빼기 기호를 더하기로 바꿔야 합니다.
그리고 이제 질문의 요점으로. nq 는 항상 0과 같지 않습니다. 음수를 포함하여 모든 정수 값이 있을 수 있습니다. 지정한 행은 nq 가 4의 배수인 경우, 즉 4분기(1년)를 더하거나 빼야 하는 경우에 작동합니다.
질문해 주셔서 감사합니다. 덕분에 기능을 다시 확인해보니 오류가 있네요. 인라인
빼기 기호를 더하기로 바꿔야 합니다.
그리고 이제 질문의 요점으로. nq 는 항상 0과 같지 않습니다. 음수를 포함하여 모든 정수 값이 있을 수 있습니다. 지정한 행은 nq 가 4의 배수인 경우, 즉 4분기(1년)를 더하거나 빼야 하는 경우에 작동합니다.
답변 감사합니다, Igor .... 평소보다 더 오래 기능을 알아 냈지만 여전히 알아 냈습니다))))))) 같은 기능에서 연도를 줄일 필요가없는 것 같습니다 표현식:
그러면 모든 것이 옳을 것입니다.
...같은 함수에서 표현에서 연도를 줄일 필요는 없는 것 같습니다...
GetDrawdownOpenPosInPoint() 함수
글쎄, 나는이 기능에 대한 철저한 테스트를 마친 것 같습니다. 필요한 경우 스프레드를 고려하여 최적화하려고 했습니다... 이 함수는 현재 열려 있는 포지션의 최대 손실을 포인트 단위로 반환합니다. 일반적으로 매개변수를 함수에 전달하여 분석에 필요한 위치를 필터링할 수 있습니다.
추신. GetDrawdownOpenPosInPoint() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
정당화해, 나타샤, 왜 안 돼? 반대로 월간 순환 종료 후 연도를 반대 방향으로 줄이는 것이 논리적으로 보입니다. 당신이 지적한 표현에서, 연도를 줄이는 것은 분을 완전히 되감고 한 시간 후에 시침을 뒤로 움직이는 것과 같습니다. 기능의 고유한 버전을 가져와서 논의할 것입니다. 아마도 귀하의 버전이 저보다 더 성공적일 것입니다.
저는 이렇게 추론했습니다. 과거와 미래의 7분기 시작을 결정해야 한다고 가정해 보겠습니다. 그런 다음 각각 nq= -7 및 nq=7입니다. Mathfloor 는 과거에 대해 -2를 반환하고 미래에 대해 +1을 반환합니다(문서의 기능 설명에 따라). 따라서 과거 상황에 대해 미래에 추가하는 것보다 1년 더 뺍니다.... .. 과거에 대한 추가 계산을 계속하면 연도를 다시 줄여야 하고 2009년에 자신을 찾을 수 있습니다 .....
안타깝게도 시간이 부족하여(사이트 페이지를 읽을 시간이 거의 없음) 지금 제 생각에 정확한 코드를 제공할 수 없지만 필요한 경우 수정하는 것이 어렵지 않을 것이라고 생각합니다.
저는 이렇게 추론했습니다. 과거와 미래의 7분기 시작을 결정해야 한다고 가정해 보겠습니다. 그런 다음 각각 nq= -7 및 nq=7입니다. Mathfloor는 과거에 대해 -2를 반환하고 미래에 대해 +1을 반환합니다(문서의 기능 설명에 따라). 따라서 과거 상황에 대해 미래에 추가하는 것보다 1년 더 뺍니다.... . 과거에 대한 추가 계산을 계속하면 연도를 다시 줄여야하고 2009 년에 자신을 찾을 수 있습니다 ...
나는 당신의 추론에 동의하지만 작업과 관련된 데이터 유형을 잊어 버렸습니다. MathFloor() 함수 는 완전히 생략할 수 있습니다. 첨부 파일에서 스크립트의 출력을 참조하십시오.