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

 
즉, 최신 버전의 고문은 어리석게도 두 줄을 남겼습니다..
 

오실레이터에서 발산을 올바르게 찾는 문제를 이해하도록 도와주세요. 이 경우 MACD로 설정합니다. 다음 알고리즘을 스케치했습니다.

1) 처음부터 막대를 세고 오실레이터에서 피크를 찾습니다.

   for ( int i=limit; i=> 0 ; i--)
    {
      MACD[i]= iMACD (Symb,TimeFrame,FastEMA,SlowEMA, 5 , PRICE_CLOSE , 0 , 0 ) 
      
       if (MACD[i]> 0 )
       {
         if (MACD[i]>MACD[i- 1 ] && MACD[i]>MACD[i- 2 ] &&
            MACD[i]>MACD[i+ 1 ] && MACD[i]>MACD[i+ 2 ])
           {
             //--- здесь вносим в массив данные о баре, чтобы его можно было снова найти (1)
           }
       }
       if (MACD[i]< 0 )
       {
         if (MACD[i]<MACD[i- 1 ] && MACD[i]<MACD[i- 2 ] &&
            MACD[i]<MACD[i+ 1 ] && MACD[i]<MACD[i+ 2 ])
           {
             //--- здесь вносим в массив данные о баре, чтобы его можно было снова найти (2)
           }
       }

2) 피크 시간을 포함하는 배열 생성:

 datetime Date_up[], Date_dn[];

조건이 충족되면 MACD[i] 값을 입력합니다. 또한 마지막 새 피크에는 인덱스 [n]이 있어야 하고 끝에서 두 번째 [n+1]이어야 합니다.

3) 상황(1)의 틀 내에서 추가 솔루션을 고려합니다.

 if (Date_up[n]<Date_up[n+ 1 ]
 { // находим индекс бара
   int i1= iBarShift (Symb,TF,Date_up[n],false);
   int i2= iBarShift (Symb,TF,Date_up[n+ 1 ],false);
  // находим пик на графике баров в пределах пяти баров
   double High1= iHighest (Symb,TF,MODE_HIGH, 5 ,i1);
   double High2= iHighest (Symb,TF,MODE_HIGH, 5 ,i2);
  
   if (High1>High2)
   {
     // ЕСТЬ ДИВЕРГЕНЦИЯ!!!
   }
 }

실제로 문제는 포인트 2에 있습니다. 시계열에서와 같이 이러한 배열을 적절하게 구성하여 값이 각각의 새로운 피크와 함께 이동하도록 하는 방법은 무엇입니까?

 
merkulov.artem :

조언을 제공. 포럼, 코드 라이브러리 및 인터넷에서 답변을 찾지 못해 도움을 요청합니다. 미리 감사드립니다.

1) "파일 작업". 교과서에서 발췌: 파일 작업을 위한 기능 그룹.

작업 파일을 찾을 수 있는 세 개의 디렉터리(하위 디렉터리 포함)가 있습니다.

/HISTORY/<현재 브로커> - 특히 FileOpenHistory 기능을 위한 것입니다.

/전문가/파일 - 일반적인 경우;

/TESTER/FILES - 특히 테스트용입니다.

다른 디렉토리의 파일 작업이 중지됩니다.

질문: 어드바이저가 사용자가 지정한 디렉토리에 액세스하게 하는 라이브러리, 명령 또는 기타 방법이 있습니까? 내가 지정할 해당 폴더로 주소 지정???

2) 질문: MQL4 또는 라이브러리에 사용자의 명령으로 터미널을 끄는 데 사용할 수 있는 명령이 있습니까? 터미널이 꺼지는 특정 조건을 지정합니다. 어드바이저만 끊긴게 아니라 터미널 자체가 완전 폐쇄???

1. https://www.mql5.com/ru/code/10873

이 라이브러리는 샌드박스 외부의 디렉터리 작업을 위한 것입니다. 샌드박스에서 파일을 생성하고 작업한 후 필요한 곳으로 옮기는 방식으로 복사, 이동(이름변경), 필요한 디렉토리에 심볼릭 링크를 사용하여 파일과 동일한 방식으로 전송할 수 있습니다. 또는 디렉토리. 저것들. 샌드박스에 대한 심볼릭 링크를 만들고 파일 디렉토리와 같이 작업한 다음 삭제하거나 필요한 경우 삭제하지 마십시오.

2. https://www.mql5.com/ru/code/8577

이것은 MQL4 래퍼가 있는 WinAPI 함수의 이전 라이브러리입니다. 파일 및 디렉토리에 대한 모든 작업. 나는 추천하지 않는다. 처음보다 더 신뢰할 수 있습니다.

3. https://www.mql5.com/ru/code/9951

 // 2.2.1. Функция закрывает окно терминала МТ4. Функция возвращает TRUE, если сообщение поставлено в очередь, иначе - FALSE.
 bool ServiceMetaTraderClose();

===================

Artyom, 여기에서 마침표가 붙은 닉네임은 금지된 거 알지? 점 때문에 프로필이 보이지 않습니다.

 
......

