MQL5 언어를 처음부터 자가 학습 - 페이지 75

 

좋은 하루와 좋은 분위기 모두!

MQL5 프로그래밍 언어를 계속 공부하고 있습니다. Vasily Sokolov는 원래 고문의 알고리즘에서 의도한 대로 하루에 한 자리만 열 수 있도록 코드를 약간 변경했습니다 . 변경 사항은 노란색으로 강조 표시됩니다.

안부 인사를 전합니다. 블라디미르.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
   double point= SymbolInfoDouble ( Symbol (), SYMBOL_POINT );
   int digits=( int ) SymbolInfoInteger ( Symbol (), SYMBOL_DIGITS );
   price= NormalizeDouble (price,digits);

   if (IsMainPositionOpen() == false && IsTimeForOpen())
     {
       if (TickUP()==(price+point))
         OpenBUY();
       else
        {
         if (TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if (IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov :

onInit 블록도 과도하게 엔지니어링되었으며 여전히 올바르게 작성되지 않았습니다. 첫째, 숫자가 아닌 식별자를 쓰도록 노력해야 합니다. -1이 아니라 INIT_FAILED를 반환하지만 INIT_SUCCEEDED는 0이 아닙니다. 둘째, 여기에서 스위치가 중복됩니다. if 또는 switch를 작성해야 합니다. 다른 하나는 버터 오일이기 때문에 한 가지를 먼저 쓰십시오.

셋째, 계정 유형에 대한 모든 옵션을 제어해야 합니다. 데모가 있고 실제가 있습니다. 그리고 콘테스트도 있습니다. 그러나 세 번째 계정이 없더라도 다른 모든 옵션을 잡을 수 있는 스텁이 있어야 합니다.

작업을 예외로 설명하는 것이 더 현명할 것입니다. 그렇지 않으면 전혀 모르는 것을 제어해야 하는 이유를 이해할 수 없을 것입니다.

가장 과장된 의미에서 다음과 같아야 합니다.

1. 실행을 위한 프로그램 시작

2. 알고리즘 개발 및 두 가지 방향으로 종료:

a) True - 알고리즘이 올바르게 작동했습니다.

b) False - 알고리즘이 작동하지 않음

동시에 a) 작업은 프로그래머가 구현하려는 모든 옵션이 실행되고 있음을 나타내며 b) 다른 모든 것은 필요한지 여부는 중요하지 않습니다. 저것들. 프로그래머는 자신이 배치한 기능만 구현하고 다른 모든 것은 예외를 제외하고 버려야 합니다.

 
Konstantin :

작업을 예외로 설명하는 것이 더 현명할 것입니다. 그렇지 않으면 전혀 모르는 것을 제어해야 하는 이유를 이해할 수 없을 것입니다.

가장 과장된 의미에서 다음과 같아야 합니다.

1. 실행을 위한 프로그램 시작

2. 알고리즘 개발 및 두 가지 방향으로 종료:

a) True - 알고리즘이 올바르게 작동함

b) False - 알고리즘이 작동하지 않음

동시에 a) 작업은 프로그래머가 구현하려는 모든 옵션이 실행되고 있음을 나타내며 b) 다른 모든 것은 필요한지 여부는 중요하지 않습니다. 저것들. 프로그래머는 자신이 배치한 기능만 구현하고 다른 모든 것은 예외를 제외하고 버려야 합니다.

안녕하세요 콘스탄틴입니다! 명확하게 해 주셔서 감사합니다.

이 주제의 친애하는 참가자! MQL5 프로그래밍 언어 를 배우는 데 도움이 된 건설적인 팁과 조언에 다시 한 번 감사드립니다.

이제 일시 중지가 있습니다. 본업에서 하는 일이 독학에 많은 시간과 관심을 쏟을 수는 없지만, 현재 나는 주요 결과를 얻었습니다. 프로그래밍의 기초를 이해하고, 다른 사람의 코드를 읽고, 내 자신의 기능을 작성합니다.

Trailing_Stop (v.1).mq5 Expert Advisor 버전에는 각 코드 라인에 대한 자세한 설명이 포함되어 있으며 프로그래밍 학교 1학년 학생이 액세스할 수 있는 프레젠테이션에서 앞서 약속한 대로 게시하지만 조금 나중에.

