[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 309

 
Zhunko에게 정말 감사합니다. 모든 것이 부메랑처럼 잘 돌아옵니다.
 
artmedia70 :
정확히. 전역 변수 Reason은 값을 가져오지만 deinit()이 아니라 init()에서 가져옵니다. 따라서 init()를 실행할 때 마지막 초기화 해제의 이유를 볼 수 있고 값에 따라 하나를 수행할 수 있습니다. 또는 다른 행동. 하지만 제대로 작동하지 않습니다.

당신은 그것을 하는 방법을 들었습니다. deinit()에서 마지막 초기화 해제의 이유를 찾아 전역 수준에서 선언된 변수를 통해 전달합니다. init()에서 변수 값을 확인하고 마지막 초기화 해제 이유를 찾습니다. 효과가있다!.

추신 분명히 모든 사람이 init() / deinit()가 전역 수준에서 선언된 변수의 값을 변경하지 않는다는 것을 깨닫는 것은 아닙니다. 이것이 함수 내부의 연산자에 명시적으로 표시되지 않은 경우입니다.

실제로 init()에서는 주문을 닫지 않는 것이 좋습니다. 거기에서 MarketInfo ()는 종종 예상대로 작동하지 않습니다.

 int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
...
int init ()
{
...
       if ( DeinitReason == 3 ) // если смена таймфрейма
...
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   Print ( "DeinitReason " ,DeinitReason);
//----
   return ( 0 );
  }
 
Mislaid :
당신은 그것을 하는 방법을 들었습니다. deinit()에서 마지막 초기화 해제의 이유를 찾아 전역 수준에서 선언된 변수를 통해 전달합니다. init()에서 변수 값을 확인하고 마지막 초기화 해제 이유를 찾습니다. 효과가있다!.
Artyom이 M5 TF에서 전환하는 데 문제가 있음을 깨달았습니다. 오류가 있습니다. 이것이 사실인지 확인해야 합니다. 아마도 MT4 버그 일 것입니다.
 
Zhunko :
이 기능으로 무엇을 할 것인지 제안했습니다. 이러한 기능은 일반적으로 기록을 통해 실행됩니다.

함수가 주기를 중심으로 구동될 것이라고는 상상조차 할 수 없습니다...
 
hoz :

함수가 주기를 중심으로 구동될 것이라고는 상상조차 할 수 없습니다...

예, 부탁합니다 :
 for (i= OrdersTotal ()- 1 ;i>= 0 ;i--){
     Print (GetOrderInfo(i,OrderMagic,.....)); // вызов пользовательской функции 
}

for (i= 0 ;i< OrdersTotal ();i++){ /// вызов функции "ордерс тотал" на каждой итерации

}
 
Zhunko :
Artyom이 M5 TF에서 전환하는 데 문제가 있음을 깨달았습니다. 오류가 있습니다. 이것이 사실인지 확인해야 합니다. 아마도 MT4 버그 일 것입니다.

아니요, 이것은 버그가 아닙니다. 여기 고문이 있습니다. M1에서 H1으로 기간 변경

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   Print ( "DeinitReason " ,DeinitReason);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+  
19:20:02 111 CADJPY,M15: 초기화됨
19:20:09 111 CADJPY,M15: DeinitReason 3
19:20:09 111 CADJPY,M15: 초기화 해제
19:20:09 111 CADJPY,M15: 단위 이유 3
19:20:09 Supertrend[1] CADJPY,M15: 초기화 해제
19:20:09 Supertrend[1] CADJPY,M15: 단위 이유 3
19:20:09 HLC CADJPY,M15: 초기화 해제
19:20:09 HLC CADJPY, M15: 단위 이유 3
19:20:09 AMA 최적화1 CADJPY,M15: 초기화 해제
19:20:09 AMA 최적화1 CADJPY,M15: 단위 이유 3
19:20:09 AMA 최적화1 CADJPY,M15: 초기화 해제
19:20:09 AMA 최적화1 CADJPY,M15: 단위 이유 3
19:20:09 Supertrend[1] CADJPY,H1: 초기화
19:20:09 HLC CADJPY,H1: 초기화됨
19:20:09 AMA 최적화1 CADJPY,H1: 초기화됨
19:20:09 AMA 최적화1 CADJPY,H1: 초기화됨
19:20:09 111 CADJPY,H1: 초기화됨
 
Mislaid :

아니요, 이것은 버그가 아닙니다. 여기 고문이 있습니다. M1에서 H1으로 기간 변경

글쎄, 좋아! 그리고 나 역시 모든 것이 비초기화의 이유 와 강하게 연결되어 있다.

잘못 놓친 :

실제로 init()에서는 주문을 닫지 않는 것이 좋습니다. 거기에서 MarketInfo ()는 종종 예상대로 작동하지 않습니다.

네. 금지되어 있습니다. 도움말에 적혀있습니다.

호즈 :

함수가 주기를 중심으로 구동될 것이라고는 상상조차 할 수 없습니다...
평범한 것.
 
Zhunko :

글쎄, 좋아! 그리고 나 역시 비초기화의 원인에 강하게 얽매여 있다.

네. 금지되어 있습니다. 도움말에 적혀있습니다. 평범한 것.

다음은 테스트를 위한 최종 버전입니다. init()/deinit()가 때때로 print() 와 친숙하지 않기 때문에 이전 것은 그다지 성공적이지 않았습니다.

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
bool firststart = true ;
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   firststart = true ;
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if ( firststart )
  {
       Print ( "DeinitReason " , DeinitReason, " " , Period ( ) );
      firststart = false ;
  }
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

나는 스스로에게 함수를 작성해 달라고 부탁했다. 결론은 N- 촛불이 특정 방향으로 롤백할 때 양초의 수를 계산하는 것이 필요하다는 것입니다. 하지만. 이를 위한 몇 가지 조건이 있거나 시간이 지남에 따라 목록이 있을 것입니다.

예를 들어 추세가 아래쪽으로 향하고 있다고 가정해 보겠습니다. 롤백이 시작되었습니다. 나는 5개의 양초가 지나갔고 각 양초가 강세였고, 예를 들어 각 양초의 크기가 지정된 i_sizeOfCurrBar 및 다른 것보다 큰 경우를 원합니다. 조건에 따라 지속적으로 강세 막대의 수를 표시하고 함수에서 일부 결과를 반환합니다.

그것을 쓰는 가장 좋은 방법은 무엇입니까? 현재 저는 글을 쓰기 시작했습니다. 여기에서 막대의 주기를 실행하고 고정된 막대 수가 아니라 막대로 역사의 깊이에서 보기를 제한해야 한다는 것을 이해합니다. 조건에 관심을 가져주세요.

내가 가진 것은 다음과 같습니다.

 int LastCandlesType()
{
   bool up,     // Свеча направлена вверх
        dn;     // Свеча направлена вниз
   int cnt;     // Счётчик идущих друг за другом бычьих свечей
   
   for ( int i= Bars - 1 ; i>= Bars - 6 ; i--)
   {
       if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point)      // Пропускаем все бары, размера меньше заданного внешним параметром.
           continue ;
      
       if (Close[i] > Open[i])                               // 
          up = true ;

      cnt++;
   }
   if (cnt == 5 )
       return (BULL_CANDLES);
}

