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

 
Vasiliy Sokolov :

권리! 누구나 삶의 경험을 바탕으로 프로그램에 대한 잘못된 인식을 가지고 프로그래밍을 배우려고 합니다. 예를 들어, 프로그램은 목차, 서론, 내용 및 결론이 있는 책의 텍스트와 같습니다. 저것들. 프로그램은 처음부터 끝까지 일종의 순차 체계라는 것입니다. 첫 번째 단계에서이 표현은 작동 한 다음 프로그램이 복잡해지면서 어려움이 시작되고 정상적인 방법으로 안정적인 작업 프로그램을 작성할 수 없습니다. 곧 실망이 오고 뒷전에서 프로그래밍 연구를 연기합니다. 그리고 이와 관련하여 Kovalev는 불행을 제공하는 고귀한 사업가입니다. 그는 접근 가능한 개념적 장치를 사용하여 프로그램이 이런 저런 계획을 가진 동일한 책임을 독자에게 설명하려고합니다. 하지만 계획은 없습니다! 스크립트에는 Expert Advisor와 근본적으로 다른 "구성표"가 있으며 Expert Advisor에는 지표와 다른 구성표가 있습니다.

그렇다면 사람은 어떻게 훈련되어야 한다고 생각합니까? 바로 OOP 철학? 불가능한.
 

Vasiliy Sokolov :

... 4) 가장 이상한 블록은 "오류 처리" 블록입니다. 당신은 그것에 들어갈 수 있지만, 당신은 그것에서 벗어날 수 없습니다. 저것들. 프로그램이 오류를 포착하고 이 블록에 앉습니다(완전히 재부팅될 때까지 멈춥니다. 더 이상 실수하지 않도록 터미널을 단단히 고정하는 것이 더 좋습니다. 이것이 아이디어입니다!) ...

안녕하세요 바실리님! 자세하고 수준 높은 설명 감사합니다! 내가 동의할 수 없는 유일한 것은 포인트 4입니다. 사실 화살표가 " 오류 처리 블록"과 거기에서 모두 간다는 것입니다. 이 블록을 다른 블록과 연결하는 선의 끝에 화살표가 있고, 연구소의 컴퓨터 과학 프로그램에서 이것이 양방향 프로세스, 즉 양방향 프로세스를 의미한다는 것을 여전히 기억합니다. 왕복 여행. 그러므로 나는 이 상황에서 의심의 여지가 없었다. 그리고 당신의 메시지의 나머지 부분은 나에게 분명합니다.

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

 
MrBrooklin :

안녕하세요 바실리님! 자세하고 수준 높은 설명 감사합니다! 내가 동의할 수 없는 유일한 것은 4번 항목입니다. 사실 화살표가 "오류 처리 블록"으로 이동하기도 하고 그 블록에서 멀어지는 것이기도 합니다. 이 블록을 다른 블록과 연결하는 선의 끝에 화살표가 있고, 연구소의 컴퓨터 과학 프로그램에서 이것이 양방향 프로세스, 즉 양방향 프로세스를 의미한다는 것을 여전히 기억합니다. 왕복 여행. 그러므로 나는 이 상황에서 의심의 여지가 없었다. 그리고 당신의 메시지의 나머지 부분은 나에게 분명합니다.

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

제가 운이 좋았던 건 여기까지 :-)

연구를 위한 템플릿으로 expa 를 사용하십시오 - 스마트 코드!

여기와


