Friday 9 March 2018

무역 시스템 유한 상태 기계


Paul Lam.


공학 사회 영향.


공학 사회 영향.


분산 트레이딩 시스템을위한 이벤트 중심 유한 상태 기계.


분산 트랜잭션 시스템을 구축 할 때 한 가지 문제는 여러 트리거에서 상태를 비동기 적으로 관리하는 것입니다. 예를 들어, 알파 엔진이 구매라고 말하면 새로운 위치를 입력하는 것이 안전한지 확인하기 위해 위치 엔진으로부터 확인이 필요합니다. 나는 명령형으로 또는 콜백을 통해 하나의 체크를 연결할 수있다. 그러나 근본적인 제약은 다음과 같은 트리거입니다.


생성에 리소스 집약적이며 순차적이거나 일대일 대응이 아닌 많은 것을 작성해야 할 수도 있습니다. 가장 중요한 것은 별도의 프로그램이나 다른 시스템에 있습니다.


따라서 저는이 문제를 이벤트 드리븐 유한 상태 기계 (FSM)로서 시스템의 자체 모듈로 추상화하여 상태 전이를 추적합니다. 협박하는 용어 였지만 첫 번째 구현은 if-else 문으로 자격을 얻는 것이 었습니다. 이점은 내 시스템 구성 요소 각각이 다음에 무엇을 호출해야하는지 또는 별이 정렬되어 있는지 확인하기 위해 다른 것을 폴링 할 필요없이 걱정없이 신호를 보내고 상태를 중앙 인터페이스에서 가져와야한다는 것입니다. 이는 개발 및 유지 보수를 대폭 단순화합니다.


내 FSM 모듈의 책임은 다음과 같습니다.


모든 신호를 듣고 모든 전환을 파악한 다음 나머지 시스템에 대한 최신 상태를 게시하십시오.


비동기 이벤트 처리.


내 시스템 모듈 간의 메시지 전송 계층으로 RabbitMQ를 사용합니다. 여기서해야 할 일은 적절한 메시지 처리기를 FSM의 각 트리거 입력에 연결하는 것입니다. 다음은 Clojure RabbitMQ 라이브러리 인 Langohr을 사용하는 이벤트 핸들러의 한 예입니다. 이 부분의 나머지 부분은 표준 RabbitMQ 게시 / 구독 자료 일뿐입니다.


이것은 위치 이벤트가 사용자, 도구 및 수량과 같은 정보와 함께 수신 될 때 호출됩니다. 이 핸들러는 해당 사용자의 현재 상태를 가져 와서 다음 상태를 입력으로 평가 한 다음 사용자에 대한 새 상태를 캐싱하여 이러한 정보를 스레드합니다.


상태 전이.


아래는 내 시스템의 상태 전이 다이어그램 중 하나입니다.


4 가지 상태가 4 가지 색상으로 표시되며 4 가지 상태 신호 전환 트리거가 있습니다. 이 프로그램은 초당 몇 번씩 발생하는 이벤트 트리거와 동시에 최대 수백 개의 독립 상태를 처리 할 것으로 예상됩니다.


내가 말했듯이, 첫 번째 구현은 if-else 메소드의 집합 일뿐입니다. 예를 들어, 참여 트리거는 참여 메소드를 호출하여 내재적 입력 참여 및 현재 상태가 주어지면 다음 상태를 판별합니다.


이 상용구 코드는 몇 가지가 있습니다. 그래서 시스템을 배치 한 후 리팩터링을했습니다. 나는 core. logic에 잠시 동안 시도해 볼 것을 의미했다. 그래서 이것을 사용하기 시작하는 것이 좋다.


논리 해결사 질문을하기 전에 관계를 정의해야합니다. 여기에서는 한 곳에서 모든 상태 전이 정의를 편리하게 지정하는 전이 관계를 정의합니다.


그리고 이벤트 핸들러 메소드는 한 줄짜리 로직 표현식에 대한 래퍼 일뿐입니다. 현재 단계, cur-state, 입력 트리거, 입력, 이 제약 조건을 만족하기 위해 취할 수있는 상태는 무엇입니까?


가장 모범적 인 core. logic 예제가 아니지만 그 일을합니다.


