친애하는, 나는 내가 달성하고 싶은 것을 최대한 설명하려고 노력할 것입니다 ... ..또는 성공할 것입니다 ..또는 나는 모두를 완전히 혼란스럽게 할 것입니다!
...
우리는 대화를 계속합니다 ... 내가 이해하기로는 작업을 다음과 같이 줄일 수 있습니다. 단순화하기 위해 H1 기간인 어제만 공부할 것입니다.
먼저, 종가가 시가보다 높은 가장 이른 양초(어제 차트의 왼쪽에서 본)를 찾습니다. 최초의 강세 양초를 찾고 있습니다. 그러한 양초가 발견되면 그 양초(포함)에서 시작하여 주어진 날짜의 최신 날짜까지 최고가가 가장 높은 양초를 찾아야 합니다. 예를 들어, 첫 번째 강세 양초 의 개장 시간 이 10:00이고 그 다음부터 23:00 양초까지라면 최고가가 가장 높은 양초를 찾고 있습니다. 그래서?
우리는 대화를 계속합니다 ... 내가 이해하기로는 작업을 다음과 같이 줄일 수 있습니다. 단순화하기 위해 H1 기간인 어제만 공부할 것입니다.
먼저, 종가가 시가보다 높은 가장 이른 양초(어제 차트의 왼쪽에서 본)를 찾습니다. 최초의 강세 양초를 찾고 있습니다. 그러한 양초가 발견되면 그 양초(포함)에서 시작하여 주어진 날짜의 최신 날짜까지 최고가가 가장 높은 양초를 찾아야 합니다. 예를 들어, 첫 번째 강세 양초의 개장 시간이 10:00이고 그 다음부터 23:00 양초까지라면 최고가가 가장 높은 양초를 찾고 있습니다. 그래서?
OOO, 전능하신 분을 찬양합니다... 그들은 저를 이해했습니다! 네! 네! 네! 이것이 바로 제가 달성하려는 것입니다. 알고 계시다면 방법을 알려주세요?
스크립트 코드 _" voidSetArrow(intcd,colorcl, " 이것은 사용자의 " _ OnInit()" 함수를 참조하는 코드 부분입니다. 표시기 및 코드의 전반부 script_" voidOnStart() "는 표시기의 "_OnCalculate" 기능을 의미합니까? 대략적으로 말하면 스크립트에서 먼저 1) 계산, 2) 초기화만 있습니다. 표시기에서는 그 반대가 사실입니다.
스크립트 코드 _" voidSetArrow(intcd,colorcl, " 이것은 사용자의 " _ OnInit()" 함수를 참조하는 코드 부분입니다. 표시기 및 코드의 전반부 script_" voidOnStart() "는 표시기의 "_OnCalculate" 기능을 의미합니까? 대략적으로 말하면 스크립트에서 먼저 1) 계산, 2) 초기화만 있습니다. 표시기에서는 그 반대가 사실입니다.
다른 함수 외부에 있는 사용자 정의 함수입니다.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка значка на графике, объект OBJ_ARROW. |//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow( int cd, color cl,
string nm= "" , datetime t1= 0 , double p1= 0 , int sz= 0 ) {
if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
if (t1<= 0 ) t1=Time[ 0 ];
if (p1<= 0 ) p1=Bid;
if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_ARROW , 0 , 0 , 0 );
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1 , p1);
ObjectSet(nm, OBJPROP_ARROWCODE , cd);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_WIDTH , sz);
}
longBarsBuffer[i]=High[h]+ 5 * Point (); - то что необходимо получить.
else
longBarsBuffer[i]= 0.0 ;
더 멀리
기능
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal( string sy= "" , int tf= 0 , datetime dt= 0 ) {
if (sy== "" || sy== "0" ) sy= Symbol ();
if (tf<= 0 ) tf= Period ();
if (dt<= 0 ) dt= TimeCurrent ();
if (tf> PERIOD_D1 ) {
Print ( "iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1" );
return ( 0 );
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd= 0 ; // номер бара от начала сутокwhile (TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return (bd);
}
그리고 전화
우리는 하루의 시작에서 막대의 수를 찾고(현재 날짜는 다시 계산되지 않음) 해당 막대는 기록에 기록됩니다.
int bStart = iBarOfDayReal(); //бар, с которого уходим в историю
친애하는, 나는 내가 달성하고 싶은 것을 최대한 설명하려고 노력할 것입니다 ... ..또는 성공할 것입니다 ..또는 나는 모두를 완전히 혼란스럽게 할 것입니다!
...우리는 대화를 계속합니다 ... 내가 이해하기로는 작업을 다음과 같이 줄일 수 있습니다. 단순화하기 위해 H1 기간인 어제만 공부할 것입니다.
먼저, 종가가 시가보다 높은 가장 이른 양초(어제 차트의 왼쪽에서 본)를 찾습니다. 최초의 강세 양초를 찾고 있습니다. 그러한 양초가 발견되면 그 양초(포함)에서 시작하여 주어진 날짜의 최신 날짜까지 최고가가 가장 높은 양초를 찾아야 합니다. 예를 들어, 첫 번째 강세 양초 의 개장 시간 이 10:00이고 그 다음부터 23:00 양초까지라면 최고가가 가장 높은 양초를 찾고 있습니다. 그래서?
우리는 대화를 계속합니다 ... 내가 이해하기로는 작업을 다음과 같이 줄일 수 있습니다. 단순화하기 위해 H1 기간인 어제만 공부할 것입니다.
먼저, 종가가 시가보다 높은 가장 이른 양초(어제 차트의 왼쪽에서 본)를 찾습니다. 최초의 강세 양초를 찾고 있습니다. 그러한 양초가 발견되면 그 양초(포함)에서 시작하여 주어진 날짜의 최신 날짜까지 최고가가 가장 높은 양초를 찾아야 합니다. 예를 들어, 첫 번째 강세 양초의 개장 시간이 10:00이고 그 다음부터 23:00 양초까지라면 최고가가 가장 높은 양초를 찾고 있습니다. 그래서?
OOO, 전능하신 분을 찬양합니다... 그들은 저를 이해했습니다! 네! 네! 네! 이것이 바로 제가 달성하려는 것입니다. 알고 계시다면 방법을 알려주세요?
OOO, 전능하신 분을 찬양합니다... 그들은 저를 이해했습니다! 네! 네! 네! 이것이 바로 제가 달성하려는 것입니다. 알고 계시다면 방법을 알려주세요?
이것이 어제의 촛불이면 iHigest() 의 끝이 되며 iBarShift () 에서 얻은 다음 날(즉, 오늘)의 시작 00:00 입니다.
샘플 알고리즘:
1. 오늘 우리는 어제의 시간봉 중 첫 번째 강세봉을 찾고 있습니다. endBar의 인덱스로 둡니다.
2. 오늘 첫 번째 시간별 막대를 결정합니다. 아니면 null이 될 것인가...
3. iHighest()에서 끝에서 두 번째 매개변수 endBar(또는 지정될 endBar +1)를 설정하고 마지막 매개변수는 1입니다. 필요한 간격에서 가장 높은 High를 갖는 막대의 인덱스를 얻습니다.
4. 원하는 결과 High[iHighest(적절한 매개변수 포함)] // 또는 이전 단락에서 값이 할당된 해당 변수.
OOO, 전능하신 분을 찬양합니다... 그들은 저를 이해했습니다! 네! 네! 네! 이것이 바로 제가 달성하려는 것입니다. 알고 계시다면 방법을 알려주세요?
스크립트! 우리는 시도합니다.
r772ra 정말 감사합니다!!! 스크립트는 필요한 작업을 수행합니다! 물론 마지막 코드 블록에서 모든 것이 명확하지는 않지만 알아낼 것입니다. 중요한 것은 작동합니다. 지표로 옮기도록 노력하겠습니다.
팔라딘80 :
앞으로 질문이 나타나면 프로그래머가 더 잘 이해할 수 있도록 거의 같은 방식으로 형식을 지정하십시오.물론이죠, 제가 배우겠습니다!
모두에게 큰 감사를 드립니다!
r772ra 정말 감사합니다!!! 스크립트는 필요한 작업을 수행합니다! 물론 마지막 코드 블록에서 모든 것이 명확 하지는 않지만 괜찮습니다. 제가 알아낼 것입니다. 중요한 것은 작동합니다. 지표로 옮기도록 노력하겠습니다.
물론이죠, 제가 배우겠습니다!
모두에게 큰 감사를 드립니다!
구체적으로 명확하지 않은 것은?
스크립트 코드 _" void SetArrow( int cd, color cl, " 이것은 사용자의 " _ OnInit()" 함수를 참조하는 코드 부분입니다. 표시기 및 코드의 전반부 script_" void OnStart () "는 표시기의 "_OnCalculate" 기능을 의미합니까? 대략적으로 말하면 스크립트에서 먼저 1) 계산, 2) 초기화만 있습니다. 표시기에서는 그 반대가 사실입니다.
스크립트 코드 _" void SetArrow( int cd, color cl, " 이것은 사용자의 " _ OnInit()" 함수를 참조하는 코드 부분입니다. 표시기 및 코드의 전반부 script_" void OnStart () "는 표시기의 "_OnCalculate" 기능을 의미합니까? 대략적으로 말하면 스크립트에서 먼저 1) 계산, 2) 초기화만 있습니다. 표시기에서는 그 반대가 사실입니다.
다른 함수 외부에 있는 사용자 정의 함수입니다.
다른 함수에서 함수 호출
나는 당신이 표시기에 그것을 필요로하지 않는다고 생각합니다. 버퍼는 그리기를 담당합니다.
즉.
더 멀리
기능
그리고 전화
우리는 하루의 시작에서 막대의 수를 찾고(현재 날짜는 다시 계산되지 않음) 해당 막대는 기록에 기록됩니다.