포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 639

[삭제]  
Top2n :

네, 정말 감사합니다. 어떻게 도움을 주셨는지는 말씀이 없으시며 모든 것이 명확합니다! 시원한!!!

가장 직접적이고 효과적인 방법으로 중요한 기술을 스스로 점차적으로 배울 수 있다면 멋질 것입니다.

그리고 다른 사람들도 같은 방식으로 이익을 얻을 수 있다면.

[삭제]  

Che는 생각하지 않는다) 줄이 있다 그리고 이 줄이 바뀌었는지 확인하는 방법

 
ClanVi :

Che는 생각하지 않는다) 줄이 있다 그리고 이 줄이 바뀌었는지 확인하는 방법



CHARTEVENT_OBJECT_CHANGE

속성 대화 상자를 통해 그래픽 개체의 속성 변경

"sparam" 매개변수는 변경된 개체의 이름을 반환합니다. 객체가 귀하의 것이라면 해당 객체에 중요한 속성을 확인하십시오.
[삭제]  
barabashkakvn :


CHARTEVENT_OBJECT_CHANGE

속성 대화 상자를 통해 그래픽 개체의 속성 변경

"sparam" 매개변수는 변경된 개체의 이름을 반환합니다. 객체가 귀하의 것이라면 해당 객체에 중요한 속성을 확인하십시오.

물건이 없어도 가격을 알고 이게 선이라 변했는지 확인이 필요하다 이 가격을 비교해야 하는게 뻔한데 어떻게 해야할지 모르겠다)

좋아

 if ( NormalizeDouble (Price, Digits )- NormalizeDouble (Price2, Digits )!= 0 )
Price2 = Price;

측정 가격을 얻을 수 있는 곳2))

 
ClanVi :

물건이 없어도 가격을 알고 이게 선이라 변했는지 확인이 필요하다 이 가격을 비교해야 하는게 뻔한데 어떻게 해야할지 모르겠다)

좋아

측정 가격을 얻을 수 있는 곳2))


마지막 막대의 가격은 Price2가 되며 입찰가를 이전 막대의 가격과 비교하여 선택하려면 시작, 닫기, 하이, 로우 중에서 선택합니다.

중간 가격을 원하면 틱 기록을 저장하고 거기에서 이전 가격을 가져와야합니다. 그러면 입찰가가 이전 틱의 가격과 비교됩니다.

그리고 가격 정상화의 포인트는 무엇입니까? 계산된 값을 정규화한 다음 거래 주문 으로 이동해야 하며 가격은 이미 정규화되어 있습니다.

[삭제]  
evillive :

마지막 막대의 가격은 Price2입니다.

중간 가격을 원하면 틱 기록을 저장하고 거기에서 이전 가격을 가져와야 합니다.

모두 알아냈습니다 :)

아니, 거기에서 술집으로 연습하지 않았을 것입니다.

 
신호에서 최대 위험은 작성자가 사용하는 위험만 설정할 수 있고 더 이상은 설정할 수 없습니까?
 
simpleton :

아래 검색 방법은 약간 다릅니다.

 #property strict