core. logic을 시작하는 것은 놀랍도록 쉽습니다. Primer와 튜토리얼을 통해 한 번 시도해 보았습니다.


상태 캐싱 및 공유.


상태 전이가 처리되었으므로 시스템의 다른 부분에 대한 상태는 캐시되고 Redis에서 제공됩니다. 빠르고 쉽게이기 때문에 Redis를 사용합니다. 값은 JSON과 같이 대중적인 데이터 형식 대신 edn 형식으로 저장되어 데이터 구조를 유지합니다.


프로덕션 환경에서 edn을 처음 사용했습니다. 이 거래 시스템의 모든 프로세스 간 메시지는 형식이 지정됩니다. Clojure는 str을 사용하여 쓰기 만하고 clojure. edn / read-string을 사용하여 완벽하게 작동합니다. 시스템의 다른 Clojure 구성 요소 외에도, 나의 무역 중개인 인터페이스는 Java로 작성됩니다. 내 Java 프로그램은 edn-java를 사용하여 복잡한 Clojure 데이터 구조 (예 : 키워드가있는 중첩 된지도)를 구문 분석하거나 분석을 취소합니다.


Redis와의 결합 edn이 Clojure의 원시 동시성 데이터 구조 (atom과 같은 작업)와 거의 비슷하지만 외부 프로그램을 사용하여 데이터에 액세스 할 수 있다는 점에서 환상적인 선택입니다.


간단하고 빠른.


전체 이벤트 기반 FSM 프로그램은 Clojure 코드가 200 줄 미만이며 몇 시간 만에 완료되었습니다. 그러나 나는 그것을 며칠 동안 숙고 할 시간을 주었다. 성능 결과를 예측하는 데 벤치 마크를 수행하지 않았습니다. 그래서 내가 말할 수있는 것은이 설정이 서버의 거의 모든 부하를 사용하는 단순한 사용 사례를 처리 할 수있어서 기쁘다는 것입니다.


몇 년 전, 나는 국가를 바꾸기 위해 모든 깃발을 세웠을 것이다. 사실 그것은 내가 한 일이다. 여기에 대한 가장 큰 만족은 구현이나 기술이 아니라, 당면한 근본적인 문제를보고 내 일을 더 단순하게 만드는 공통 패턴으로 해결하는 것입니다.


P30K 거래 시스템을 사용하여 거래 자동화


Trading Futures & amp; 옵션은 손실 위험이 상당하므로 모든 투자자에게 적합하지 않습니다. 모든 성능 데이터는 중요한 제한이있는 테스트를 거친 모델을 기반으로합니다.


P30K 거래 시스템은 4 가지 유형의 거래를 이용하여 균형 잡힌 거래 시스템을 만드는 완전 자동화 된 거래 시스템입니다.


더 많은 정보를 지금 요청하십시오.


CFTC 규칙 4.41 : 결과는 특정 고유 한 제한이있는 가상 또는 가상 성능 결과를 기반으로합니다. 실제 성과 기록에 표시된 결과와 달리 이러한 결과는 실제 거래를 나타내지 않습니다. 또한 이러한 거래가 실제로 실행되지 않았기 때문에 이러한 결과는 유동성 부족과 같은 특정 시장 요인의 영향을 미달하거나 과대 보상 할 수 있습니다. 모의 또는 가상 거래 프로그램은 일반적으로 사후 적 이익을 고려하여 설계되었습니다. 어떤 계정으로도 이와 유사한 이익 또는 손실을 달성 할 것임을 나타내지는 않습니다.


황소 및 곰 시장 모두에서 잘 수행되도록 설계된 강력한 자동 거래 시스템.


P30K 트레이딩 시스템은 유한 상태 기계를 사용하며, 백 테스트를 거친 포워드 방법론을 사용하고, 옵션 프리미엄과 선물 시장의 영향력을 이용하여 완벽한 & amp; 정교한 거래 시스템. & # 8221;


P30K 트레이딩 시스템이 당신에게 무엇을 의미할까요?


감정을 제한하십시오.