"
  • EA는 작업 시간 프레임(' 작업 시간 프레임 ')에 맞게 최적화될 수 있습니다.
  • 바당 하나의 '시장 진입' 거래만 있을 수 있습니다(이는 내부 매개변수이며 입력 매개변수에 포함되지 않으며 ' 단 하나의 위치만 ' 매개변수와 아무 관련이 없습니다)
  • '내부 막대' 모드(' 검색 신호, '초 단위 ' '10' 이상)에서 작업할 때 현재 막대는 막대 #0, '새 막대가 생성되는 순간에만'에서 작업할 때 모드(' 검색 신호, 초 단위 ' '10' 미만) 현재 막대 - 막대 #1
  • 매개변수 ' 거래 모드: ' - 거래 방향 제한. '허용된 BUY 포지션만 허용됨', '허용된 SELL 포지션 ' 및 ' 허용된 BUY 및 SELL 포지션 ' 값을 취할 수 있습니다.
  • 매개변수 ' 시간 제어 사용 ' - ' 시작 시간 '::' 시작 분 ' 에서 ' 종료 시간 '::' 종료 분' 까지 거래 신호를 검색하기 위한 시간 간격 . 시간 범위는 하루 내와 하루 동안의 전환으로 설정할 수 있습니다.
  • ' Pips Or Points: ' 매개변수는 손절매, 이익실현 및 추적을 계산하기 위한 표준을 설정합니다.

  • 그리고

    역방향 및 기타 트릭 및 위치 열기 기능의 간소화된 작성을 위해 처음에 코드에서 표준 라이브러리 연결 - 공부하고 걱정하지 마십시오. 게다가 표준 코드 작성에 즉시 익숙해집니다. - 들여쓰기 및 기타 모든 것이 있습니다.

    플래그 ' 위치: 하나만 ' ' true '로 설정하면 EA가 시장에서 두 개 이상의 위치를 가질 수 없습니다. ' Positions: Reverse ' 플래그는 신호 반전을 담당합니다. 흥미로운 플래그 ' 위치: 반대 닫기 ' - 위치를 열기 전에 ' true '로 설정하면 반대 위치를 제거하는 것이 보장됩니다. ' 로그 인쇄 '는 모든 작업의 확장 로그를 인쇄합니다. ' Freeze and StopsLevels Coefficient ' 매개변수는 기호에 대한 이러한 수준이 0일 때 정지 및 정지 수준에 대한 계수를 설정합니다. 권장 값은 '3'입니다.

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    나는 프로그램이 무엇인지 이해하기 위해 저자에게 적극 권장하는 원칙을 작성할 것입니다. 일부 자료는 정확하고 일부는 실수를 포함하고 일부는 독자와 일반적인 추측인 Kovalev의 전단지와 달리 MQL: Expert Advisors, 스크립트 또는 Expert Advisors에 무엇을 작성하든 이러한 원칙은 항상 사실이며 100%입니다. :

    첫 번째 원칙. 모든 MQL 프로그램은 이벤트 를 처리합니다. 이벤트는 일반적으로 무언가가 변경되었다는 정보를 포함하는 일종의 알림입니다. 예를 들어 새 틱이 도착했거나 보류 중인 주문이 실행되었습니다. 어떤 정보도 포함하지 않고 단순히 발생하는 이벤트가 있습니다. 예를 들어, "타이머" 이벤트는 지정된 간격으로 사용자 정의 함수를 호출할 수 있습니다. 사용자에게 무언가가 변경되었음을 알리지 않습니다. 단순히 사용자 코드를 호출하므로 추가 정보가 필요하지 않습니다. 이벤트 정의에서 몇 가지 중요하지 않은 방법은 다음과 같습니다.

    • 첫 번째 결과는 이벤트를 받으면 최대한 빨리 처리해야 한다는 것입니다. 많은 이벤트가 있을 수 있으며 이벤트는 대기열에 누적될 수 있습니다. MeteTrader 이벤트를 처리합니다(저희 프로그램 아님). 이를 위해 스레드 라는 특수 리소스를 사용합니다. 이 자원은 매우 가치 있고 제한적입니다. MetaTrader가 소유한 스레드는 PC의 CPU에서 조잡하고 차선이며 느린 스크립트 코드를 관대하게 실행합니다. 이벤트 처리 가 코드의 흐름을 늦추면 경우에 따라 메타 트레이더에서 실행되는 다른 프로그램이 정상적으로 실행되지 않을 수 있습니다. 그들은 쓸모없는 계산에서 스레드를 해제할 때까지 기다렸다가 해제된 동일한 스레드에서 코드를 실행합니다.
    • 많은 이벤트가 있습니다. 사용 가능한 많은 이벤트를 처리할 수 있지만 하나만 처리할 수 있습니다. 스크립트를 만들 때 한 번 발생하는 OnStart라는 하나의 이벤트만 처리합니다. Expert Advisor를 작성할 때 한 번에 여러 이벤트를 처리할 수 있습니다. 이것은 당신의 프로그램을 "이 책 프로그램" 패러다임에 집어넣는 것은 쓸모가 없다는 것을 의미합니다. 대신, 프로그램이 특정 이벤트에 대한 핸들러라는 것만 이해하면 됩니다. 어떤 순서로든 호출될 수도 있고 전혀 호출되지 않을 수도 있습니다. 이벤트는 서로 독립적입니다. 이것은 이러한 이벤트를 처리하는 프로그램 부분이 서로 의존하지 않는다는 것을 의미합니다. 그것들은 비선형적이며 순차적이지 않습니다 .

    (지금은 그게 다야, 욕망이있을 것입니다-계속하겠습니다).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko :

    제가 운이 좋았던 건 여기까지 :-)

    연구를 위한 템플릿으로 expa 를 사용하십시오 - 스마트 코드!

    여기와


    "
  • EA는 작업 시간 프레임(' 작업 시간 프레임 ')에 맞게 최적화될 수 있습니다.
  • 바당 하나의 '시장 진입' 거래만 있을 수 있습니다(이는 내부 매개변수이며 입력 매개변수에 포함되지 않으며 ' 단 하나의 위치만 ' 매개변수와 아무 관련이 없습니다)
  • '내부 막대' 모드(' 검색 신호, '초 단위 ' '10' 이상)에서 작업할 때 현재 막대는 막대 #0, '새 막대가 생성되는 순간에만'에서 작업할 때 모드(' 검색 신호, 초 단위 ' '10' 미만) 현재 막대 - 막대 #1
  • 매개변수 ' 거래 모드: ' - 거래 방향 제한. '허용된 BUY 포지션만 허용됨', '허용된 SELL 포지션 ' 및 ' 허용된 BUY 및 SELL 포지션 ' 값을 취할 수 있습니다.
  • 매개변수 ' 시간 제어 사용 ' - ' 시작 시간 '::' 시작 분 ' 에서 ' 종료 시간 '::' 종료 분' 까지 거래 신호를 검색하기 위한 시간 간격 . 시간 범위는 하루 내와 하루 동안의 전환으로 설정할 수 있습니다.
  • ' Pips Or Points: ' 매개변수는 손절매, 이익실현 및 추적을 계산하기 위한 표준을 설정합니다.

  • 그리고

    역방향 및 기타 트릭 및 위치 열기 기능의 간소화된 작성을 위해 처음에 코드에서 표준 라이브러리 연결 - 공부하고 걱정하지 마십시오. 게다가 표준 코드 작성에 즉시 익숙해집니다. - 들여쓰기 및 기타 모든 것이 있습니다.

    플래그 ' 위치: 하나만 ' ' true '로 설정하면 EA가 시장에서 두 개 이상의 위치를 가질 수 없습니다. ' Positions: Reverse ' 플래그는 신호 반전을 담당합니다. 흥미로운 플래그 ' 위치: 반대 닫기 ' - 위치를 열기 전에 ' true '로 설정하면 반대 위치를 제거하는 것이 보장됩니다. ' 로그 인쇄 '는 모든 작업의 확장 로그를 인쇄합니다. ' Freeze and StopsLevels Coefficient ' 매개변수는 기호에 대한 이러한 수준이 0일 때 정지 및 정지 수준에 대한 계수를 설정합니다. 권장 값은 '3'입니다.

    안녕하세요 로만님! 예를 들어 주셔서 감사합니다. Vladimir Karputov가 작성한 코드를 이해하려고 여러 번 시도했지만 아직까지는 달성할 수 있는 수준이 아닙니다. 조금 후에 내 머리에 이미 더 많은 정보가 있으면 그의 코드로 돌아갈 것입니다. 하지만 조언 감사합니다!

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

     
    Vasiliy Sokolov :

    나는 프로그램이 무엇인지 이해하기 위해 저자에게 적극 권장하는 원칙을 작성할 것입니다. 일부 자료는 정확하고 일부는 실수를 포함하고 일부는 독자의 일반적인 추측인 Kovalev의 전단지와 달리 MQL: Expert Advisors, 스크립트 또는 Expert Advisors에 작성하는 내용에 관계없이 이러한 원칙은 항상 사실이고 100%입니다.

    첫 번째 원칙. 모든 MQL 프로그램은 이벤트 를 처리합니다. 이벤트는 일반적으로 무언가가 변경되었다는 정보를 포함하는 일종의 알림입니다. 예를 들어 새 틱이 도착했거나 보류 중인 주문이 실행되었습니다. 정보가 없지만 그냥 일어나는 이벤트가 있습니다. 예를 들어, "타이머" 이벤트는 지정된 간격으로 사용자 정의 함수를 호출할 수 있습니다. 사용자에게 무언가가 변경되었음을 알리지 않습니다. 단순히 사용자 코드를 호출하므로 추가 정보가 필요하지 않습니다. 이벤트 정의에서 몇 가지 중요하지 않은 방법은 다음과 같습니다.

    • 첫 번째 결과는 이벤트를 받으면 최대한 빨리 처리해야 한다는 것입니다. 많은 이벤트가 있을 수 있으며 이벤트는 대기열에 누적될 수 있습니다. MeteTrader 이벤트를 처리합니다(저희 프로그램 아님). 이를 위해 스레드 라는 특수 리소스를 사용합니다. 이 자원은 매우 가치 있고 제한적입니다. MetaTrader가 소유한 스레드는 PC의 CPU에서 조잡하고 차선이며 느린 스크립트 코드를 관대하게 실행합니다. 이벤트 처리 가 코드의 흐름을 늦추면 경우에 따라 메타 트레이더에서 실행되는 다른 프로그램이 정상적으로 실행되지 않을 수 있습니다. 그들은 쓸모없는 계산에서 스레드를 해제할 때까지 기다렸다가 해제된 동일한 스레드에서 코드를 실행합니다.
    • 많은 이벤트가 있습니다. 사용 가능한 많은 이벤트를 처리할 수 있지만 하나만 처리할 수 있습니다. 스크립트를 만들 때 한 번 발생하는 OnStart라는 하나의 이벤트만 처리합니다. Expert Advisor를 작성할 때 한 번에 여러 이벤트를 처리할 수 있습니다. 이것은 당신의 프로그램을 "이 책 프로그램" 패러다임에 집어넣는 것은 쓸모가 없다는 것을 의미합니다. 대신, 프로그램이 특정 이벤트에 대한 핸들러라는 것만 이해하면 됩니다. 어떤 순서로든 호출될 수도 있고 전혀 호출되지 않을 수도 있습니다. 이벤트는 서로 독립적입니다. 이는 이러한 이벤트를 처리하는 프로그램 부분이 서로 의존하지 않는다는 것을 의미합니다. 그것들은 비선형적이며 순차적이지 않습니다 .

    (지금은 그게 다야 욕망이있을 것입니다-계속하겠습니다).

    엑설런트 바실리님, 작성하시는데 어려움이 없으시다면 계속 부탁드리겠습니다! 당신이 말한 모든 것이 간결하고 이해하기 쉽습니다!

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

     
    MrBrooklin :

    엑설런트 바실리님, 작성하시는데 어렵지 않으시면 계속 부탁드리겠습니다! 당신이 말한 모든 것이 간결하고 이해하기 쉽습니다!

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

    네, 흥미로운 의견입니다.

    1. 모든 프로그램은 구조적으로 기능 블록의 계층 구조이며 관련되고 상호 의존적인 매개변수의 시스템입니다.

    2. 이벤트 - 외부 소프트웨어 환경 또는 내부 변경과 프로그램의 상호 작용 결과. 환경은 프로그램(OnTick, OnChartEvent ...)을 호출하여 이벤트를 "보고"합니다.

    4. 환경(터미널)은 프로그램에 대해 중립적이지만 영향을 줄 수 있습니다.

    5. 프로그램은 특수 기능의 도움으로 터미널 및 시장에서 환경에 대한 정보를 수신하고 논리에서 사용할 수 있습니다.

    6. 프로그램은 특수 요청을 사용하여 자체 또는 개체에 대한 정보를 수신하고 이를 논리에서 사용할 수 있습니다.

    7. 이벤트는 if() 문에 설명되어 있습니다.

    8. 이벤트에서 발생한 변경 사항에 반응하는 핸들러가 호출됩니다.

    9. 반응은 물체의 상태 변화 - (매개 변수 값의 대량 변화) 또는 일종의 계산 작업이 될 수 있습니다.

    10. 이벤트 핸들러는 계층 구조(이벤트 모델)로 그룹화됩니다.

    11. 프로그램 개체는 다양한 이벤트에 "구독"할 수 있고 수신자 수신자 목록에 있을 수 있습니다.

    ... 그리고 훨씬 더... :)

    추신 Vasily는 더 잘 그리고 더 명확하게 기술할 것입니다.
     

    우리는 계속합니다:

    • 이벤트가 많기 때문에 이벤트 핸들러도 많습니다. 이벤트가 일관되지 않게 호출되기 때문에 해당 핸들러도 일관되지 않게 호출됩니다. 호출 불일치가 있기 때문에 이벤트 핸들러는 서로를 부러워할 수 없고 서로의 데이터에 의존할 수도 없습니다. 이러한 엄격한 요구 사항을 충족하는 유일한 구조 .
    • 기능은 서로 독립적입니다. 한 함수가 + b의 합을 반환하고 두 번째 함수가 * b의 곱을 반환하면 이 두 함수의 결과는 호출의 순서에 따라 달라지지 않습니다. 인수 3과 5로 첫 번째 함수를 호출하고 8을 얻을 수 있습니다. 그런 다음 동일한 인수로 두 번째 함수를 호출하고 24를 얻습니다. 그런 다음 호출을 교환합니다. 결과는 라이브의 주제가 될 것입니다. 더하기 함수는 인수 3과 5가 주어지면 항상 8을 반환합니다. 곱하기 함수는 동일한 인수가 주어지면 항상 24를 반환합니다.
    • 위에서부터 함수만 이벤트 핸들러가 될 수 있다는 것이 분명해졌습니다. 새 틱 이벤트가 발생하면 이 용도에 특별한 OnTick 함수에 의해 처리됩니다. Start 이벤트(일회성 스크립트 실행)가 발생하면 이에 대해 특별한 OnStart 기능에 의해 처리됩니다.
    • 기능은 보편적입니다. 단순한 이벤트 이상을 처리할 수 있습니다. 함수는 현재 시간과 같은 유용한 정보를 반환할 수 있습니다. 함수는 전달된 인수로 복잡한 계산을 수행하고 이러한 계산의 최종 결과를 단일 값으로 반환할 수 있습니다. 마지막으로 함수는 데이터 공급자가 될 수 있습니다. 함수를 호출하고 따옴표와 같이 필요한 데이터를 가져옵니다.
    • MetaTrader는 내부적으로 수천 개의 서로 다른 기능으로 구성되어 있으며 그 중 약 150만 개는 사용자가 친절하게 제공합니다. 이것들은 매우 유용한 기능입니다. 그것들을 통해 시스템 시간을 찾을 수 있으며 원하는 장비에 대한 데이터를 얻을 수 있습니다. 기능을 통해 거래 주문 이 전송됩니다. MKL 참조 책을 열어 완전히 함수와 이에 대한 인수로 구성되어 있는지 확인할 수 있습니다. 저것들. 사용자 프로그램 측면에서 MetaTrader는 하나의 큰 기능 세트입니다.
    • 보편적인 기능이 충분하지 않습니다. 시스템에 새로운 기능이 아무리 많이 등장하더라도 항상 부족할 것입니다. 이는 사람마다 필요로 하는 것이 다르기 때문입니다. 모든 경우에 보편적인 기능은 없습니다. 가장 일반적이고 다재다능한 기능은 이미 MetaTrader에 포함되어 있으며 친절하게 제공됩니다. 그러나 사용자의 요구는 끝이 없습니다. MetaQuotes는 터미널 사용자 100,000명의 개별 요구를 충족할 수 없습니다. 대신, 그들은 더 유연하게 행동했습니다. 사용자가 스스로 필요한 기능을 만들 수 있는 기회를 주었습니다. 사용자는 이것으로부터만 혜택을 받습니다. 그들에게 그다지 적합하지 않은 시스템 기능을 사용하는 대신 이상적으로는 자신의 작업을 정확히 해결하는 고유한 기능을 작성할 수 있습니다. 시스템 기능은 다양성으로 인해 완벽하지 않습니다.
    • 사용자가 자신의 기능을 작성하는 방법을 얼마나 잘 알고 작업의 본질을 이해하며 프로그래머의 자격을 나타냅니다. 그가 프로그램이 들어오는 이벤트를 순차적으로 처리하지 않는 이질적인 핸들러 세트(함수 형태)라는 것을 이해한다면 이것은 좋은 것입니다. 그가 자신의 기능을 작성하는 방법을 알고 있다면 또 다른 장점이 있습니다. 그가 여러 기능(자신의 기능과 시스템 기능 모두)의 작업을 공통 알고리즘으로 결합할 수 있다면 이것은 그에게 또 다른 장점입니다.
    • MetaTrader(네 번째와 다섯 번째 모두)에서 모든 것이 함수에 기반하여 함수와 어떻게든 관련되어 있다는 것을 이해한다면, 갑자기 모든 것이 명확해집니다. 도움말은 더 이상 이질적인 코드 조각 세트가 있는 두꺼운 탈무드로 표시되지 않고 사용 가능한 기능과 기능에 대한 안내로 제공됩니다. 데이터 유형, 배열, 구조, 클래스와 같은 다른 모든 것은 중요하지 않습니다. 이 모든 것은 함수가 무언가를 반환하고 수락할 수 있도록 지원하는 것입니다.

    (지금까지)
     
    그들은 그에게 쓸모없는 정보로 초보자를 폭격했습니다.))
     
    Реter Konow :
    그들은 그에게 쓸모없는 정보로 초보자를 폭격했습니다.))

    이것은 당신이 그런 식으로 당신의 욕망을 광고할 필요가 없다는 것을 암시합니다. 동일한 성공으로 Vladimir는 특정 기능에 대해 구체적으로 질문하고 유용한 조언을 얻을 수 있었습니다. C++를 배우거나 어셈블러를 배우는 것과 같은 "전문가"의 말도 안되는 소리가 아닙니다. 펀치 카드를 공부하는 것으로 시작할 수 있습니다.