안부 인사를 전합니다. 블라디미르.

 

좋은 하루와 좋은 분위기 모두!

MQL5 프로그래밍 언어를 계속 공부하고 있습니다. 마지막으로 프로그래밍 학교 1학년 학생이 사용할 수 있는 프레젠테이션에서 각 코드 행에 대한 자세한 설명이 포함된 Expert Advisor 버전을 작성하는 시간이 있었습니다. 어드바이저 코드가 상당히 번거로워서 Trailing_Stop_gv.22.mq5 라는 파일로 공개합니다.

코드를 게시하기 전에 전략 테스터에서 EA를 테스트했습니다. 문제가 확인되지 않았습니다. EA는 상계 포지션 회계 시스템을 사용합니다. 이 회계 시스템은 동일한 기호(금융 상품)에 대한 계정에 한 번에 하나의 미결 위치만 있을 수 있음을 의미합니다.

현재 Expert Advisor는 다음을 수행할 수 있습니다.

  1. 설치하려는 거래 계정을 확인하십시오. 어드바이저가 데모 계정에 설치된 경우 작업을 계속할 수 있는 권한이 메시지 창에 나타납니다. 실제 계정 에 고문을 설치하려고 시도하면 메시지 창에 작업을 계속할 수 없다는 경고가 표시되고 그 후 거래 터미널의 작업 창에서 자동으로 삭제됩니다.
  2. 거래일 정확히 오전 9시에 한 번. 모스크바 시간에 따라 첫 번째 눈금이 지시되는 방향으로 한 위치를 자동으로 엽니다. 예를 들어 오전 9시에 모스크바 시간으로 첫 번째 눈금이 위쪽으로 향하게 됩니다. 즉, BUY 위치가 열리고 첫 번째 눈금이 아래로 내려가면 SELL 위치가 열립니다.
  3. 로트 크기를 설정합니다.
  4. 손절매 크기를 설정합니다.
  5. 손절매가 손익분기점으로 이동하는 포지션 개시 가격에 상대적인 수준을 설정합니다.
  6. 손절매 후행 단계를 설정합니다.

Expert Advisor의 이 변형에서는 이전에 Vasily Sokolov가 제안한 대부분의 힌트가 구현되었습니다.

경고!!!

Expert Advisor는 데모 계정 및 교육 목적으로만 자체 학습 계획에 따라 개발되었습니다! 실제 계정으로 거래하고 수익을 내기 위한 것이 아닙니다!

안부 인사를 전합니다. 블라디미르.

파일:
 
MrBrooklin :

좋은 하루와 좋은 분위기 모두!

MQL5 프로그래밍 언어를 계속 공부하고 있습니다. 마지막으로 프로그래밍 학교 1학년 학생이 사용할 수 있는 프레젠테이션에서 각 코드 행에 대한 자세한 설명이 포함된 Expert Advisor 버전을 작성하는 시간이 있었습니다. 어드바이저 코드가 상당히 번거로워서 Trailing_Stop (v.2).mq5 라는 파일로 공개합니다.

코드를 게시하기 전에 전략 테스터에서 EA를 테스트했습니다. 문제가 확인되지 않았습니다. EA는 상계 포지션 회계 시스템을 사용합니다. 이 회계 시스템은 동일한 기호(금융 상품)에 대한 계정에 한 번에 하나의 미결 위치만 있을 수 있음을 의미합니다.

현재 EA는 다음을 수행할 수 있습니다.

  1. 설치할 거래 계정을 확인하십시오. 어드바이저가 데모 계정에 설치된 경우 작업을 계속할 수 있는 권한이 메시지 창에 나타납니다. 실제 계정 에 고문을 설치하려고 시도하면 메시지 창에 작업을 계속할 수 없다는 경고가 표시되고 그 후 거래 터미널의 작업 창에서 자동으로 삭제됩니다.
  2. 거래일 정확히 오전 9시에 한 번. 모스크바 시간에 따라 첫 번째 눈금이 지시되는 방향으로 한 위치를 자동으로 엽니다. 예를 들어 오전 9시에 모스크바 시간으로 첫 번째 눈금이 위쪽으로 향하게 됩니다. 즉, BUY 위치가 열리고 첫 번째 눈금이 아래로 내려가면 SELL 위치가 열립니다.
  3. 로트 크기를 설정합니다.
  4. 손절매 크기를 설정합니다.
  5. 손절매가 손익분기점으로 이동하는 포지션 개시 가격에 상대적인 수준을 설정합니다.
  6. 손절매 후행 단계를 설정합니다.