여러 자동 실행 중개인을 통해 P30K 거래 시스템을 거래 할 수 있습니다. 거래와 관련된 감정적 인 어려움을 최소화하고 기존 거래 시스템을 사용하십시오.


공연.


이 거래 시스템은 시장 중립, 약세 및 강세장을 이용합니다. 현재 시장 상황에 따라 적절한 거래를 자동으로 선택합니다.


시장 통찰력.


언제든지 우리가 어떤 거래를하고 있는지 알 수 있습니다. 주문 제한, 귀하의 계정 자본 및 기타. 기존 거래 계좌에서 P30K 거래 시스템을 거래하고자하는 경우 자동 실행 대신 텍스트 알림을 수신하도록 선택할 수 있습니다.


선물 거래 및 선물 옵션은 손실 위험이 크며 모든 투자자에게 적절하지 않습니다. 거래에는 보장이 없습니다. 이 거래 시스템은 위험 자본으로 만 사용해야합니다.


P30K 트레이딩 시스템.


P30K 트레이딩 시스템은 단기적인 강세, 단기 약세, 시장 중립적 및 장기적인 방향 시장 상황을 이용하기 위해 4 가지 유형의 거래를합니다.


최대 삭도는 모든 거래 시스템과 관련된 위험을 측정 한 것입니다. 조심스럽게 알고리즘을 거래하기 전에이 데이터를 고려하십시오. 무역 선물 & amp; 옵션은 손실 위험이 상당하며 모든 투자자에게 적합하지 않습니다. 최대 삭감은 상당한 제한이있는 시험 된 데이터를 기반으로합니다.


CFTC 규칙 4.41 : 결과는 특정 고유 한 제한이있는 가상 또는 가상 성능 결과를 기반으로합니다. 실제 성과 기록에 표시된 결과와 달리 이러한 결과는 실제 거래를 나타내지 않습니다. 또한 이러한 거래가 실제로 실행되지 않았기 때문에 이러한 결과는 유동성 부족과 같은 특정 시장 요인의 영향을 미달하거나 과대 보상 할 수 있습니다. 모의 또는 가상 거래 프로그램은 일반적으로 사후 적 이익을 고려하여 설계되었습니다. 어떤 계정으로도 이와 유사한 이익 또는 손실을 달성 할 것임을 나타내지는 않습니다.


P30K 전문가와 이야기하여 P30K 트레이딩 시스템에 대해 더 자세히 배우고 시작하는 것이 얼마나 쉬운 지 알아보십시오.


어떤 종류의 거래가 이루어 집니까?


DAY TRADES.


S & amp; P Emini (ES)의 특정 시간에 하루 거래가 이루어집니다. 이러한 위험도가 낮은 거래는 단기적인 시장 변동을 이용하려고 시도합니다.


스윙 무역.


장기 방향 이동에 대한 기대가있을 때이 거래 시스템은 여러 날 동안 거래를 보류합니다.


IRON CONDORS.


특정 시간에이 거래 시스템은 Iron Condor 옵션 거래라는 시장 중립적 인 위치를 차지할 것입니다. 이 시스템을 배치하면 전화와 풋 모두에서 프리미엄을받습니다. 또한 더 많은 돈을 외침으로 구입하고 보호를 요청합니다.


보호 된 전화.


스윙 무역 ES가 촉발하는 특정시기에 우리는 또한 통화료를 매각 할 것입니다. 이를 통해 계정에 추가 증거금없이 추가 보험료를 징수 할 수 있습니다.


어떤 종류의 무역 실행 옵션을 사용할 수 있습니까?


P30K 거래 시스템은 여러 NFA 등록 브로커 중 하나를 사용하여 거래가 가능합니다.


텍스트 경고.


새로운 거래를 시작할 때마다 문자 메시지를 받으십시오. 출구 및 출품 지침이 제공되며 경고를받을 때 수동으로 각 거래를 수행합니다.


그들의 거래를 자동화하는 다른 사람들과 합류 할 준비가 되셨습니까?


부인 성명.