Artyom, 여기에서 마침표가 있는 닉네임은 금지된 거 알지? 점 때문에 프로필이 보이지 않습니다.


조언해주셔서 대단히 감사합니다. Vista 또는 7에서만 작동합니까? 아니면 아무도 확인하지 않았나요?

프로필을 오랜만에 만들어서 요점을 몰랐네요. 오랜만에 편집을 열심히 했더니 '링크가 안됩니다' 라는 에러가 납니다. 지원, 침묵에 썼습니다. 그래서 사임했고 주요 기능을 수행합니다 :)

 
merkulov.artem :


조언해주셔서 대단히 감사합니다. Vista 또는 7에서만 작동합니까? 아니면 아무도 확인하지 않았나요?

프로필을 오랜만에 만들어서 요점을 몰랐네요. 오랜만에 편집을 열심히 했더니 '링크가 안됩니다' 라는 에러가 납니다. 지원, 침묵에 썼습니다. 그래서 사임했고 주요 기능을 수행합니다 :)

Vista에서 작성 되었습니다 .
 
Dimka-novitsek :

다시 안녕!

1. 상상해봐, 지옥, 마지막 전문가는 어디로 사라진거야.. 그게 남았어.

2. 반품할 수 있나요!


좋은 아침!

1. 당신은 그렇게 통치합니다! 아이넷 라인으로 별도의 캠프를 해볼 적기! 임호! (컴퓨터에서 둘 이상 작업할 때 - 그런 삭제는 놀라운 일이 아니며 누군가가 지쳤을 가능성이 높지만 더 이상 중요하지 않습니다. 코드가 철거되었습니다 ...) 다시, 어때요 (토하지 않고 개자식들) 코드가 거의 지워지고 "저장" 버튼이 눌렸을 수 있습니까(플로피 왼쪽 상단) ? 공원에서 누군가가 뭔가를 닦았는데 왜 그것을 저장해야 했습니까? 다시 말하지만, 프로그램을 작성할 때 중간 저장을 수행해야 하며 그러한 경우 계속해야 한다는 것을 머리를 흔들며 계속하십시오.

2. 당신은 할 수 없습니다.

 

안녕하세요!

첫 번째 Expert Advisor를 완성했습니다. 초기 작업은 코드 형태로 아이디어를 올바르게 제시하는 것이었습니다.

제 조언자를 보시고 의견을 말씀해 주시기 바랍니다.

Expert Advisor 작성에 도움을 주셔서 대단히 감사합니다!

고문의 논리는 다음과 같습니다.

- 가격이 RSI 수준(1 조건)을 깨고,

- 그런 다음 플래그를 사용하여 두 번째 조건을 충족합니다(n개의 막대에 대해 높음 또는 낮음 돌파).

- 첫 번째 주문이 열려 있는 동안 두 번째 주문이 열리지 않도록 하는 기능도 도입했습니다.

다시 한 번, 목표는 Expert Advisor를 올바르게 작성하는 것이 었습니다. 저의 실수와 부족함을 지적해주세요.

미리 감사드립니다.

파일:
proboitrsi.mq4  12 kb
 
고맙습니다!
 
Pacman :

안녕하세요!

첫 번째 Expert Advisor를 완성했습니다. 초기 작업은 아이디어를 코드 형식으로 올바르게 제시하는 것이었습니다.

...

나는 당신의 코드를 조금 뒤지기로 결정했습니다.

1) init() 및 deinit() 부족,

2) 여기 있습니다:
 for ( int i= 1 ; i<= OrdersTotal (); i++)
      {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true)
         {
           if ( OrderSymbol () == Symb)
            {
             if ( OrderMagicNumber ()== 777 )
                 return ;
            }    
         }   
      }

다음과 같이 할 수 있습니다.

 if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {   if ( OrderSymbol () != Symb) continue ;
           if ( OrderMagicNumber () != 777 ) continue ;
           return ;
      }
   }
}

3) 여기 있습니다

Symb=   Symbol ();
...
Min_Lot= MarketInfo ( Symbol (),MODE_MINLOT);
...
Steep=   MarketInfo ( Symbol (),MODE_LOTSTEP);

init()에 작성하면 모든 틱이 아니라 초기화 중에 한 번만 정의하면 충분합니다. " 함수를 호출하는 것은 변수에 접근하는 것보다 더 많은 시간이 걸립니다."

4) 이 항목의 논리가 명확하지 않습니다.

 while (true)
...

언제 거짓일 수 있습니까?

이것은 내 눈을 사로 잡은 몇 가지입니다.

 
paladin80 :

나는 당신의 코드를 조금 뒤지기로 결정했습니다.


3) 여기 있습니다

init()에 작성하면 모든 틱이 아니라 초기화 중에 한 번만 정의하면 충분합니다. "함수를 호출하는 것은 변수에 접근하는 것보다 더 많은 시간이 걸립니다."


init()에서 항상 시장 환경을 사용할 수 있는 것은 아님을 잊지 마십시오.