Expert Advisor의 이 변형에서는 이전에 Vasily Sokolov가 제안한 대부분의 힌트가 구현되었습니다.

경고!!!

Expert Advisor는 데모 계정 및 교육 목적으로만 자체 학습 계획에 따라 개발되었습니다! 실제 계정으로 거래하고 수익을 내기 위한 것이 아닙니다!

안부 인사를 전합니다. 블라디미르.

안녕하세요! - 컴파일하지 않습니다.

Trailing_Stop_gv.22.mq5

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------

알아냈어요 - 괄호 없이 Trailing_Stop Expert Advisor (v.2) 를 만들어야 합니다.

 
SanAlex :

안녕하세요! - 컴파일하지 않습니다.

안녕하세요! 방금 사이트에서 파일을 다운로드하고 MetaEditor에서 확인했는데 모든 것이 잘 컴파일됩니다.

안부 인사를 전합니다. 블라디미르.

 
MrBrooklin :

안녕하세요! 방금 사이트에서 파일을 다운로드하고 MetaEditor에서 확인했는데 모든 것이 잘 컴파일됩니다.

안부 인사를 전합니다. 블라디미르.

고맙습니다! 작업. Expert Advisor 생성 시 이름을 잘못 입력했습니다. 모든 것이 작동합니다.

 
SanAlex :

고맙습니다! 작업. Expert Advisor 생성 시 이름을 잘못 입력했습니다. 모든 것이 작동합니다.

물론이죠!

안부 인사를 전합니다. 블라디미르.

 

이 주제의 친애하는 참가자!

MQL5 프로그래밍 언어의 기본을 배우는 데 도움이 된 건설적인 제안, 팁 및 조언에 대해 다시 한 번 감사드립니다. Vasily Sokolov 에게 특별한 감사를 드립니다! 하나님께서 여러분 모두에게 건강과 번영을 빕니다!

모두에게 큰 존경을 표합니다, 블라디미르.

 

좋은 하루와 좋은 분위기 모두!

계속해서 MQL5 프로그래밍 언어 를 공부하고 있습니다. 현재 저는 새로운 고문의 프로그램 코드를 작성하고 있습니다. 나는 그것을 해결하는 방법을 완전히 이해하지 못하는 한 순간에 직면했습니다. 작업은 간단한 것 같습니다. 고문의 입력 설정에 지정된 통화 쌍의 차트에서만 고문이 작업해야 합니다. 다른 통화 쌍의 차트에 설치하려는 시도(예: 실수로)가 있는 경우 고문은 작업을 계속할 수 없다는 경고를 제공해야 합니다.

다음은 프로그램 코드의 스케치입니다.

 input string Symbol_Main= "GBPUSDrfd" ;   //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart= SymbolInfoString ( Symbol (), SYMBOL_DESCRIPTION ) ;
   if (currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
       /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
       MessageBox ( "Работа советника на данной валютной паре разрешена!" );
       return ( INIT_SUCCEEDED ); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
       /* выводим окно сообщений на торговом терминале и закрываем советник */
       MessageBox ( "Работа советника на данной валютной паре запрещена! Выходим!" );
       return ( INIT_FAILED ); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

컴파일러는 오류를 발생시키지 않습니다. 작동하지 않는 코드는 노란색으로 강조 표시됩니다. 아마도 식별자 SYMBOL_DESCRIPTION (기호에 대한 문자열 설명)의 의미를 이해하지 못하기 때문일 것입니다. 다른 식별자를 적용해 보았지만 결과는 동일합니다. 여기서 SymbolInfoString() 함수가 전혀 필요하지 않을 수 있습니까? Alfa Forex에서 고문을 사용할 계획이기 때문에 통화 쌍 GBPUSDrfd 의 이름을 썼고 이 Forex 딜러는 rfd로 끝나는 모든 기호를 절대적으로 가지고 있습니다.

전문가 여러분, 어떤 방향으로 생각해야 하는지 알려주세요!

안부 인사를 전합니다. 블라디미르.