라이브러리: Control_Trade_Sessions

Control_Trade_Sessions:

트레이딩 세션 제어용 라이브러리. 시작 시에는 주 7일(토요일과 일요일에는 암호화폐 거래가 있을 수 있음) 동안의 거래 세션 시간을 계산하여 하루에 최대 10개의 세션을 계산합니다. 그런 다음 OnTick()에서 확인을 할 수 있으며, 거래 세션 외부에서 틱이 들어온 경우 추가 처리를 종료할 수 있습니다.

Control_Trade_Sessions

Author: Aleksei Kuznetsov

이건 다 헛소리입니다. 브로커가 실제 호가 흐름과 다르게 상품 사양을 입력하면, 여러분의 라이브러리도 브로커처럼 노골적으로 거짓말을 하게 될 것입니다.

예시는 피나메에서 실행해 볼 수 있습니다.

Alexey Viktorov #:

이건 다 헛소리입니다. 브로커가 실제 호가 흐름과 다르게 상품 사양을 기재한다면, 여러분의 라이브러리도 브로커와 마찬가지로 노골적으로 거짓말을 하게 될 것입니다.

예제는 피나메에서 실행해 볼 수 있습니다.

누가 잘못했는지는 밝혀졌습니다. 그런데 어떻게 해야 할까요?

sinput을 통해 날짜별로 세션을 입력하는 옵션을 추가해 드릴 수 있습니다.
정말 훌륭한 라이브러리네요, 감사합니다! 가장 큰 장점은 속도입니다. 최적화 작업에 딱 맞네요.
Forester #:
누가 잘못했는지는 밝혀졌습니다. 그런데 어떻게 해야 할까요?

sinput을 통해 날짜별로 세션을 입력하는 기능을 추가할 수 있습니다.

해당 옵션을 추가했습니다. 설명과 코드를 참고하세요.

코드를 조금 더 최적화했습니다. 이전에는 거래 세션이 아닌 시간대마다 매 틱마다 시간 계산이 이루어지고 이를 세션 배열과 비교했었습니다.
이제 세션이 변경될 때 현재 세션의 종료 시간뿐만 아니라 다음 세션의 시작 시간도 함께 계산합니다. 그 결과, 역시 단 한 번의 확인만 이루어지게 되었습니다:
if(time < this.NextTradeStart ) { return false; }
Forester 거래 세션 외의 각 틱마다 시간 계산이 이루어지고 이를 세션 배열과 비교했었습니다.
이제 세션이 변경될 때, 현재 세션의 종료 시간뿐만 아니라 다음 세션의 시작 시간도 함께 계산합니다. 그 결과, 역시 단 한 번의 확인만 필요하게 되었습니다:

이는 어떤 구간 내 포함 여부를 계산하는 데 있어 가장 올바른 접근 방식입니다. 예를 들어, 거래가 12시부터 15시까지 이루어져야 한다면, 이와 유사한 NextTime 방식을 사용해야 합니다.

타사 코드 중에서는 오직 귀하께서만 이런 방식을 사용하고 계신 것을 확인했습니다.

자세히 읽어보지는 않았지만, 현재 구현 방식은 세션이 엄격히 하루 이내여야 한다고 가정하는 것 같습니다. 이는 시간대 차이가 큰 경우에는 맞지 않는데, 예를 들어 예를 들어, 유럽 세션이 아시아 브로커를 통해 거래되거나 그 반대의 경우처럼 말이죠. 즉, datetime에서 날짜를 제외하면 To 시간이 From 시간보다 작은 경우가 있습니다.
Stanislav Korotky #:
사용자 정의 심볼을 사용하면 세션과 관련된 어떤 까다로운 상황이라도 설정하여 라이브러리의 정확성을 확인할 수 있습니다. 다행히도 세션을 변경할 때 시세를 다시 불러올 필요가 없습니다.
Stanislav Korotky #:
자세히 읽어보지는 않았지만, 현재 구현 방식은 세션이 반드시 하루 이내에 있어야 한다고 가정하는 것 같습니다. 이는 시간대 차이가 상당한 경우에는 맞지 않습니다. 즉, 예를 들어, 유럽 세션이 아시아 브로커를 통해 거래되거나 그 반대의 경우입니다. 즉, datetime에서 날짜를 제외하면 To 시간이 From 시간보다 앞서는 경우가 있습니다.
단순히 시간만 비교하는 방식입니다.
if(!TradeSession.isSessionTrade(TimeCurrent())){Print("Market closed. OnTick return");return;}
대신
TimeCurrent()
원하는 대로 설정할 수 있습니다.

세션 시간은 브로커에서 가져오거나 수동으로 설정할 수 있습니다.