/******************************************************************************/
bool AddValue( double &array[], const double value) {
   const int size = ArraySize (array);

   if ( ArrayResize (array, size + 1 ) != size + 1 ) {
     return false ; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
   return true ; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound( double &array[], const string name) {
   const int type = ObjectType(name);

   if (type == OBJ_TREND ) {
     switch (( color )ObjectGet(name, OBJPROP_COLOR )) { // Тип color допустимо использовать в switch
     case Goldenrod:
     case Gainsboro:
     case White:
       if (!AddValue(array, ObjectGetValueByShift(name, 1 ))) {
         return false ; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

   return true ; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber( double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
   const string subname = (buy ? "uptrendline" : "downtrendline" ); // существует два названия трендовых линий, первое и второе

   if ( ArrayResize (array, 0 ) != 0 ) {
     return false ; // Ошибка, массив не может быть заполнен достоверно
  }

   for ( int i = 0 , limit = ObjectsTotal ( OBJ_TREND ); i < limit; i++) {
     if (!AddValueIfFound(array, subname + IntegerToString (i))|| !FilTrenLin(subname+IntegerToString(i) )) { \\ Вот куда вставил
       return false ; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

   return true ; // Нет ошибки, массив заполнен достоверно
}
/* ** ** *** ******** **** *** **** **** *** *** *** *** **** **** **** **** **** **** *** **** */
 bool FilTrenLin ( string name) {

const string   dt_123 = TimeToStr( TimeCurrent (),TIME_SECONDS); //
const datetime   vremnin= StrToTime(dt_123); // Присваиваем время в секундах 
  
    
const datetime     vrem2kor= ObjectGet(name,OBJPROP_TIME2); // время второй координаты
     MqlDateTime str1;
     TimeToStruct (vrem2kor,str2);
const int     PjatPon=str1.sec;

     if (PjatPon+ 3600 >=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массив
   Print ( "  PjatPon  " , PjatPon, "  vremnin " ,vremnin, "  vrem2kor " ,vrem2kor);
        return false ;
    }  
   return true ;
}
/******************************************************************************/ void FillAndPrint( double &array[], const bool buy) {    if (MassTrendNumber(array, buy)) {      const int limit = ArraySize (array);      Print ( "Найдено объектов: " , limit);      for ( int i = 0 ; i < limit; i++) {        Print ( "Price[" , i, "] = " , DoubleToStr(array[i], Digits ));     }   } else {      Print ( "Чёрт!" );   } }

뻔뻔하게 받아들이지 마, 나도 벌써 신청할 줄도 모르는데 어떻게 할 수가 없어. 배열을 컴파일할 수 있다면 할 일이 없기 때문에 신호를 필터링할 때 조건에 점수를 매길 수 있다고 생각했습니다.

[삭제]  
Top2n :

뻔뻔하게 받아들이지 마, 나도 벌써 신청할 줄도 모르는데 어떻게 할 수가 없어. 배열을 컴파일 할 수 있다면 할 일이 없기 때문에 신호 필터링에서 조건에 점수를 매길 수 있다고 생각했습니다.

TimeCurrent() 함수가 오버로드되었습니다. datetime형 이 무엇인지에 대한 설명을 읽으면 함수의 첫 번째 버전이 매우 적합하다는 것을 알 수 있습니다.

 #property strict

/******************************************************************************/
long DiffInSecs( const datetime dt1, const datetime dt2) {
   return dt1 - dt2;
}

/******************************************************************************/
void OnStart () {
   const datetime dt = TimeCurrent ();

   Sleep ( 5555 );
   Print ( "Diff in secs = " , DiffInSecs( TimeCurrent (), dt));
}

실행은 다음을 제공합니다.

 01 : 10 : 43 Script 2 EURUSDm,H1: loaded successfully
01 : 10 : 43 2 EURUSDm,H1: initialized
01 : 10 : 49 2 EURUSDm,H1: Diff in secs = 6
01 : 10 : 49 2 EURUSDm,H1: uninit reason 0
01 : 10 : 49 Script 2 EURUSDm,H1: removed

반면에 시점의 차이를 구하지 않고 이러한 순간을 비교할 수 있습니다(동시에 조건식을 다시 적용합니다).

 #property strict

/******************************************************************************/
void test( const datetime dt) {
   Sleep ( 2000 );
   Print ( "Момент времени dt " , TimeCurrent () < dt ? "НЕ " : "" , "достигнут" );
}

/******************************************************************************/
void OnStart () {
   const datetime dt1 = TimeCurrent ();
   const datetime dt2 = dt1 + 5 ;

  test(dt2);
  test(dt2);
  test(dt2);
  test(dt2);
}

실행은 다음을 제공합니다.

 01 : 30 : 29 Script 2 EURUSDm,H1: loaded successfully
01 : 30 : 29 2 EURUSDm,H1: initialized
01 : 30 : 31 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01 : 30 : 33 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01 : 30 : 35 2 EURUSDm,H1: Момент времени dt достигнут
01 : 30 : 38 2 EURUSDm,H1: Момент времени dt достигнут
01 : 30 : 38 2 EURUSDm,H1: uninit reason 0
01 : 30 : 38 Script 2 EURUSDm,H1: removed

적용된 아이디어의 본질을 이해하고 날짜/시간 유형이 무엇인지 기억한 후 필요한 정확도가 초 단위를 초과하지 않으면 시간 포인트로 작업하는 것이 더 이상 어려움을 일으키지 않습니다.

 
simpleton :

TimeCurrent() 함수가 오버로드되었습니다. datetime형 이 무엇인지에 대한 설명을 읽으면 함수의 첫 번째 버전이 매우 적합하다는 것을 알 수 있습니다.

실행은 다음을 제공합니다.

반면에 시점의 차이를 구하지 않고 이러한 순간을 비교할 수 있습니다(동시에 조건식을 다시 적용합니다).

실행은 다음을 제공합니다.

적용된 아이디어의 본질을 이해하고 날짜/시간 유형이 무엇인지 기억한 후 필요한 정확도가 초 단위를 초과하지 않으면 시간 포인트로 작업하는 것이 더 이상 어려움을 일으키지 않습니다.


솔직히 어떻게 신청하는지 이해가 가지 않았습니다. 밀리미터 끝까지 남아 있는데, 거의 모든 것이 끝나면 멈추는 것이 아쉽습니다.

객체의 시간 (2nd parameter+3600sec>current)||(첫 번째 매개변수의 시간 - 2번째 매개변수의 시간)<3600sec 인 경우 배열에 가격을 쓰지 않는 작업입니다.

 /******************************************************************************/
bool MassTrendNumber( double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
   const string subname = (buy ? "uptrendline" : "downtrendline" ); // существует два названия трендовых линий, первое и второе

   if ( ArrayResize (array, 0 ) != 0 ) {
     return false ; // Ошибка, массив не может быть заполнен достоверно
  }

   for ( int i = 0 , limit = ObjectsTotal ( OBJ_TREND ); i < limit+ 2 ; i++) {
     if (!AddValueIfFound(array, subname + IntegerToString (i)) ||!FilTrenLin(subname + IntegerToString (i)) { // Условие вставил вот сюда
       return false ; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }
 
   return true ; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin( string name) {

 const    datetime     dt = TimeCurrent ();
 const    datetime    dt1 = ObjectGet(name,OBJPROP_TIME1);
 const    datetime    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 сек, то запускаем ошибку, чтоб цена не записалась в массив.
     {   return false ;
     }  
   return true ;
} 
/******************************************************************************/
long DiffInSecs( const datetime dt1, const datetime dt2) {
   return dt1 - dt2;
}