#property strict/******************************************************************************/bool AddValue( double &array[], constdouble value) {
constint size = ArraySize (array);
if ( ArrayResize (array, size + 1 ) != size + 1 ) {
returnfalse ; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue ; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound( double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND ) {
switch (( color )ObjectGet(name, OBJPROP_COLOR )) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1 ))) {
returnfalse ; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue ; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber( double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline" ); // существует два названия трендовых линий, первое и второеif ( ArrayResize (array, 0 ) != 0 ) {
returnfalse ; // Ошибка, массив не может быть заполнен достоверно
}
for ( int i = 0 , limit = ObjectsTotal ( OBJ_TREND ); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString (i))|| !FilTrenLin(subname+IntegerToString(i) )) { \\ Вот куда вставилreturnfalse ; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue ; // Нет ошибки, массив заполнен достоверно
}
/*** ** *** ******** **** *** **** **** *** *** *** *** **** **** **** **** **** **** *** **** */boolFilTrenLin( string name) {
conststring dt_123 = TimeToStr( TimeCurrent (),TIME_SECONDS); //constdatetime vremnin= StrToTime(dt_123); // Присваиваем время в секундах constdatetime vrem2kor= ObjectGet(name,OBJPROP_TIME2); // время второй координатыMqlDateTime str1;
TimeToStruct (vrem2kor,str2);
constint PjatPon=str1.sec;
if (PjatPon+ 3600 >=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массивPrint ( " PjatPon " , PjatPon, " vremnin " ,vremnin, " vrem2kor " ,vrem2kor);
returnfalse ;
}
returntrue ;
}
/******************************************************************************/void FillAndPrint( double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize (array);
Print ( "Найдено объектов: " , limit);
for ( int i = 0 ; i < limit; i++) {
Print ( "Price[" , i, "] = " , DoubleToStr(array[i], Digits ));
}
} else {
Print ( "Чёрт!" );
}
}
뻔뻔하게 받아들이지 마, 나도 벌써 신청할 줄도 모르는데 어떻게 할 수가 없어. 배열을 컴파일할 수 있다면 할 일이 없기 때문에 신호를 필터링할 때 조건에 점수를 매길 수 있다고 생각했습니다.
반면에 시점의 차이를 구하지 않고 이러한 순간을 비교할 수 있습니다(동시에 조건식을 다시 적용합니다).
실행은 다음을 제공합니다.
적용된 아이디어의 본질을 이해하고 날짜/시간 유형이 무엇인지 기억한 후 필요한 정확도가 초 단위를 초과하지 않으면 시간 포인트로 작업하는 것이 더 이상 어려움을 일으키지 않습니다.
솔직히 어떻게 신청하는지 이해가 가지 않았습니다. 밀리미터 끝까지 남아 있는데, 거의 모든 것이 끝나면 멈추는 것이 아쉽습니다.
객체의 시간 (2nd parameter+3600sec>current)||(첫 번째 매개변수의 시간 - 2번째 매개변수의 시간)<3600sec 인 경우 배열에 가격을 쓰지 않는 작업입니다.
/******************************************************************************/bool MassTrendNumber( double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline" ); // существует два названия трендовых линий, первое и второеif ( ArrayResize (array, 0 ) != 0 ) {
returnfalse ; // Ошибка, массив не может быть заполнен достоверно
}
for ( int i = 0 , limit = ObjectsTotal ( OBJ_TREND ); i < limit+ 2 ; i++) {
if (!AddValueIfFound(array, subname + IntegerToString (i)) ||!FilTrenLin(subname + IntegerToString (i)) { // Условие вставил вот сюдаreturnfalse ; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue ; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/bool FilTrenLin( string name) {
constdatetime dt = TimeCurrent ();
constdatetime dt1 = ObjectGet(name,OBJPROP_TIME1);
constdatetime dt2 = ObjectGet(name,OBJPROP_TIME2);
Print ( " DiffInSecs(dt,dt2) " , DiffInSecs(dt,dt2), " DiffInSecs(dt2,dt1)) " ,DiffInSecs(dt2,dt1), " dt1 " ,dt1);
if (DiffInSecs(dt,dt2)< 3600 ||DiffInSecs(dt2,dt1)< 3600 ) // Если время объекта второго параметра + 3600 сек > текущего времени,
или если разница первого и второго параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
{ returnfalse ;
}
returntrue ;
}
/******************************************************************************/long DiffInSecs( constdatetime dt1, constdatetime dt2) {
return dt1 - dt2;
}
네, 정말 감사합니다. 어떻게 도움을 주셨는지는 말씀이 없으시며 모든 것이 명확합니다! 시원한!!!
가장 직접적이고 효과적인 방법으로 중요한 기술을 스스로 점차적으로 배울 수 있다면 멋질 것입니다.
그리고 다른 사람들도 같은 방식으로 이익을 얻을 수 있다면.
Che는 생각하지 않는다) 줄이 있다 그리고 이 줄이 바뀌었는지 확인하는 방법
Che는 생각하지 않는다) 줄이 있다 그리고 이 줄이 바뀌었는지 확인하는 방법
CHARTEVENT_OBJECT_CHANGE
속성 대화 상자를 통해 그래픽 개체의 속성 변경
CHARTEVENT_OBJECT_CHANGE
속성 대화 상자를 통해 그래픽 개체의 속성 변경
물건이 없어도 가격을 알고 이게 선이라 변했는지 확인이 필요하다 이 가격을 비교해야 하는게 뻔한데 어떻게 해야할지 모르겠다)
좋아
측정 가격을 얻을 수 있는 곳2))
물건이 없어도 가격을 알고 이게 선이라 변했는지 확인이 필요하다 이 가격을 비교해야 하는게 뻔한데 어떻게 해야할지 모르겠다)
좋아
측정 가격을 얻을 수 있는 곳2))
마지막 막대의 가격은 Price2가 되며 입찰가를 이전 막대의 가격과 비교하여 선택하려면 시작, 닫기, 하이, 로우 중에서 선택합니다.
중간 가격을 원하면 틱 기록을 저장하고 거기에서 이전 가격을 가져와야합니다. 그러면 입찰가가 이전 틱의 가격과 비교됩니다.
그리고 가격 정상화의 포인트는 무엇입니까? 계산된 값을 정규화한 다음 거래 주문 으로 이동해야 하며 가격은 이미 정규화되어 있습니다.
마지막 막대의 가격은 Price2입니다.
중간 가격을 원하면 틱 기록을 저장하고 거기에서 이전 가격을 가져와야 합니다.
모두 알아냈습니다 :)
아니, 거기에서 술집으로 연습하지 않았을 것입니다.
아래 검색 방법은 약간 다릅니다.
뻔뻔하게 받아들이지 마, 나도 벌써 신청할 줄도 모르는데 어떻게 할 수가 없어. 배열을 컴파일할 수 있다면 할 일이 없기 때문에 신호를 필터링할 때 조건에 점수를 매길 수 있다고 생각했습니다.
뻔뻔하게 받아들이지 마, 나도 벌써 신청할 줄도 모르는데 어떻게 할 수가 없어. 배열을 컴파일 할 수 있다면 할 일이 없기 때문에 신호 필터링에서 조건에 점수를 매길 수 있다고 생각했습니다.
TimeCurrent() 함수가 오버로드되었습니다. datetime형 이 무엇인지에 대한 설명을 읽으면 함수의 첫 번째 버전이 매우 적합하다는 것을 알 수 있습니다.
실행은 다음을 제공합니다.
반면에 시점의 차이를 구하지 않고 이러한 순간을 비교할 수 있습니다(동시에 조건식을 다시 적용합니다).
실행은 다음을 제공합니다.
적용된 아이디어의 본질을 이해하고 날짜/시간 유형이 무엇인지 기억한 후 필요한 정확도가 초 단위를 초과하지 않으면 시간 포인트로 작업하는 것이 더 이상 어려움을 일으키지 않습니다.
TimeCurrent() 함수가 오버로드되었습니다. datetime형 이 무엇인지에 대한 설명을 읽으면 함수의 첫 번째 버전이 매우 적합하다는 것을 알 수 있습니다.
실행은 다음을 제공합니다.
반면에 시점의 차이를 구하지 않고 이러한 순간을 비교할 수 있습니다(동시에 조건식을 다시 적용합니다).
실행은 다음을 제공합니다.
적용된 아이디어의 본질을 이해하고 날짜/시간 유형이 무엇인지 기억한 후 필요한 정확도가 초 단위를 초과하지 않으면 시간 포인트로 작업하는 것이 더 이상 어려움을 일으키지 않습니다.
솔직히 어떻게 신청하는지 이해가 가지 않았습니다. 밀리미터 끝까지 남아 있는데, 거의 모든 것이 끝나면 멈추는 것이 아쉽습니다.
객체의 시간 (2nd parameter+3600sec>current)||(첫 번째 매개변수의 시간 - 2번째 매개변수의 시간)<3600sec 인 경우 배열에 가격을 쓰지 않는 작업입니다.