거래의 위험은 상당 할 수 있으며 각 투자자 및 / 또는 상인은 이것이 적합한 투자인지 여부를 고려해야합니다. 과거 실적은 실제 실적인지 또는 전략의 시뮬레이션 된 과거 테스트로 표시 되었든 반드시 미래 결과를 나타내는 것은 아닙니다. TradingSystem. org는 National Futures Association (NFA)의 등록 회원이 아닙니다. 우리는 CFTC 규칙 14.10 (a) (10)에 의해 부여 된 등록에서 자체 실행 제외를 주장합니다.


인덱스 선물 거래 및 선물 옵션은 높은 위험도를 지닙니다. 이 투자 스타일은 모든 사람들을위한 것이 아니며 위험 자본으로 만 추구해야합니다.


CFTC 규칙 4.41 : 결과는 특정 고유 한 제한이있는 가상 또는 가상 성능 결과를 기반으로합니다. 실제 성과 기록에 표시된 결과와 달리 이러한 결과는 실제 거래를 나타내지 않습니다. 또한 이러한 거래가 실제로 실행되지 않았기 때문에 이러한 결과는 유동성 부족과 같은 특정 시장 요인의 영향을 미달하거나 과대 보상 할 수 있습니다. 모의 또는 가상 거래 프로그램은 일반적으로 사후 적 이익을 고려하여 설계되었습니다. 어떤 계정으로도 이와 유사한 이익 또는 손실을 달성 할 것임을 나타내지는 않습니다.


역기능 성과는 많은 내재적 인 제한이 있으며 그 중 일부는 아래에 설명되어 있습니다. 어떤 계정이 이익이나 손실과 유사한 이익을 보일 것이라는 어떠한 진술도 제시되어 있지 않습니다. 사실상, 실적 실적과 특정 거래 프로그램에 의해 흔히 성취되는 실제 결과의 차이는 종종 상이합니다. 외상 성과 결과의 제한 중 하나는 일반적으로 통찰력의 혜택과 함께 준비된다는 것입니다. 또한 HYPOTHETICAL TRADING은 재무 위험을 포함하지 않으며 HYPOTHITICAL TRADING RECORD는 실제 거래의 재정적 위험에 대한 완전한 설명을 할 수 없습니다. 예를 들어, 손실을 저 지르거나 거래 손실이있는 특정 거래 프로그램에 참석할 수있는 능력은 실제 거래 결과에 약간의 영향을 미칠 수있는 자료 포인트입니다. 일반적으로 시장에 관련된 수많은 요인들이 있으며, 실적 실적의 준비 및 거래 결과에 중대한 영향을 미칠 수있는 모든 특정 거래 프로그램의 구현에 대한 충분한 정보가 포함되어 있지 않습니다.


추가 면책 조항을 보려면 TradingSystem. org Legal & Disclaimer 페이지를 읽어보십시오.


일일 이익 / 손실 보고서.


우리 팀의 최신 뉴스 및 업데이트를 받으려면 메일 링리스트에 가입하십시오.


무역을위한 상태 기계.


유한 상태 기계는 시스템이 달성 할 수있는 다양한 가능한 상태와 시스템이 한 상태에서 다른 상태로 이동할 때 발생하는 전이를 보여주는 시스템의 모델입니다. 거래 시스템을 모델링 할 때 사용할 수 있습니다.


상태 머신은 시장 모델을 승리하는 시스템으로 구성하는 데 필요한 메커니즘 일 수 있습니다. 유한 상태 기계 (FSM)가 어떻게 작동 하는지를 설명하고 거래 시스템 모델을 보여 드리겠습니다. 상태 머신은 거래 의사 결정을 자동화하기 위해 대부분의 프로그래밍 언어로 쉽게 생성 할 수 있습니다. 원하는 경우 수동으로 전략을 조작 할 수도 있습니다.


상태 머신 설명.


유한 상태 기계는 유한 오토 마톤이라고도하며 시스템이 달성 할 수있는 여러 가지 가능한 상태와 시스템이 한 상태에서 다른 상태로 이동할 때 발생하는 전환을 보여주는 시스템의 모델입니다. FSM은 엔지니어가 하드웨어 및 소프트웨어 시스템을 모델링하는 데 사용됩니다. 그들은 또한 당신의 거래 시스템을 모델링하는데 유리하게 사용될 수 있습니다.


간단한 신호등이 유한 상태 기계의 핵심 요소를 설명하는 데 사용됩니다. 그림 1은 신호등의 상태 머신 다이어그램을 보여줍니다. 빛에는 세 가지 유효한 상태가 있습니다. & # 8212; 빨강, 노랑 및 녹색. 빛은 주어진 시간에 오직 하나의 상태에있을 수 있습니다. 상태는 원으로 표시되고 화살표는 한 상태에서 다음 상태로의 전환을 나타냅니다. 주정부는 빨간색에서 녹색, 녹색에서 노란색, 노란색에서 빨간색으로 이동할 수 있습니다.


그림 1 : 신호등 상태도.


이벤트는 현재 상태에서 다음 유효한 상태로 이동을 시작합니다. 우리의 신호등에서는 전환이 발생할 수있는 두 가지 유형의 이벤트를 정의합니다. 가장 일반적인 전이 이벤트는 조명이 지정된 기간 동안 켜진 후에 발생합니다. 빨간색 표시등과 녹색 표시등의 시간은 각각 30 초이고 노란색 표시등은 5 초입니다. 타이머는 빛이 켜진 시간을 추적하고 시간이 경과하면 전환을 시작합니다.


두 번째 이벤트 유형은 횡단 보도 버튼을 누름으로써 정의됩니다. 빛이 빨간색이고 빛이 25 초 미만 동안 켜져있는 동안 횡단 보도 버튼을 누르면 타이머가 경과 시간의 25 초로 진행됩니다. 이로 인해 보행자가 교차 할 수 있도록 빨간색에서 녹색으로의 전환이 더 빨리 이루어집니다.


이것은 언급 된 시작 상태 나 정지 상태가 없기 때문에 시스템이 영원히 돌아가고 있다고 가정하는 매우 간단한 모델입니다. 그림 1의 다이어그램은 전환을 유발하는 이벤트에 대해서는 알려주지 않습니다. 유한 상태 기계를 구현하는 프로그램에는 이벤트를 트리거하는 규칙이 포함되어야합니다. 규칙은 그림과 같이 단순하거나 상당히 복잡 할 수 있습니다. 사이드 바, "상태 머신 프로그래밍" BASIC 같은 언어를 사용하여 신호등을 구현하는 방법을 보여줍니다. 규칙 예제가 어떤 상태에서 다음 상태로 전환되는지 구현하려면 코드 예제를 살펴보십시오.


거래를위한 상태 기계.


도 2는 가능한 거래 시스템을위한 유한 상태 기계의 다이어그램을 도시한다. 위치 입력 및 종료 위치를 나타내는 시작 상태 및 정지 상태가 포함되었습니다. 상태 다이어그램을 살펴보고 전환을 유발할 수있는 여러 상태와 이벤트를 설명합시다.


그림 2 : 거래 시스템 상태 다이어그램.


이 거래 시스템은 일련의 거래가 구매 주문을 트리거함으로써 시작될 것이라고 가정합니다. 상태 간 전환은 투자 의사 결정에 사용되는 규칙에 의해 시작됩니다. 우리는 각 주에서 수행 할 조치를 결정하기 위해 일련의 기술 지표를 평가했다고 가정합니다. 규칙은 일반적으로 새로운 데이터 집합을받을 때마다 평가됩니다. 일별 시스템은 최종 데이터로 평가됩니다. 시스템이 실시간 데이터 소스에 연결되어 있으면 현재 상태 규칙이 각각의 새 데이터 요소로 평가됩니다.


일별 시스템은 최종 데이터로 평가됩니다. 상태 기계의 설계는 구조 내에 각 상태에 대한 규칙 간의 종속성을 통합합니다. 결과 조치는 시스템 표시기가 표시하는 것뿐만 아니라 시스템이있는 위치 (즉, 현재 상태)에 따라 다릅니다. 시스템은 각 주에서 동일한 규칙 또는 표시기를 사용하도록 설계 할 필요가 없으므로 규칙 및 표시기를 각 주마다 최적화 할 수 있습니다. 상태 시스템에 프로그래밍 할 수있는 유연성과 거래 원칙의 결합은 거래에 힘을 불어 넣을 수 있습니다.


이동 평균을 기반으로 한 간단한 예제를 사용합시다. 종가가 이동 평균 이하로 떨어지면 판매 할 신호가 발생합니다. 종가가 이동 평균을 초과하면 구매 신호가 발생합니다. 또한 가격이 5 % 하락한 다음 이동 평균을 뚫지 않고 리바운드하는 경우 포지션에 추가됩니다. 당신이 판매하고 이동 평균을 관통하지 않고 가격이 5 % 회복되면 이것을 짧은 기회로 사용할 수 있습니다.


주어진 문제를 교환하기로 결정했다고 가정 해보십시오. 이 모델에서 시작 규칙은 시스템을 구매 상태로 이동시키는 이벤트를 트리거합니다. 구매 국가에 대한 규칙은 매우 간단합니다. 구매를하고 구매 보류 상태로 전환하십시오. 구매는 임시 상태이며 구매가 완료되면 시스템은 구매 보류 상태로 이동합니다. 규칙이 새로운 주로의 이동을 나타내지 않는 한, 시스템은 구매 보류 상태를 유지할 수 있습니다.


새로운 데이터 포인트에 대한 규칙은 종가가 이동 평균 이상으로 유지되는 한 주 변경이 요구되지 않는다고 규정합니다. 이것은 구매 보류 상태로 돌아가는 전환 화살표로 설명됩니다.


우리가 시장을보고 이동 평균을 차트로 볼 때, 우리는 가격 하락을 볼 수는 있지만, 팔리는 상태로 전환하기에 충분하지 않습니다. 우리 모델 규칙에 따르면이 퇴각이 5 %를 초과하므로 시스템이 구매 추가 상태로 전환하도록 트리거합니다. 구매와 마찬가지로 일시적인 상태이며 구매가 완료되면 시스템은 구매 보류 상태로 돌아갑니다.


어떤 시점에서 종가는 이동 평균 이하로 떨어지며 이동이 끝났고 종목 이벤트로 전환이 발생했음을 나타냅니다. 이 이벤트는 시스템을 임시 판매 상태로 이동시킵니다. 판매 상태에서 두 가지 결정이 가능합니다. 우리는이 문제에 대한 거래를 완전히 중단하기로 결정할 수도 있고, 판매가 완료되면이 주식을 계속 추적하여 판매 중지 상태로 옮길 수도 있습니다. 판매 중지 상태에서 시스템은 구매 신호에 대한 이동 평균의 침투를 기다립니다. 이동 평균을 관철하지 않고 가격이 5 % 상승하면 짧은 기회가 발생할 수도 있습니다.


그림 3은 선택한 기간 동안이 모델의 여러 상태와 차트를 보여 주며 설명 된 규칙에 따라 표시 될 수 있습니다. 보시다시피, 대부분의 시간은 구매 보류 (B) 또는 보류 (E) 상태로 지출됩니다.


도표 3 : 이동 평균을 가진 주식 종가.


이것은 간단한 주식 거래 시스템을 대표하는 모델입니다. 옵션 거래와 같은 다른 시스템은 취할 수있는 가능한 많은 종류의 직책 때문에 더 복잡 할 수 있으며 더 많은 주와 가능한 전환이 발생합니다. 상태 시스템은 거래 시스템의 규칙을 구성하기위한 논리적 제어 구조와 그러한 규칙을 자동화하기 위해 쉽게 프로그래밍 할 수있는 방법을 제공합니다. 따라서 이력 데이터를 상태 시스템에 적용하여 시스템을 백 테스트하는 것이 쉽습니다.


상태 시스템은 거래 시스템에 규율을 제공하는 데 사용될 수 있습니다. 각 주마다 여러 가지 의사 결정 규칙을 통합 할 수 있습니다. 설계 한 구조는 다른 접근법에 의해 명확하지 않거나 쉽게 모델화 될 수없는 종속성 관계를 자동으로 통합 할 수 있습니다. 사이드 바에 보여 지듯이, 당신이 사용하고자하는 규칙을 정의한 후에는 상태 머신을 프로그래밍하는 것이 어렵지 않습니다. 그러나 주 기계의 아이디어는 임의 거래 방법에도 쉽게 적용 할 수 있습니다.