현재로서는 끝에서 두 번째 막대에서 검색한 다음 인덱스 6이 있는 막대, 즉 연속 5개 바. 하지만 연속적으로 모두가 아니라 강세인 막대만 계산하려면 EA가 필요합니다. 어떻게 하면 더 잘 구현될까요?

크기별로 올바르게 필터링했습니다.

글쎄, 모든 것이 이미 기록되면 카운터는 이미 아래에서 nht, etvsvb 매개 변수를 사용하여 연속 막대 수를 계산하고 그러한 막대가 충분하면 일종의 막대가 반환됩니다. 함수 값.

 
Mislaid :

당신은 그것을 하는 방법을 들었습니다. deinit()에서 마지막 초기화 해제의 이유를 찾아 전역 수준에서 선언된 변수를 통해 전달합니다. init()에서 변수 값을 확인하고 마지막 초기화 해제 이유를 찾습니다. 효과가있다!.

추신 분명히 모든 사람이 init() / deinit()가 전역 수준에서 선언된 변수의 값을 변경하지 않는다는 것을 깨닫는 것은 아닙니다. 이것이 함수 내부의 연산자에 명시적으로 표시되지 않은 경우입니다.

실제로 init()에서는 주문을 닫지 않는 것이 좋습니다. 거기에서 MarketInfo ()는 종종 예상대로 작동하지 않습니다.

그리고 내가 init()에서 포지션을 닫는 것을 어디에서 볼 수 있습니까? 게시 중단 요청에 대해 한 가지 질문을 했지만 삭제 요청은 어디에서 하나요? 나는 그것에 대해 이야기하지 않았고 묻지도 않았습니다. 왜 그렇게 생각하세요?
사유: