외환 신경망


외환 예측.
이 예제는 이전 예제와 매우 비슷합니다. 유일한 차이점은 외환 (외환) 통화 쌍에 대한 데이터를 보여줍니다.
애플릿 작업 방법.
첫 번째 예제를 보지 못했다면 먼저 탐색 해보십시오. 기본 설명은 해당 위치에서 사용할 수 있습니다. 이 애플릿에서는 다음과 같은 데이터를 사용할 수 있습니다. 이들 모두는 2007 년 내내 하루 종일 가까운 값, 즉 313 값입니다. 이전 애플릿에서와 같이이 시계열은 각각 다음 값을 갖습니다. 0 미만 간격의 경우 0, 간격 0- 닫는 값, 마지막 알려진 값 이후의 0. EURUSD - EUR USD 외환 통화 쌍 데이터 USDJPY - EUR USD 외환 통화 쌍 데이터 USDCHF - EUR USD 외환 통화 쌍 데이터 EURJPY - EUR USD 외환 통화 쌍 데이터이 예제는 설명 목적으로 만 제공됩니다. 이 간단한 설정을 사용하여 거래하는 것은 일반적으로 최종 가용 가치로 예측을 사용하는 것과 거리가 멀지 않습니다. 또한 거래를 위해서는 진입 및 퇴출 규칙을 개발해야하며 정확한 예측보다 더 중요하다고 유의하십시오.
애플릿이로드 될 때까지 기다려주십시오.
애플릿 및 설명 (c) Marek Obitko, 2008; 애플릿의 신경망은 Java 클래스 인 BPNeuron과 BPNet을 사용합니다.
이 애플릿의 목적을 위해 수정 된 NeuralWebspace, (c) Tombљ Vehovskэ, 1998.

외환 신경망
Forex를위한 하이브리드 신경망 정지 및 역전 전략.
Michael R. Bryant.
뉴럴 네트워크는 수년간 거래 시스템에서 다양한 수준의 성공으로 사용되어 왔습니다. 그들의 주요 매력은 비선형 구조가 표준 지표 기반 거래 규칙보다 가격 이동의 복잡성을 더 잘 포착 할 수 있다는 것입니다. 비판 중 하나는 신경망 기반 거래 전략이 지나치게 적합하기 때문에 새로운 데이터에서 잘 수행되지 않는다는 것입니다. 이 문제에 대한 가능한 해결책은 신경망을 규칙 기반 전략 논리와 결합하여 하이브리드 유형의 전략을 만드는 것입니다. 이 기사에서는 Adaptrade Builder를 사용하여이 작업을 수행하는 방법을 보여줍니다.
특히이 기사에서는 다음을 설명합니다.
거래 항목에 대한 신경망과 규칙 기반 논리를 결합합니다.
동시에 여러 플랫폼 타겟팅 (MetaTrader 4 및 TradeStation)
비대칭 정지 - 및 - 역 논리를 사용하여 전략 개발.
intraday forex 데이터 사용.
마지막 전략을 검증하는 데 사용되는 세 번째 세그먼트 데이터 접근 방식이 사용됩니다. MetaTrader 4 및 TradeStation에 대한 결과 전략 코드가 표시되며 각 플랫폼에 대해 검증 결과가 긍정적임을 입증합니다.
무역 진입 필터로서의 신경망.
수학적으로 신경망은 하나 이상의 출력 값을 생성하는 하나 이상의 가중 입력의 비선형 조합입니다. 거래의 경우, 신경망은 일반적으로 (1) 미래 가격 움직임의 예측 또는 (2) 거래를위한 지표 또는 필터의 두 가지 방법 중 하나로 사용됩니다. 여기에서 지표 또는 거래 필터로 사용하는 것이 고려됩니다.
지표로서, 신경망은 거래가 시작되기 전에 만족 되어야만하는 추가 조건 또는 필터 역할을합니다. 네트워크에 대한 입력은 전형적으로 모멘텀, 스토캐스틱, ADX, 이동 평균 등과 같은 다른 기술 지표와 이전 가격의 가격 및 조합입니다. 입력은 크기가 조정되고 신경망은 출력이 -1과 +1 사이의 값이되도록 설계되었습니다. 한 가지 방법은 출력이 0.5와 같은 임계 값보다 크거나 같으면 긴 입력을 허용하고 출력이 임계 값의 음보다 작거나 같은 경우 짧은 입력을 허용하는 것입니다. 예 : -0.5. 이 조건은 기존 입력 조건에 추가됩니다. 예를 들어, 긴 입력 조건이있는 경우, 참이어야하고 신경망 출력은 긴 입력에 대한 임계 값과 적어도 같아야합니다.
뉴럴 네트워크를 설정할 때, 통상적으로 상인은 입력 및 네트워크 토폴로지를 선택하고 "트레이닝 (training)"을 담당 할 것이다. 최적의 가중치를 결정하는 네트워크 아래에 나와있는 것처럼 Adaptrade Builder는 소프트웨어가 기반으로하는 진화 적 빌드 프로세스의 일부로 이러한 단계를 자동으로 수행합니다. 신경망을 거래 필터로 사용하면 다른 규칙과 쉽게 결합하여 기존의 규칙 기반 방식의 최상의 기능과 신경망의 장점을 결합한 하이브리드 거래 전략을 만들 수 있습니다. 간단한 예를 들어, 빌더는 이동 평균 크로스 오버 규칙을 신경망과 결합하여 빠른 이동 평균이 느린 이동 평균을 초과하고 신경망 출력이 임계 값 이상인 경우 긴 위치가 취해질 수 있습니다.
Stop-and-Reverse 거래 전략.
stop-and-reverse 거래 전략은 항상 길거나 짧은 시장에 존재하는 전략입니다. 엄밀히 말하면, "정지 및 역전" 정지 주문에 도달했을 때 거래를 취소한다는 의미입니다. 그러나, 나는 그것을 장단점에서 장단기로 전환하는 모든 거래 전략에 대한 단문으로 사용하므로 항상 시장에 나와 있습니다. 이 정의에 따라 주문이 중지 명령 일 필요는 없습니다. 시장을 이용하여 진입하거나 역으로 전환하거나 주문을 제한 할 수 있습니다. 또한 각면에서 동일한 논리 또는 동일한 주문 유형을 사용할 필요는 없습니다. 예를 들어, 중지 주문에 long (그리고 exit short)을 입력하고 각 entry / exit에 대해 다른 규칙과 조건을 사용하여 시장 주문에 short (그리고 long exit)를 입력 할 수 있습니다. 이것은 비대칭 정지 - 및 역방향 전략의 한 예입니다.
stop-and-reverse 전략의 가장 큰 장점은 항상 시장에 나와 있으면 큰 움직임을 놓치지 않는 것입니다. 또 다른 장점은 단순성입니다. 거래를 시작하고 종료하기위한 별도의 규칙과 조건이있는 경우 더 복잡하고 더 많은 것이 잘못 될 수 있습니다. 항목과 종료를 결합하면 타이밍 결정이 줄어들며 실수가 줄어들 수 있습니다.
반면에, 거래를 종료하기위한 최적의 조건은 반대 방향으로 진입하는 조건과 거의 동일하다고 주장 할 수있다. 진입 및 퇴출 거래는 본질적으로 분리 된 결정이므로 별도의 규칙과 논리를 사용해야합니다. 항상 시장에 존재한다는 또 다른 잠재적 인 단점은 전략이 모든 오프닝 갭을 통해 거래 될 것이라는 점입니다. 포지션과의 커다란 격차는 전략이 반전되기 전에 막대한 손실을 의미 할 수 있습니다. 보다 선택적으로 출입하는 전략이나 하루가 끝날 때 퇴장하는 전략은 공백을 메우는 영향을 최소화 할 수 있습니다.
목표는 외환 전략을 수립하는 것이므로 MetaTrader 4 (MT4)는 MetaTrader 4가 주로 외환을 위해 설계되었으며 해당 시장을 거래하는 데 널리 사용된다는 점에서 거래 플랫폼에 대한 확실한 선택입니다 (예 : MetaTrader vs. TradeStation : 언어 비교). 그러나 최근 몇 년간 TradeStation은 외환 시장을보다 공격적으로 타깃으로 삼았습니다. 귀하의 거래량 및 / 또는 계정 수준에 따라 플랫폼 수수료를받지 않고 커미션을 지불하지 않고도 TradeStation을 통해 외환 시장을 거래 할 수 있습니다. 스프레드는 주요 외환 쌍에 좋은 유동성으로 타이트하게 보도되고있다. 이러한 이유로 두 플랫폼 모두이 프로젝트의 대상이었습니다.
여러 플랫폼을 동시에 타겟팅 할 때 몇 가지 문제가 발생합니다. 첫째, 시간대, 일부 막대의 가격 견적, 수량 및 사용 가능한 날짜 범위가 서로 다른 플랫폼에 따라 데이터가 다를 수 있습니다. 이러한 차이를 완화하기 위해 두 플랫폼에서 모두 데이터를 얻었으며이 전략은 두 데이터 시리즈에 동시에 적용되었습니다. 따라서 최상의 전략은 데이터의 차이에도 불구하고 두 데이터 시리즈 모두에서 잘 작동하는 전략이었습니다.
그림 1의 Market Data 테이블에서 추측 할 수있는 바와 같이 유로 / 달러 외환 시장은 4 시간 (240 분)의 막대 크기를 가진 EURUSD를 목표로했습니다. 다른 바 크기 나 시장도 마찬가지였습니다. 필자는 MT4 플랫폼을 통해 그림 1 (데이터 시리즈 # 2)에 표시된 날짜 범위로 표시된만큼의 데이터를 얻을 수 있었기 때문에 동일한 날짜 범위가 TradeStation에서 동일한 데이터 시리즈를 얻는 데 사용되었습니다 (데이터 시리즈 # 1). 데이터의 80 %는 검증을 위해 따로 보관되는 20 % (6/20/14에서 2/10/15)와 함께 Building (샘플 내 및 "Out-of-Sample"결합) 용으로 사용되었습니다. 이어서, 원래의 80 %의 80 %가 "샘플 내"로 설정되었다. 20 %가 "샘플 밖"으로 설정된 경우, 매도 / 매도 스프레드는 5 pips로 설정되었고 라운드 컷 당 6 pips 또는 풀 사이즈 로트 (100,000 주) 당 60 달러의 거래 비용이 가정되었다. 두 데이터 시리즈는 Market Data 테이블의 왼쪽 열에있는 확인 표시에 표시된대로 빌드에 포함되었습니다.
그림 1. MetaTrader 4 및 TradeStation의 외환 전략을 수립하기위한 마켓 데이터 설정.
여러 플랫폼을 대상으로 할 때 또 다른 잠재적 인 문제점은 지원되는 각 플랫폼이 해당 표시기를 계산하는 방식을 복제하도록 설계 되었기 때문에 선택되는 플랫폼에 따라 표시기 값이 달라질 수 있다는 것입니다. 이러한 불일치의 원인을 피하기 위해 MetaTrader 4에서 TradeStation보다 다르게 평가되는 지표는 빌드에서 제거되어야합니다. 이는 다음과 같은 지표를 피해야 함을 의미합니다.
천천히 D 확률 적.
빠른 확률론.
두 플랫폼 모두에서 사용할 수있는 다른 모든 표시기는 두 플랫폼에서 같은 방식으로 계산됩니다. TradeStation에는 Builder에서 사용할 수있는 모든 표시기가 포함되어 있지만 MetaTrader 4에서는 사용할 수 없습니다. 따라서 두 플랫폼 모두에서 사용할 수있는 지표 만 포함하려면 Builder에서 코드 유형으로 MetaTrader 4 플랫폼을 선택해야합니다. 그러면 빌드 세트에서 MT4에 사용할 수없는 지표가 자동으로 제거되므로 두 플랫폼 모두에서 사용할 수있는 지표가 남습니다. 또한 각 플랫폼에서 얻은 볼륨 데이터의 차이점을 발견 했으므로 빌드 세트에서 모든 볼륨 종속적 인디케이터를 제거했습니다. 마지막으로 데이터 파일 간의 시간대가 다르기 때문에 시간 표시기가 제거되었습니다.
아래의도 2에서, 빌드 세트에서 사용되는 인디케이터리스트는 빌드 프로세스 ( "고려"열)에 의해 인디케이터가 고려되었는지 여부에 따라 정렬되어 도시된다. 위에서 논의 된 이유로 지표가 제거되면 목록 상단에 표시됩니다. "Simple Mov Ave"로 시작하는 나머지 표시기는 모두 빌드 세트의 일부였습니다.
그림 2. 빌드 세트에서 제거 된 지표를 보여주는 Builder의 표시기 선택.
빌드 프로세스에서 사용 된 평가 옵션은 그림 3과 같습니다. 앞서 설명한 것처럼 MetaTrader 4가 코드 출력 선택으로 선택되었습니다. Builder에서 전략을 작성한 후에는 코드 유형을 포함하여 평가 옵션 탭의 옵션을 변경하고 전략을 재평가 할 수 있으며 선택한 언어로 코드를 재 작성합니다. 이 기능은 MetaTrader 4를위한 전략을 수립 한 후 최종 전략을위한 TradeStation 코드를 얻는 데 사용되었습니다.
그림 3. EURUSD forex 전략을위한 빌더의 평가 옵션.
정지 및 후진 전략을 생성하기 위해 아래 그림 4와 같이 모든 출구 유형이 빌드 세트에서 제거되었습니다. 세 가지 유형의 진입 명령 (시장, 정지 및 제한)은 모두 "고려하십시오"로 남았습니다. 이는 빌드 프로세스가 빌드 프로세스 중에 고려할 수 있음을 의미합니다.
그림 4. Builder에서 선택한 주문 유형을 사용하여 중지 및 후진 전략을 작성하십시오.
Builder 소프트웨어는 항목 및 / 또는 종료에 대한 규칙 기반 논리 조건을 자동으로 생성합니다. 전략에 신경망을 추가하기 위해, "진입 조건에서 신경망을 포함"옵션을 선택하는 것만으로 충분하다. Strategy Options (전략 옵션) 탭에서 아래 그림 5와 같이 신경망 설정이 기본값으로 유지됩니다. 정지 및 역 논리의 일부로서, Market Sides 옵션은 Long / Short로 설정되고, & quot; 새로운 거래를 시작하기 전에 종료를 기다리는 & quot; 확인되지 않았습니다. 후자는 반전시 현재 오더를 종료하도록 엔트리 오더를 활성화하는 데 필요합니다. 다른 모든 설정은 기본값으로 두었습니다.
그림 5. 규칙 기반 및 신경망 조건을 모두 사용하여 하이브리드 전략을 작성하기 위해 Builder에서 선택한 전략 옵션.
Builder에서 빌드 프로세스의 진화 적 특성은 그림 6에서와 같이 메트릭 탭에 정의 된 목표 및 조건에서 계산 된 적합성에 따라 결정됩니다. 빌드 목표는 간단하게 유지됩니다. 최소 이익을 극대화하면서 순이익 최대화 복잡성, 순이익에 비해 상대적으로 작은 가중치를 부여했습니다. 일반적인 전략 품질에 대한 상관 계수 및 중요성뿐만 아니라 거래의 평균 막대 및 거래 수를 포함하는 구축 조건에 중점을 두었습니다.
처음에는 거래의 평균 막대 만 구축 조건으로 포함되었습니다. 그러나 일부 초기 빌드에서는 당기 순이익이 거래 기간보다 선호되어 거래 수 메트릭이 추가되었습니다. 거래 횟수 (209 ~ 418)의 지정된 범위는 빌드 기간의 막대 수에 따라 15 ~ 30 바 사이의 평균 거래 길이와 같습니다. 결과적으로, 이 측정 기준을 추가하는 것은 무역 길이 목표에 더 많은 중점을 두었고, 결과적으로 원하는 무역 범위의 범위를 가진 인구가 더 많아졌습니다.
그림 6. 메트릭 탭에서 설정 한 빌드 목표 및 조건에 따라 적합성 계산 방법이 결정됩니다.
& quot; 인기 전략 선택 조건 & quot; 빌드 조건의 경우와 같이 빌드 기간 동안이 아니라 전체 데이터 범위 (별도의 유효성 검사 세그먼트 제외)에서 최상위 전략 조건을 평가한다는 점을 제외하고는 빌드 조건을 복제하십시오. 최상위 전략 조건은 프로그램이 별도의 모집단에있는 모든 조건을 충족시키는 전략을 따로 설정하는 데 사용됩니다.
최종 설정은 아래 그림 7과 같이 [빌드 옵션] 탭에서 수행됩니다. 여기에서 가장 중요한 옵션은 모집단 크기, 세대 수 및 "샘플 외"를 기반으로 재설정 할 수있는 옵션입니다. 공연. 인구 규모는 인구의 다양성을 유지하기에 충분할 정도로 커지도록 선택되었으며 합리적인 시간 내에 구축하기에 충분히 작습니다. 세대 수는 결과가 수렴하기 시작하기 위해 몇 가지 예비 빌드를 수행하는 데 걸린 시간을 기준으로합니다.
그림 7. 빌드 옵션에는 모집단 크기, 세대 수, & quot; 샘플 외 & quot;를 기반으로 모집단을 재설정하는 옵션이 포함됩니다. 공연.
& quot; OOS (Out-of-Sample) 성능에서 초기화 & quot; 옵션은 지정된 조건이 충족되면 지정된 세대 수 이후에 빌드 프로세스를 시작합니다. 이 경우에, 모집단은 "샘플 밖"(out-of-sample) 순이익은 20,000 달러 미만입니다. 이 값은 사전 테스트를 기준으로 선택 되었기 때문에 충분히 도달 할 수 없을만큼 높은 값입니다. 결과적으로 빌드 프로세스는 수동 중지 될 때까지 30 세대마다 반복되었습니다. 이것은 프로그램이 오랜 기간 동안 최고 전략 조건에 기반한 전략을 식별하게하는 방법입니다. 정기적으로 상위 전략 인구를 확인하고 적절한 전략을 찾으면 구축 프로세스를 취소 할 수 있습니다.
나는 "out-of-sample"을 넣는다. 따옴표 안에. "아웃 오브 샘플" 기간이 이러한 방식으로 모집단을 재설정하는데 사용되는 경우, "샘플 밖" 기간은 더 이상 진정한 표본이 아닙니다. 이 기간은 현재 빌드 프로세스를 안내하는 데 사용되고 있으므로 샘플 기간의 일부분이됩니다. 위에서 설명한 것처럼 유효성 검사를 위해 세 번째 세그먼트를 따로 설정하는 것이 좋습니다.
몇 시간의 처리 및 자동 재 구축 횟수를 거친 후 Top Strategies 인구에 적합한 전략이 발견되었습니다. 폐쇄 형 무역 주식 곡선은 아래 그림 8에 나와 있습니다. 이 주식형 곡선은 두 거래에서 일정한 실적을 보였으며 두 거래에서 동일한 결과를 나타 냈습니다.
그림 8. EURUSD stop-and-reverse 전략에 대한 비공개 주식 거래 곡선.
유효성 검사 기간 동안 전략을 확인하기 위해 시장 탭 (그림 1 참조)의 날짜 컨트롤이 데이터 종료 날짜 (2015 년 2 월 11 일)로 변경되고 전략은 평가를 선택하여 재평가되었습니다 명령을 선택하십시오. 결과는 아래 그림 9와 같습니다. 빨간색 상자의 유효성 검사 결과는 전략이 빌드 프로세스 중에 사용되지 않는 데이터를 유지하고 있음을 보여줍니다.
그림 9. 유효 기간을 포함하여 EURUSD stop-and-reverse 전략에 대한 비공개 주식 거래 곡선.
최종 점검은 해당 플랫폼에 대한 코드 출력 옵션을 사용하여 각 데이터 시리즈에서 전략을 수행하는 방법을 개별적으로 확인하는 것입니다. 위에서 설명한 것처럼 (1) 코드 유형 및 (2) 데이터 계열에 따라 결과에 차이가있을 수 있기 때문에 이는 필요합니다. 선택한 설정이 이러한 차이를 최소화했는지 확인해야합니다. MetaTrader 4의 전략을 테스트하기 위해 Markets 탭에서 TradeStation의 데이터 시리즈를 선택 해제하고 전략을 재평가했습니다. 그 결과를도 10에 아래에 나타내 었으며, 이는도 9의 하부 곡선과 동일하다.
그림 10. MetaTrader 4의 유효 기간을 포함하여 EURUSD 중지 및 역전 전략에 대한 비공개 주식 거래 곡선.
마지막으로 TradeStation의 전략을 테스트하기 위해 TradeStation의 데이터 시리즈를 선택하고 MetaTrader 4의 시리즈를 Markets 탭에서 선택 취소하고 코드 출력을 "TradeStation"으로 변경했습니다. 그 전략은 재평가되었다. 그 결과는도 11에 아래에 도시되어 있으며 예상대로도 9의 중간 곡선과 매우 유사하게 나타난다.
그림 11. TradeStation의 유효 기간을 포함하여 EURUSD 중지 및 역전 전략에 대한 비공개 주식 거래 곡선.
두 플랫폼의 코드는 아래 그림 12에 나와 있습니다. 이미지를 클릭하면 해당 플랫폼의 코드 파일이 열립니다. 코드를 검토하면 전략의 규칙 기반 부분이 장기 및 단기에 대해 다양한 변동성 관련 조건을 사용함을 알 수 있습니다. 신경망 입력은 요일, 추세 (ZLTrend), 일중 최고, 오실레이터 (InvFisherCycle, InvFisherRSI), 볼린저 밴드 및 표준 편차를 비롯한 다양한 지표로 구성됩니다.
이 전략의 하이브리드 성은 TradeStation 코드의 코드 구문에서 직접 볼 수 있습니다.
EntCondL 및 NNOutput & gt; = 0.5 인 경우, 시작한다.
구매 ( "EnMark-L") NShares는 시장에서 다음주를 공유합니다.
변수 "EntCondL" 는 룰 - 기반 엔트리 조건을 나타내고, "NNOut"는 룰 - 기반 엔트리 조건을 나타낸다. 신경망의 출력입니다. 긴 입력 순서를 지정하려면 두 조건이 모두 true 여야합니다. 짧은 입력 조건은 동일한 방식으로 작동합니다.
그림 12. EURUSD stop-and-reverse 전략을위한 거래 전략 코드 (왼쪽, MetaTrader 4, 오른쪽, TradeStation). 그림을 클릭하면 해당 코드 파일이 열립니다.
이 기사에서는 Adaptrade Builder로 stop-and-reverse (항상 시장에 나와있는) 접근 방식을 사용하여 EURUSD를위한 하이브리드 규칙 기반 / 신경망 전략을 세우는 과정을 살펴 보았습니다. 각 플랫폼에서 동일한 방식으로 작동하는 지표의 공통 하위 집합을 선택하여 여러 플랫폼에서 전략 코드를 생성하는 방법을 보여주었습니다. 장단기에서 후퇴로 역전되는 전략을 생성하는 데 필요한 설정이 기술되었으며 결과적인 전략이 별도의 유효성 검증 세그먼트에서 긍정적으로 수행 되었음이 입증되었습니다. 또한이 전략은 각 플랫폼에 대해 데이터 및 코드 옵션을 사용하여 유사한 결과를 생성했음을 확인했습니다.
위에서 언급했듯이 정지 및 역 접근에는 몇 가지 단점이 있으며 모든 사람에게 호소력이 없을 수 있습니다. 그러나 외환 시장은 24 시간 내내 거래되기 때문에 항상 시장 접근 방식이 외환 데이터에 더 매력적일 수 있습니다. 결과적으로 세션 오프닝 갭이 없으며 거래 주문은 항상 활성화되어 시장 변화에 따라 거래를 되돌릴 수 있습니다. 하루 동안의 데이터 (4 시간 막대)를 사용하면 빌드 프로세스에서 더 많은 데이터 막대가 제공되었지만 전략의 항상 시장 특성은 거래가 밤새 수행된다는 점에서 상당히 임의적이었습니다.
빌드 프로세스는 길고 짧은 진입을위한 다양한 조건을 전개 할 수 있었기 때문에 비대칭 스톱 앤드 리버스 전략이 가능했습니다. 이름에도 불구하고 시장, 정지 및 제한 주문은 모두 각 측면에 대해 독립적으로 구축 프로세스에 의해 고려되었지만 결과적인 전략은 시장 주문에 대한 장기 및 단기 거래를 시작합니다. 실제로 장기간에서 단기로 반전하는 것은 전략이 현재 길기 때문에 시장에서 주식의 수를 두 배로 줄이는 것을 의미합니다. 예를 들어, 현재의 긴 포지션이 100,000 주라면, 시장에서 200,000 주를 판매 할 수 있습니다. 마찬가지로, 현재 짧은 포지션이 100,000 주라면, 시장에서 20 만 주를 사면서 단기에서 장기로 반전 할 수 있습니다.
이상적인 것보다 더 짧은 가격 내역이 사용되었습니다. 그럼에도 불구하고 그 결과는 밸리데이션 부문에서 긍정적이었고 과도한 전략이 아니었다. 이는 전략을 시장에 과도하게 적용하지 않고도 신경망을 거래 전략에 사용할 수 있다는 생각을 뒷받침합니다.
여기 제시된 전략은 실제 거래를위한 것이 아니며 실시간 추적 또는 거래에서 테스트되지 않았습니다. 그러나이 기사는 EURUSD 또는 기타 시장에 대한 유사한 전략을 개발하기위한 템플릿으로 사용할 수 있습니다. 항상 그렇듯이 개발하는 모든 거래 전략은 실시간 추적 또는 개별 데이터로 철저히 테스트하여 결과를 확인하고 실시간 거래에 앞서 전략의 거래 특성을 익히도록해야합니다.
이 기사는 Adaptrade Software 뉴스 레터의 2015 년 2 월호에 실렸습니다.
HYPOTHETICAL 또는 SIMULATED PERFORMANCE 결과는 특정 제한이 있습니다. 실제 성과 기록과 달리, 시뮬레이션 된 결과는 실제 거래를 나타내지 않습니다. 또한 거래가 실제로 실행되지 않았기 때문에 결과가 유동성 부족과 같은 특정 시장 요인에 영향을 미치거나 과다 또는 과소 보상을받을 수 있습니다. 시뮬레이션 된 거래 프로그램은 일반적으로 통보의 이익을 고려하여 설계되었다는 사실을 인정합니다. 어떠한 계정도 이익이나 손실을 달성 할 가능성이있는 것으로 나타나지 않습니다.
Adaptrade Software의 새로운 개발, 뉴스 및 특별 제안에 대한 정보를 얻으려면 당사 목록에 가입하십시오. 고맙습니다.
저작권 © 2004-2015 Adaptrade Software. 판권 소유.

최첨단 Forex 기술.
정확한 외환 신호를위한 사회 신경망 활용.
많은 헤지 펀드 및 프로 트레이더가 사용합니다. 엄격한 테스트를 거친, 높은 R ​​/ 위험 비율 및 90 % 몬테 카를로 예측 정확도.
일관된 성능.
FX Trading은 손실을 줄이거 나 승자를 실망시키는 것에 관한 것입니다. ForexSignals. me에서 모든 Forex, 상품 및 지수 거래에는 최소 1 : 3 위험 / 보상 비율이 있습니다. 평균 승수는 평균 손실의 두 배 이상입니다.
스마트 리스크 관리.
당사의 최첨단 위험 관리 알고리즘은 사전에 미래의 미래 수익을 잘 예측합니다. 이 독점 기술을 통해 당사의 거래 엔진은 거래 당 및 세션 당 절감액을 항상 낮게 유지할 수 있습니다.
스텔라 고객 서비스.
Trading Forex는 리스크가 높을뿐만 아니라 스트레스도 높음. 우리의 고객 지원 팀은 24x7의 기술 또는 외환 거래 질의를 처리하기 위해 신속한 처리 시간, 탁월한 지원 및 복잡한 지식에 대한 실적을 보유하고 있습니다.
© 2013 정확성 중심의 Forex 신호 ITM Financial.

스노우 크론.
무료 E. Mail 클래스.
이 기사에서는 : 신경 네트워크 소프트웨어를 사용하여 완벽한 신경 네트워크 거래 시스템을 만드는 예.
이 예제는 Cortex 내장 스크립팅 언어를 사용하므로 스크립트 언어 안내서를 먼저 읽으십시오.
신경망을 사용하여 외환 거래 전략 수립.
이 무료 온라인 자습서에서는 신경망 (Cortex 신경망 소프트웨어)을 Forex 거래 (또는 주식 시장 거래, 아이디어는 동일합니다)로 사용하는 "전체주기"를 찾을 수 있습니다.
인공 신경망에 대한 입력을 선택하는 방법과 출력으로 사용할 것을 결정하는 방법을 배웁니다.
뉴런 네트워크 (뉴런 수) 및 외환 거래 시스템 (스톱 손실 등)의 신경 네트워크 최적화를 수행 할 수있는 스크립트를 사용할 준비가 된 예제를 찾을 수 있습니다.
마지막으로 (대부분의 자습서에없는 부분), 다음에해야 할 일을 배우게됩니다. 결국 Cortex Neural Networks 소프트웨어는 실시간 거래를 할 수 없기 때문에 Trade Station, MetaQuotes 또는 MetaTrader와 같은 것을 사용해야합니다. Cortex에서 좋아하는 거래 플랫폼으로 FOREX 거래 시스템을 이식하는 방법은 무엇입니까? DLL, ActiveX 컨트롤 및 로우 레벨 프로그래밍을 다루어야합니까? 내 대답은 아니오 야.
Cortex Neural Networks 소프트웨어는 사용하기 쉬운 기능을 제공하므로 결과 (훈련 된) 신경망을 거래 플랫폼의 스크립팅 언어로 쉽게 포팅 할 수 있습니다. DLL, DDE, ActiveX 또는 기타 저급 솔루션은 없습니다. 모든 것이 간단하고 간단합니다.
중요 참고 사항 :이 안내서는 "사용법"안내서가 아닙니다. 대신 Cortex Neural Networks 소프트웨어를 사용하는 방법을 알려주지 만 여전히 자신의 거래 시스템을 개발해야합니다. 우리가 여기서 사용하는 것은 출발점에 불과하며 "있는 그대로"외환 거래 전략으로 사용되어서는 안됩니다. 이 텍스트의 아이디어는 NN 기반 거래 시스템을 만들고 원하는 거래 플랫폼으로 이식하도록 안내하는 것입니다. 그러나이 예는 단순화되어있어 거래 원칙의 예로서 만 사용될 수 있습니다. 같은 방식으로, 많은 자습서에서 찾을 수있는 MACD 거래 시스템은 시장이 변화함에 따라 더 이상 잘 작동하지 않지만 여전히 기계 거래를위한 지표를 사용하는 좋은 예입니다.
두 단어로 : 자신의 분석을하십시오.
또 다른 중요한 참고 사항 :이 튜토리얼에서는 예제를 많이 사용합니다. 당신의 삶을 편하게하기 위해서, 나는 단편뿐만 아니라 모든 것을 포함 시켰습니다. 그러나 그것은 텍스트를 훨씬 길게 만듭니다. 또한, 나는 무엇보다 개선 된 이유와 이유를 설명 할 때마다, 매우 첫 번째, 서투른 외환 거래 시스템에서 더 발전 할 것입니다. 인내심을 갖고 필요한 부분으로 바로 이동하십시오.
최종 중요 사항 : 코드는 돌로 조각 된 것이 아니라이 텍스트가 작성된 동안 변경 될 수 있습니다. 스크립트 파일의 최종 버전은 Cortex 아카이브에 포함되어 있습니다.
FOREX 매수 / 매도 시그널의 함정 : "간단한"예제는 무엇이 잘못 되었습니까?
Cortex Neural Networks 소프트웨어 사용자 가이드에서 우리는 aftifficial Neural Network의 간단한 예를 사용하여 GENZ 주식의 가격을 예측했습니다. 이 접근법에 무엇이 잘못된지 알아 내려면 GFTZ 대신 MSFT. TXT를 사용하여 "간단한"예를 들어 봅시다 (MSFT. TXT가 조금 짧으면 학습 집합에서 800 레코드 사용) GENZ. TXT).
그것은 단지 작동하지 않을 것이다! 왜?
그 이유는 당신이 스스로에게 묻는다면 분명해질 것입니다 : "왜 미래의 가치에 대한 신경 네트워크 예측이 첫 번째로 행해지 는가?"
그 답은 패턴을 인식하기 위해 신경망 패턴 인식이라고하는 것을 배우는 것입니다. 이 패턴에 숨겨진 논리가 있으면 동일한 논리를 가진 새로운 패턴도 인식됩니다.
이것은 같은 논리를 가진 트릭입니다. 거기에는 하나도 없지만 세 가지 문제가 있습니다.
우선, 마이크로 소프트의 주가를 살펴보면 데이터의 "학습"부분과 "테스트"부분의 옆으로 가고 있다는 것을 알 수 있습니다. 따라서 논리가 바뀌었을 가능성이 있습니다.
둘째, 그리고 더 중요한 - 패턴은 무엇입니까? 우리가 10-100 범위의 신경 네트워크를 가르친 다음 1에서 3 범위의 무언가를 제시한다면, 그들은 서로 다른 패턴입니다! 10, 20, 30 및 1, 2, 3은 인간과 비슷하게 보입니다. 왜냐하면 - 왜냐하면 - 우리는 숫자가 0으로 끝나는 숫자가 제시 될 때 10으로 나눌 수있는 능력이 있기 때문입니다. 이는 데이터의 사전 처리라고 불리는 것이며, 기본적으로 NN은 데이터를 처리 할 수 ​​없습니다.
우리가 그것을 가르쳐 줄 수 있니? 당연하지. 정확히 우리가 가르쳐야 할 것은 무엇입니까?
이것은 세 번째이며 가장 중요한 것입니다. 우리는 가격 예측이 필요하지 않습니다! 우리는 상관 없어! 우리가 필요로하는 것은 FOREX 매도 신호입니다.
자, 잠깐만! 우리는 a) 우리의 의견 (학습과 테스트 모두)을 동일한 범위에서 유지해야하며 b) 그것에 기반하여 거래 의사 결정을 할 수 있어야합니까? 우리가 지표라고 부르는 것이 아닌가? 빙고?
그래서 우리가 할 일이 있습니다. 지표를 작성하여 NN에 입력하고, 지표 가치에 대한 예측을 시도합니다. 가치없는 주가는 아닙니다!
첫 번째 예에서는 디스크에서 주가를로드하고 Neural Network 파일을 열고 학습을 시작합니다. 모두 자동화 된 모드로 진행됩니다.
새 스크립트 파일을 만들거나 Cortex Neural Networks 소프트웨어 아카이브와 함께 제공된 파일을 열고 stocks_nn. tsc라고합니다.
먼저 MSFT. TXT 파일에서 가격 값을 다운로드해야합니다. 우리는 CLV 표시기 (아래 참조)를 사용하려고 합니다만, 계산하기 위해 닫는 것뿐만 아니라 High 및 Low에 대한 분할 조정 값이 필요합니다. 여기에 그것들을 얻는 방법이 있습니다.
stocks_nn. tsc, 파트 1.
첫 번째 행은 경로를 strStockPath 변수에 지정합니다. 물론 데이터 파일이 다른 디렉토리에 있으면 편집해야합니다.
두 번째 줄에서 우리는이 경로가 상대 경로가 아니라는 것을 지정합니다 (Cortex. exe 파일의 위치에 대한 "상대적").
TABLE_LOADER는 "시작 줄"의 빈 문자열 인 경로를받습니다. 1 - 파일의 바닥 글 행의 일부인 첫 번째 줄 (열 이름)을 건너 뛸 수 있습니다 (MSFT. TXT의 마지막 줄에는 데이터가 없습니다). 또한 열 번호 0 (및 arrDate), 2 (arrHigh), 3 (arrLow), 4 (arrC) 및 6 (arrClose)을로드하도록 지시받습니다.
TABLE_LOADER에 대한 자세한 내용은 SLANG 참조 안내서를 참조하십시오.
그런 다음 조정 된 닫기를 닫기로 나누어 나누기를 계산하고이 값을 사용하여 낮음 및 높음을 조정합니다.
MSFT. TXT 파일에는 가장 최근의 데이터가 먼저 포함되어 있습니다.
다음으로 지표를 만들어야합니다. 예를 들어, "실제 생활"에서 NN 입력으로 하나 이상의 표시기를 사용하지만 Close Location Value 표시기가 될 것입니다.
닫기 위치 값 표시기는 다음과 같이 계산됩니다.
CLV = ((Close - Low) - (High - Close)) / (High - Low), 간격은 Close, Low 및 High가 단일 막대 일 필요는 없습니다. NN의 범위 (다시 0-1)로 쉽게 정규화 할 수 있도록 0 - 1 범위에서 사용합니다.
stocks_nn. tsc, 파트 3.
다음으로 지연 파일을 만들어야합니다. lags를 1, 2와 같게 사용하십시오. 9 (파일 기능에 대한 자세한 내용은 SLANG 참조 안내서 참조). Cortex의 NN 대화 상자는 자동으로 간단한 래그를 생성 할 수 있습니다 ( "래그 생성"버튼을 사용할 수 있음). 그러나이 글의 뒷부분에서 복잡한 래그 (즉, 1, 2, 3가 아니라 1, 3, 64가 무엇이든간에)를 사용하기 때문에이 작업을 처리 할 수있는 코드를 만들어야합니다. 더 유연한 방법.
stocks_nn. tsc, 파트 4.
지체 파일을 가지고 첫 번째 신경망을 만들 준비가되었습니다. 이 함수는 많은 매개 변수를 필요로하므로주의하십시오. 그러나 코드는 매우 간단합니다.
그런데 코드의 의미있는 이름 대신 번호를 처리 할 수 ​​있다고 생각하면이 코드의 대부분을 제거 할 수 있습니다. 이는 매우 나쁜 코딩 방법입니다.
stocks_nn. tsc, 파트 5.
이제 우리는 신경망과 지연된 파일을 가지고 네트워크를 가르쳐야합니다. 지연 파일 (msft_ind. lgg)에는 1074 개의 레코드가 있으므로 800 세트를 학습 세트로 사용하고 나머지 274 세트는 테스트 세트로 사용하는 것이 타당합니다.
물론 네트워크 파일을 열고 "Learning"탭에서 "Run"버튼을 클릭 할 수 있습니다. 그러나 이것은 고급 Cortex Neural Networks 소프트웨어 프로그래밍에 대한 소개이므로 SLANG built_in 스크립팅 언어를 대신 사용해 봅시다.
다음 코드는 ann NN 설정을 사용하여 모달 대화 상자를 표시합니다. "실행"버튼을 클릭 할 권한이 필요하면를 변경해야합니다.
stocks_nn. tsc, 파트 6.
bStartLearning은 0이 될 수 있습니다. 이 경우 대화 상자는 입력을 기다리거나 1이면 학습이 자동으로 시작됩니다.
확인 버튼을 클릭하여 대화 상자를 닫으면 bResumeScript가 1과 같으면 스크립트가 다시 시작됩니다.
bReset은 학습이 시작되기 전에 네트워크를 재설정하는 데 사용됩니다.
스크립트를 실행하고 에포크 카운터가 1000을 초과 할 때까지 기다린 다음 "중지"를 클릭하십시오. "적용"탭으로 이동하고 "적용"을 클릭하십시오. 이렇게하면 NN을 통해 전체 데이터 세트 (학습 및 테스트)가 실행되고 원래의 입출력 및 NN 생성 예측을 모두 포함하는. APL 파일을 만들 수 있습니다. 이렇게하면 쉽게 계획하고 서로 비교할 수 있습니다 .
"출력"탭으로 이동하여 msft_ind. apl 파일을 선택하고 "파일 찾아보기", "필드 선택"을 차례로 선택한 다음 왼쪽 목록 상자에서 "아니오"를 선택하고 (마우스로 선택하는 동안 CTRL 키를 누르고 있습니다 ) Clv 및 NN : Clv를 오른쪽 목록 상자에 입력하십시오. 우리의 예측이 얼마나 좋은지 보려면 "차트"를 클릭하십시오. 잘. 우리가 그것을 보면서 말할 수있는 것에서부터 다소간 훌륭합니다. 아직도 특별한 것은 없습니다.
이것은 SLANG 스크립팅으로 수행 할 수있는 작업의 일례이며 Cortex의 일상적인 작업을 자동화하는 방법에 불과합니다. 그러나 지금까지 우리는 "손으로"할 수없는 일은하지 않았습니다. 잘. 왜냐하면 Clv-100, Clv-50, Clv-25와 같은 커스텀 지연 파일을 만들고 싶기 때문입니다. Cortex에서 스크립팅하지 않아도되므로 SLANG (또는 Excel.)를 사용해야합니다.
FOREX 무역 전략 : 무엇을 최적화할까요?
다음 문제가 있습니다. 우리는 좋은 예측이 필요합니까, 아니면 이익을 내기 위해 사용할 수있는 것이 필요합니까? 이상하게 들릴지 모르지만 잠시 생각해보십시오. 아주 좋은 1 시간 예측이 있다고 가정 해 봅시다. 95 % 정확함. 가격은 한 시간 만에 얼마나 남았습니까? 그리 멀지 않은 나는 두렵다. 오히려 부정확 한 10 시간 예측이있는 상황과 비교하십시오. 더 나아질까요?
이 질문에 답하기 위해 우리는 실제로 거래해야하며 두 NN에 의해 ​​생성 된 평균 오류의 간단한 비교는 도움이되지 않습니다.
같은 문제의 두 번째 부분은 "좋은 예측"을 정의하는 방식입니다. 75 % 정확한 예측을하는 네트워크가 있다고 가정 해 봅시다. 100 % 정확한 예측을 산출하는 NN과 비교하십시오. 마지막 하나가 더 좋습니다. 이제 100 % 정확한 NN의 출력 (예측)을 10으로 나누십시오. 우리가 "원하는 출력"으로 사용한 신호 근처에 신호가 없기 때문에 매우 정확한 네트워크를 갖게됩니다. 그러나 100 % 정확한 NN을 사용한 것과 같은 방법으로 사용할 수 있습니다. 우리가해야 할 일은 10을 곱하는 것입니다!
상관 관계가 아니라 평균 2 차 오차를 조정하여 NN이 생성 된 것을 확인하십시오. 따라서 실제 주식 / 외환 거래에 사용될 때 더 나은 NN이 좋지 않은 결과를 보여줄 수 있습니다.
이 문제를 해결하려면 거래를 사용하여 NN을 테스트하고, 이 NN이 다른 것보다 낫다면이 거래의 결과 (이익 및 손실)를 결정해야합니다.
해보자. NN을 미세하게 조정하는 데 사용할 수있는 프로그램을 만들어 보겠습니다. 이번에는 미세 조정을 통해 거래 결과를 얻게 될 것입니다.
신경 네트워크 거래 : 몇 가지 짧은 메모.
첫째, 위의 예에서 중지 기준을 지정하지 않았으므로 "자동"학습이 중단되지 않습니다. 대화 상자 또는 CREATE_NN 함수에서 min을 제공 할 수 있습니다. 오류 (NN에 도달하면 중지되고 bResumeScript가 1로 설정된 경우 대화 상자가 닫히고 스크립트가 다시 시작됩니다). 또한 최대 근원 수 또는 둘 다를 제공 할 수 있습니다. NN이 준비가되었다고 생각할 때 배우기를보고 멈추기를 계획하고 있으므로 적어도 아래의 예에서는 사용하지 않을 것입니다. 완전 자동 모드에서 수행하려면이 매개 변수에주의하십시오.
둘째. 네트워크를 더 작고, 빠르고 정확하게 만드는 방법 중 하나는 작은 네트워크부터 시작하여 크기에 따라 뉴런에 의해 신경을 확대하는 것입니다. 분명히, 입력 뉴런의 수는 입력 데이터 열의 수에 따라 결정되지만 (출력도 다를 수 있음), 출력 뉴런의 수는 출력 데이터 열의 수와 같아야합니다 (보통 하나이지만 반드시 그런 것은 아닙니다). ). 이것은 우리가 숨겨진 레이어 (들)에서 뉴런의 수를 최적화해야한다는 것을 의미합니다.
또한 앞서 언급했듯이 어떤 데이터를 사용할 지 알지 못합니다. Clv-15 (15 일 지연)가 우리 예측의 정확성을 높일 것입니까? Clv-256이 필요합니까? 같은 NN에서 둘 다 사용하는 것이 더 좋을까요, 아니면 Clv-256을 추가하여 우리의 성능을 망칠까요?
중첩 된 사이클을 사용하여 다른 입력 매개 변수를 시도하면 다음을 수행 할 수 있습니다.
우리가 재고 데이터를 위해했던 것과 같은 방법으로 NN을 만듭니다. (NN을 위해 주식과 FOREX간에 차이점이 없습니다. FOREX에 대한 양질의 데이터 파일을 몇 개 가지고 있습니다.,이 텍스트를 쓰는 동안). 시차의 다른 조합을 시도하십시오. 숨겨진 레이어에서 다른 수의 뉴런을 시도하십시오. . 그리고 서로 다른 지표의 조합. . 등등.
그러나 가능한 모든 매개 변수의 가능한 모든 조합을 시도하면 컴퓨터가 아무리 빠르더라도 결과를 얻지 못합니다. 아래에서는 계산을 최소한으로 줄이기 위해 몇 가지 트릭을 사용합니다.
그런데 한 숨겨진 뉴런에서 시작하여 2, 3 등으로 늘리면 어떤 시점에서 오류 (예측 품질) 또는 이익 (NN을 테스트하면 그것을 사용하는 거래)가 내려 가기 시작하면 승자가 생깁니다. 불행히도, 첫 번째 "성능 피크"이후에 두 번째 것은 없을 수 있음을 증명할 수는 없습니다. 즉, 오류가 100, 30, 20, 40, 50 (최소값 일 때가 맞습니까?), 30, 20, 10, 15, (두 번째 최소값). 모든 합리적인 숫자를 테스트하면됩니다.
제삼. 최적화는 양날의 검입니다. 코드를 최적화하지 않으면 코드를 미세 조정하는 데 사용 된 데이터 외부에서 작동하지 않을 수 있습니다. 나는이 함정을 피하기 위해 최선을 다할 것입니다. 코드 나 NN을 추가로 최적화하려면이 접근법의 숨겨진 문제에 대해 자세히 알아 보려면 인터넷에서 조사하는 것이 좋습니다. 또한 이익 곡선의 매끄러움에 약간주의를 기울일 것입니다. 0, -500, 1000, -100, 10000처럼 보이는 수익은 크지 만 이익 0, 100, 200, 300, 400은 위험이 적기 때문에 더 좋습니다. 우리는 나중에 그것에 대해 이야기 할 수 있습니다.
마지막으로이 예제에서는 주식 가격보다는 FOREX를 사용하려고합니다. NN의 관점에서 볼 때 차이점은 없으며, 내 관점에서 볼 때 Forex는 훨씬 더 재미있게 거래 할 수 있습니다. 주식을 선호하는 경우 코드를 쉽게 수정할 수 있습니다.
FOREX 무역 전략.
먼저, 우리 코드의 프로토 타입을 만들어 보겠습니다. 이 코드는 앞으로 쉽게 최적화 될 수 있습니다. 신경망을 사용하여 거래하고 차트를 산출하는 거래 시스템이 될 것입니다 (거래 번호에 대한 수익). 그것은 또한 우리의 거래 시스템의 견고성을 측정하기 위해 드로우 다운을 계산할 것입니다.
forex_nn_01.tsc, 파트 1.
주요 차이점은 프로그램의 주요 블록에 모든 코드를 배치하는 대신 함수를 사용한다는 것입니다. 이렇게하면 관리가 훨씬 쉬워집니다.
둘째, TestNet 기능이 있습니다. 나는 아주 간단한 거래 알고리즘을 사용하고 있습니다. CLV 표시기는 0-1 간격으로 제한됩니다 (우리 CLV 버전은), 표시기가 dBuyLevel (위의 코드 참조)을 교차 할 때 dSellLevel을 건너 뛸 때 팔리고 있습니다.
분명히, 그것은 최고의 거래 전략이 아니지만 우리의 목적을 위해 (지금 당분간) 할 것입니다. 그것을 향상시키고 자한다면, 여기에 몇 가지 지침이 있습니다. 첫째, 시장에 항상 존재하지는 않는 시스템을 원할 수 있습니다. 둘째, 하나 이상의 지표를 입력으로 사용하고, 하나 이상의 NN을 사용하여 거래 의사 결정이 예측 된 지표를 기반으로 이루어 지도록 할 수 있습니다. 나중에 거래 알고리즘에 몇 가지 개선 사항을 추가 할 것입니다.
우리는 FOREX 거래에 대한 몇 가지 표준 가정을 사용합니다 : 스프레드는 5 포인트이고, 레버 레이드는 100입니다. 제비는 $ 100 (소형 FOREX)이다.
"거래"시스템을 살펴 보겠습니다. 다시 한번, 그것은 지나치게 단순화 된 것입니다. 중요한 참고 사항 : TestNn ()은 마지막으로 호출되며 해당 점에 대해 생성 된 모든 변수에 액세스 할 수 있습니다. 그래서 내가 사용하고있는 변수를 초기화하지 않고 보면, 아마도 NewNn (), TeachNn () 또는 TestNn () 이전에 호출 된 다른 함수에서 초기화되었다는 것을 의미합니다.
일을 쉽게하기 위해 주석이 코드에 삽입됩니다.
forex_nn_01.tsc, 파트 2.
삭감에 대해 몇 마디. 그것을 계산하는 방법은 거의 없으며 가장 정직하다고 생각하는 것을 사용하고 있습니다. 삭감은 우리 시스템의 불안정성을 측정합니다. 돈을 잃어 버릴 기회는 무엇입니까? 초기 금액이 $ 1000이라고합시다. 수익이 100, 200, 300, 400으로 떨어지는 경우 수익은 0입니다. 100, 200, 100.으로 떨어지면 0.1 % (10 %)로, 금액을 잃어 버렸기 때문에 초기 보증금 (1200에서 1100까지).
대형 결손이있는 거래 시스템을 사용하는 것에 대해서는 강력하게 조언합니다.
또한, 여기서 나는 가변 롯트 크기와 함께 사용되는 드랍 다운을 사용합니다. 그러나 eBook과 함께 제공되는 실제 샘플에는 다른 버전이 표시됩니다.
여기서 알 수 있듯이, 여기서 우리는 항상 drawdown을 계산하기 위해 1000 (초기 금액)을 사용합니다. 그 이유는 간단합니다 : 우리는 항상 동일한 로트 크기 (돈 관리가 없습니다)를 사용하므로 차이가 없습니다. 이미 계정에 누적 된 돈이 얼마나되는지, 평균 이익은 일정해야합니다. 이 경우에 더 나쁜 시나리오는 다음과 같습니다. 처음부터 (계정에 $ 1000) 우리는 돈을 잃어 가고 있습니다. 우리가 1000 달러를 사용하여 드로우 다운을 계산한다면, 우리는 더 낮은 드로우 다운을 얻게 될 것입니다. 이것은 우리를 속이지 않게 도와줍니다. 예를 들어, 우리는 얼마 동안 거래했고, 우리는 우리의 계좌에 10,000 달러를 가지고 있습니다. 그런 다음 우리는 약간의 돈을 풀고 이제 8,000 달러를 얻습니다. 그 다음 우리는 회복했고, 12,000 달러를 얻었다. 좋은 거래 시스템? 아마도 그렇지 않습니다.
논리를 다시 반복합시다. 매우 중요합니다 (돈 관리를 시작할 때 더욱 중요해질 것입니다). 우리는 고정 된 크기의 제비를 사용하여 거래합니다. 따라서 통계적으로, 최대 손실은 초기에 발생하지 않을 것이라는 보장은 없습니다. 우리는 1000 달러 만 가지고 있습니다. 그리고 만약 그런 일이 일어나면 우리는 -1000 $ (10,000 - 8,000)을 가지게 될 것입니다. 그래서 거래 시스템이 너무 위험합니다.
우리가 화폐 관리에 대해 이야기 할 때 (아마도 본문이 아닌), 우리는 인출 계산에 대해 다른 접근법을 사용해야 할 것입니다.
이 거래 시스템에서 나는 더 나쁜 시나리오를 사용하고 있음을 주목하십시오 : 높음을 사용하여 구매하고 낮음을 사용하여 판매합니다. 많은 테스터는 이러한 규칙을 따르지 않고 역사적인 데이터에서 잘 작동하는 거래 시스템을 만듭니다. 그러나 실제 생활에서 이러한 거래 시스템은 매우 열악한 성능을 보입니다. 왜?
가격 막대를보십시오. 그것은 Open, High, Low 및 Close를 가지고 있습니다. 당신은 가격이 술집 안에서 어떻게 움직이고 있는지 아십니까? 아니요. 거래 시스템이 가격 표시 막대의 맨 아래에 "구매"신호를 생성했다고 가정 해 봅시다 (dLow 인 경우).
dLotSize를 0.1 로트 ($ 100)로 사용하고 있습니다. 분명히, "진짜"거래에서, 로트 크기가 당신이 가지고있는 돈에 따라 계산된다면, 당신은 크게 이득을 볼 것입니다 :
forex_nn_01.tsc, 파트 3.
그러나 우리는 거래가 아니라 여기에서 테스트를하고 있습니다. 테스트를 위해 이익 곡선이 얼마나 매끄러운지를 확인해야합니다. 이것은 로트 크기가 동일하다면 훨씬 더 쉽습니다 (이상적인 상황에서는 dLotSize = 100 일 때 양의 기울기를 가진 직선을 얻습니다. 반면 조정 가능한 로트 크기의 경우 지수를 얻습니다. 분석하기가 훨씬 더 어려움).
이 텍스트의 뒷부분에서 우리는 거래 시스템에 자금 관리 규칙을 적용 할 예정이지만 아직 적용하지는 않습니다.
우리가 테스트 함수의 마지막 부분을 끝내고 나머지 코드를 살펴 보도록하자.
다음 함수는 CLV 표시기를 만듭니다. 간격을 매개 변수로 사용하므로 최적화 중에 다른 숫자를 전달할 때 여러 번 호출 할 수 있습니다.
참고로, 0-1 간격으로 작동하는 NN을 사용하고 있습니다. 물론 데이터는 정규화 될 수 있지만 표시기를 2로 나누고 0.5를 추가하여 0 - 1 범위에 있도록했습니다.
forex_nn_01.tsc, 파트 4.
지연 파일을 만들려면 CREATE_LAG_FILE 함수를 사용할 수 있습니다. 또는 필요한 모든 코드를 명시 적으로 제공하여이를 수행 할 수 있습니다. 이 경우, 우리는 더 많은 제어권을 가지며, 지연된 열의 수를 다양하게하는 등등을 시작한다면, 우리는 그것을 필요로 할 것입니다.
forex_nn_01.tsc, 파트 5.
nRemoveFirst 매개 변수가 중요합니다. 지표, 이동 평균, 지연 생성자와 같은 많은 기능은 데이터 세트의 처음 몇 레코드에서 제대로 작동하지 않습니다. 우리가 MA (14)를 가지고 있다고 가정 해 봅시다 - 레코드 1 - 13에 무엇이 들어 있을까요? 그래서 우리는 처음 몇 가지 (신뢰할 수없는) 레코드를 제거하기로 선택합니다.
NewNn과이 프로그램의 모든 기능에 대해 최적화 프로세스 중에 변경 될 수있는 것만 매개 변수로 전달해야합니다. 예를 들어, "건너 뛰기"매개 변수는 항상 동일하므로 전달할 필요가 없습니다.
forex_nn_01.tsc, 파트 6.
TeachNn 함수는 단순히 NN 대화 상자를 불러옵니다.
forex_nn_01.tsc, 파트 7.
마지막으로 차트 기능이 필요합니다. 의무적 인 것은 아니지만 수익 차트가 어떻게 보이는지 항상 확인하는 것이 좋습니다. 다음 코드는 XML을 사용하여 차트를 생성하므로 튜토리얼을 읽는 것이 좋습니다. 또는 차트를 파일로 저장하는 대신 그릴 수 있습니다. 이를 수행하려면 samples / scripts 디렉토리에있는 샘플 중 하나를 사용하십시오. 마지막으로 코드를 수정하여 XML이 아닌 HTML을 생성 할 수 있습니다. HTML은 배우기가 더 쉽지만 코드 자체는 읽기 쉽지 않습니다.
forex_nn_01.tsc, 파트 8.
스크립트를 컴파일하고 실행하십시오.
잘. 예상대로 CLV 간격으로 7 시간을 사용하면 매우 좋지 않은 결과가 나타납니다.
FOREX 무역 전략 및 최적화.
빈약 한 결과가 나온 이유는 아주 명확합니다. Interval, Stop Loss, Buy and Sell 레벨 및 기타 매개 변수를 사용했습니다. 순전히 무작위 적이었습니다. 몇 가지 조합을 시도하면 어떨까요?
FOREX 무역 신호 : 무엇을 최적화 할 것인가?
우선 매수와 매도를 과도하게 최적화함으로써 우리는 미래의 성과를 망칠 수 있습니다. 그러나 우리는 여전히 그것들을 조정할 수 있습니다. 특히, 매수와 매도 제한의 가까운 값에 가까운 성과가 있다면. 예를 들어, 우리가 구매 한도에서 -10 %의 이익을 0.3으로, + 1000 %의 이익을 0.35로했을 때, 운이 좋은 우연의 일치가 있으며, 우리의 거래 시스템에 0.35를 사용하면 안됩니다. 아마 다시는 일어나지 않을거야. 대신에 -10 % 및 + 10 % (+ 1000 % 대신)가 있으면 더 안전하게 사용할 수 있습니다.
일반적으로 우리의 거래 시스템은 "진짜"거래가 진행되는 동안 성능이 좋아질 것이고, 테스트 도중 생존 할 수 있지만 그 반대의 경우는없는 것처럼, 가능한 한 적은 시나리오를 위해 만들어 져야합니다.
충분한 거래가 있으면 지표 간격의 값을 다양하게 할 수 있으므로 시스템 성능에서 통계 측면에서 확신 할 수 있습니다.
우리는 분명히 뉴런의 수를 변화시킬 수 있습니다, 나는 그것이 쉽게 과도하게 최적화 될 수 있다고 생각하지 않습니다.
입력에 대한 입력 수와 지연 수는 다를 수 있습니다. 이것을 과도하게 최적화하는 것이 가능하지만 그렇게하기는 쉽지 않습니다.
물론, 우리는 다른 지표를 시도 할 수 있습니다.
정확한 FOREX 신호 : 최적화하는 방법?
이미 언급했듯이 가능한 모든 조합을 시도하기 시작하면 영원히 걸릴 것입니다. 그래서 우리는 속임수를 쓸 것입니다. 우리는 합리적인 것으로 생각되는 매개 변수 집합을 만들어 프로그램에 전달합니다.
가능한 한 적은 계산을하기 위해 Clv-1과 Clv-2가 아마도 중요하지만 Clv-128은 어떨까요? 그리고 우리가 이미 Clv-128을 가지고 있다면 Clv-129가 필요합니까? 아마 그렇지 않을거야. 그래서 우리는 Clv-1, Clv-2, Clv-4, Clv-8과 같은 것을 갖게 될 것입니다. Clv-128은 변형이 거의 없으므로 계산 시간이 수천 배 단축됩니다.
FOREX 전문 시스템 트레이딩 : 그것은 전혀 작동 할 수 있습니까?
정확히 우리가 예측하고 싶은 것은 무엇입니까? 이 시점까지는 EURUSD에 1 시간 차트를 사용했으며 다음 막대의 CLV를 예측했습니다. CLV + 2가 더 좋을까요? CLV + 3는 어떻게됩니까?
또한, 특히 "이상적인"세계에서 목표 (수익성있는 거래)를 달성 할 수 있다는 것을 알면 좋을 것입니다.
이 질문에 답하기 위해 간단한 테스트 프로그램을 만들어 보겠습니다. 우리의 예측은 100 % 정확하며, 이 가정을 토대로 NN 예측치가 아닌 CLV + N을 사용한다고 가정합니다. 그렇습니다. 미래의 데이터를 가져 와서 NN 예측 대신에 사용할 것입니다. 물론이 접근법은 실생활에서 작동하지 않을 것입니다. 그러나 leats에서는 기대하는 것에 대한 아이디어를 줄 것입니다.
결과를 볼 때, 우리가 선진 자금 관리를 사용하고 있지 않다는 것을 명심하십시오. 우리의 로트 크기는 최소 $ 100로 설정되어 있습니다. 다양한 로트 크기를 사용하면 결과가 크게 달라집니다. 그러나 0.1로 설정된 많은 크기에서도 우리는 미래의 정보를 얻는 것이 궁극적 인 상인의 "홀리 그랄"이라는 것을 알 수 있습니다 (아래).
forex_nn_02.tsc, 파트 1.
이미이 코드에 익숙하며 FOREX_NN_01.TSC에서 사용되었습니다. 데이터 로딩을 처리합니다. 유일한 차이점은 "images"디렉토리에있는 파일 목록을 얻고. PNG 확장자를 가진 모든 파일을 삭제하는 부분입니다. 이 코드의 이유는 간단합니다. 테스트 중에 많은 수천 개의 이미지 파일을 만들 것입니다. 우리는 우리가 끝나고 나서 그들을 매달아 놓기를 원하지 않는다. 그래서 스크립트 시작 부분에 다른 스크립트로 만든 이미지를 삭제합니다.
forex_nn_02.tsc, 파트 2.
단지 몇 가지 의견. 가능한 모든 값 (예 : CLV 간격)을 시도하지 않으려합니다. 대신 테스트 할 값만 포함 된 배열을 만들 수 있습니다. 그런 다음 (아래 참조) 우리는이 배열을 살펴볼 것입니다.
정지 손실은 모든 거래 전략의 중요한 부분이므로, 나는 또한 그것을 변경하기로 결정했습니다. 그러나 시스템을 과도하게 최적화하기 쉽기 때문에 위험한 아이디어입니다.
구매 및 판매 레벨에 대해 다른 값을 테스트 할 계획이지만 배열을 사용하지 않고 주기적으로 수행됩니다.
앞의 예와 달리 많은 이미지가 포함 된 큰 XML 파일이 필요합니다. 이를 위해 XML 헤더와 바닥 글을 Chart 함수 외부에 구성하는 코드를 옮겼습니다. 자세한 내용은 온라인 XML 튜토리얼을 참조하십시오.
첫 번째 지연으로 0을 사용한다는 점에 유의하십시오. 이는 처음에 미래로부터 "이동 된"표시기 (CLV)를 테스트한다는 것을 의미합니다. 아이디어를 얻으려면 NN이 없으면 "트레이딩 시스템"이 얼마나 좋은지 (끔찍한 말이 맞습니다. 모든 돈을 잃어 버리는 것입니다).
Cortex는 Internet Explorer 컨트롤을 사용하여 XML 페이지를 표시합니다. 페이지가 커지면 많은 메모리가 필요합니다. 컴퓨터에서 처리 할 수없는 경우 대신 여러 개의 XML 또는 HTML 페이지를 만드는 것이 좋습니다. forex_nn_02의 경우 페이지가 상대적으로 짧기 때문에 문제가되지 않습니다. 또는 (이 텍스트의 뒷부분에서 스크립트에서 수행중인 작업) XML 파일을 만들지 만 Cortex에서 열지 마십시오. 대신 Internet Explorer를 사용하여 엽니 다. IE 컨트롤과 달리 Internet Explorer에는 메모리 문제가 없습니다.
이제 매개 변수의 다른 조합을 시도하는 코드.
forex_nn_02.tsc, 파트 3.
여기서 우리는 중첩 된 사이클을 사용하고 있습니다. 매주기마다, 우리는 어떤 변수 (예를 들어, 외부 순환에 대한 nInterval)를 유지합니다. 이 방법으로 사이클은 해당 배열의 모든 요소 값을 한 번에 하나씩 지정합니다. 그런 다음 내부주기가 사용되는 등 모든 배열 요소의 모든 조합이 테스트됩니다.
가장 안쪽 사이클에서는 Test () 함수를 호출하여 "테스트 거래"를하고 Chart ()는 디스크에 저장된 이미지 목록에 새 그림을 추가합니다. 모든주기가 완료 될 때까지이 차트 ()에 이미지가 표시되지 않습니다.
Test () 및 CreateClv () 함수는 이전 예제와 거의 같습니다. 유일한 차이점은 그것이 한 번 이상 호출된다는 사실 때문입니다. 이를 위해 ARRAY_REMOVE를 정리 배열에 호출합니다.
또한, 긍정적 인 거래 시스템을 생산하는 매개 변수의 조합에 대해서만 차트를 작성한다는 점에 유의하십시오. 그렇지 않으면, 우리는 Chart () 함수를 건너 뛰기 위해 "continue"를 호출한다.
마지막으로, 우리는 이제 이익을 얻습니다, 그래서 우리의 거래 시스템은 좀 더 유연해질 수 있습니다.
forex_nn_02.tsc, 파트 4.
Chart () 함수는 두 부분으로 나뉩니다. 머리글과 바닥 글은 XML 파일에 한 번만 작성되어야하므로 프로그램의 주요 부분으로 이동되었습니다.
또한 다른 이름으로 파일을 저장하려면 카운터를 사용하고 있습니다. 매개 변수에 대한 정보는 이미지의 머리글에 기록되므로 쉽게 식별 할 수 있습니다. 마지막으로 이미지는 우승 한 구성에 대해서만 저장되므로 결국 잔액이 더 많아야하고 처음에는 잔액이 있어야합니다.
forex_nn_02.tsc, 파트 5.
프로그램을 실행하십시오 (완료하는 데 약간의 시간이 걸립니다). 이미지가있는 큰 XML 페이지로 끝날 것입니다. 이미지 하나 하나가 성공한 구성입니다.
그러나 결과 중 일부는 훌륭하지만 "미래로부터"데이터를 사용할 때이 시스템은 실생활에서 작동하지 않습니다. 실제로 Test () 함수를 살펴보면 arrClose의 마지막 요소에 도달하기 전에 사이클이 멈춘다는 것을 알 수 있습니다.
for (nBar = nRemoveFirst + 1; nBar.
이것은 C ++입니다.
보시다시피 코드는 정말 간단합니다. 이제 SLANG 스크립트를 사용하여 동일한 작업을 수행 할 수 있습니다. 이전 예에서와 같이 코드의 전체 구조를 유지하므로이 예제는 익숙해 보입니다. 유일한 차이점은 내장 된 APPLY_NN 함수를 사용하는 대신 자체 함수를 호출한다는 것입니다. 우리가 사용하지 않는 코드 (예 :주기)는 주석 처리되지만 제거되지는 않습니다.
신경망 및 Stock / Forex Trading 기사에서 이미 논의 된 논리에 대해 설명합니다. 간단히 말해서이 스크립트의 출력은 MetaTrader의 스크립팅 엔진 인 MQL과 호환되도록 형식이 지정됩니다. MetaTrader는 우리가 사용하는 거래 플랫폼입니다. 예를 들어, TradeStation과 같이 다른 것을 원하면 구문을 준수하도록 코드를 변경해야합니다.
다음 장에서 우리는이 코드를 MetaTrader의 표시기에 삽입하고 그것을 사용하여 거래 할 것입니다.
거래 플랫폼에 스크립트 포팅.
다음 단계는 실제로 필요하지는 않지만 유용 할 수있는 무언가입니다. 우리는 tsc 파일의 버전 (위의 하나)을 만들 예정이지만, 이번에는 SLANG (Cortex 스크립팅 언어)를 사용하여 APPLY_NN 기능을 에뮬레이션합니다. 그 이유는 다음 장에서이를 MetaTrader 거래 플랫폼의 스크립트 언어로 이식 할 것이므로 모든 것이 제대로 작동하는지 확인하는 것이 좋습니다.
이 함수를 실행 한 후에 생성 된 결과는 forex_nn_05a와 동일하므로 코드가 올바르게 작동 함을 의미합니다. :
Note, that there is a difference at the beginning of the charts, as "our" NN does not try to process the data at the beginning (where lag is incomplete), while the built-in NN does not "know" about this problem. Of course, it doesn't affect the result, as the beginning of the chart is ignored by using the nRemoveFirst parameter in our script (set to 200, which is guaranteed to be larger, then our lag).
Using third-party trading platform.
We have the NN that (more or less) can be used. We have the script, implementing this NN without calls to the Cortex-specific NN functions. Now we are going to port it to the trading platform that can be used for the real trading, which means it can contact brocker, place orders and earn (or loose) money.
As a trading platform, I am going to use MetaTrader.
Disclaimer: I am not related to MetaQuotes in any way. I do not work for them, I am not their affiliate and so on. I use MetaTrader, ONLY because I like it.
I find this program user-friendly, flexible and powerful, and "not a monster". Also, it is free (compare to other packages of this class).
The only (minor) problem is that it is not always easy to find the dealer using MT in your area. Then, when you do a research, you may find couple of brockers, with screenshots on their web sites, that look suspiciously familiar. Yes, they use MetaTrader, but they don't call it MetaTrader!
I have asked for clarification at the company's forum, and they have told me, that they don't reveal brockers using their services. Very strange.
One of the brockers that is not hiding the fact they use MT, is Alpari. They will allow you to open a Demo account, so that you can trade in a real time, but without risking your money.
I am not going to recommeng services of Alpari. Once again, I am not being paid for that. Try their Demo account, and use your own judgement. Or you can start your own research at Internet forums.
Finally, if you do not like the MT, you can probably follow the example below using TS, MS or some other trading platform. This is just an example.
Our MT-based trading system will include two files, the indicator and an expert. This is the way they call it in MQL (scripting language of MT), and I am going to follow this naming convention.
The indicator implements the neural network and draws a chart. An expert takes these data and does trading. As MetaTrader has a "strategy tester", we will be able to test our strategy, to see how good it is.
I will assume, that you are familiar with MQL programming, it is quite close to SLANG and tutorials can be found both at MetaQuotes and Alpari.
Finally, I am using the code structure, that is borrowed from MetaQuotes forum, permission to use it the author of the corresponding posts had granted me permission to use fragments of his code.
Also, as some of our MetaTrader code is the same for all experts and indicators, we moved it to a separate library file. MetaTrader's libraries are nothing but includable files. This library takes care of synhronization, when two or more expert are trying to run in the same time, as well as of few other things. If you use MetaTrader, it will help you to create robust experts, in any case, the MQL language is easy to understand.
mylib. mql, a helper library.
The code should look familiar, all I did was re-writing it, using slightly different language syntax of MQL.
This indicator has two buffers, and draws two lines, one for the original NOC, and one for the NN-predicted NOC. For trading, you don't have to draw both indicator lines, of course (see MQL tutorials to learn how to do it), but I have decided to show them together, so you can compare.
Another difference, that you should know about, is the way MT performs testing. It may, in some cases, be more accurate, then one we did (we did the worse case scenario). Of course, you can always to change the SLANG script from the examples above, to implement any logic you want.
The result of our testing in MT is a bit better, then in Cortex, due to all these reasons.
Keep in mind, that MT calculates the DD in a different way. I still think, that my way is better.
In should be especially noted, that no additional optimization had been performed using MetaTrader's optimizer. We have just plugged our MTS (mechanical trading system) in, and it worked as expected.
That is it. You can now create Cortex Neural Network, optimize it to do trading, and to port it to the trading platform of your choice.

Comments

Popular Posts