Glenn Barlis는 시스템 디자인 컨설턴트입니다. 그는 경영학 석사 학위와 컴퓨터 과학 석사 학위를 받았습니다.


상태 머신 프로그래밍.


상태 기계는 IF-THEN-ELSE 제어 구조를 제공하는 모든 언어로 구현 될 수 있습니다. 또한 언어는 이벤트 사이에 현재 시스템 상태를 보유 할 수있는 변수를 제공해야합니다. 다음은 BASIC 같은 언어로 표시된 신호등 예제입니다. 상태 시스템이 초당 한 번 실행되고 시스템이 알려진 올바른 상태로 시작된다고 가정합니다.


신호등 상태 머신.


정적 Current_State; 기계 상태를 유지합니다.


정적 타이머; 얼마나 오랫동안 추적합니다.


빛이 켜져있다.


상수 green_time = 30; 조명의 정각을 정의하십시오.


IF Current_State = 녹색 그 다음.


IF Timer & gt; = green_time THEN.


타이머 = 타이머 + 1.


ELSE IF Current_State = 황색 THEN.


IF Timer & gt; = yellow_time THEN.


타이머 = 타이머 + 1.


ELSE IF Current_State = 빨간색 THEN.


IF 타이머 (red_time - 5) AND Cross_Button_Pushed THEN.


타이머 = red_time - 5.


IF 타이머> = red_time THEN.


타이머 = 타이머 + 1.


CASE 문을 사용하는 상태 머신.


IF-THEN-ELSE 문을 모두 추적하면 혼란을 겪을 수 있고 프로그램이 버그에 더 쉽게 걸릴 수 있습니다. 많은 프로그래밍 언어는 이런 종류의 코드 작성을 단순화하기 위해 Case 문 형식을 제공합니다. 다음은 Visual BASIC 구문과 함께 CASE 문을 사용하는 동일한 예제입니다.


Case Current_State를 선택하십시오.


IF Timer & gt; = green_time THEN.


타이머 = 타이머 + 1.


IF Timer & gt; = yellow_time THEN.


타이머 = 타이머 + 1.


IF 타이머 (red_time - 5) AND.


타이머 = red_time - 5.


IF 타이머> = red_time THEN.


타이머 = 타이머 + 1.


Select Case 구조는 Current_State 값을 기준으로 사례 중 하나를 선택합니다. 보시다시피, 이 프로그램 세그먼트는 IF-THEN-ELSE 예제보다 훨씬 이해하기 쉽고 버그가 적습니다.


유한 상태 기계를 구현하는 세 번째 옵션은 테이블 구동 상태 기계 엔진을 사용하는 것입니다. 이것은 복잡한 기계 나 사용자 정의 상태 규칙에 대한 쉬운 방법을 제공해야하는 상업용 소프트웨어에 사용되는보다 정교한 방법입니다.


저작권 및 사본; 1982 & 2017 기술 분석, Inc. 모든 권리 보유. 면책 조항 & amp; 개인 정보 보호 정책.


algotrading.


54 & # 32; пользователя находятся здесь.


МОДЕРАТОРЫ.


Reddit에 오신 것을 환영합니다.


인터넷의 첫 페이지.


수천 개의 커뮤니티 중 하나에 가입하십시오.


Это архивированный пост. Вы не можете голосовать или комментировать.


отправлено & # 32; 4 года назад & # 32; автор & # 32; piikac.


토론에 추가하고 싶습니까?


помощь правила сайта центр поддержки вики реддикет 모드 가이드 라인 связаться с нами.


приложенияи инструменты Reddit for iPhone Reddit for Android 모바일 웹 사이트 кнопки.


회신을 보내십시오. & # 32; & # 32; Политика конфиденциальности. &부; 2017 reddit 그래픽입니다. Все права защищены.


REDDIT 및 ALIEN 로고는 reddit inc의 등록 상표입니다.


& pi; & # 32;에서 PID 9083에 의해 렌더링 됨. app-396 & # 32; 2017-12-14 22 : 41 : 02.658882 + 00 : 00 28443b0 국가 코드 : UA.

No comments:

Post a Comment