1. Enum 타입 (enumJnsSignal, enumOrderType)
enumJnsSignal: 이 Enum은 EA에서 사용하는 신호의 유형을 정의합니다. 두 가지 신호 옵션이 있습니다:
- eTypeCrossMA: 두 개의 이동 평균이 교차할 때 발생하는 신호입니다.
- eTypeTrend: 이동 평균과 스토캐스틱을 사용하여 트렌드를 추적합니다.
enumOrderType: 이 Enum은 주문의 유형을 정의합니다:
- eBuy: 매수 주문입니다.
- eSell: 매도 주문입니다.
- eNone: 실행된 주문이 없습니다.
2. 입력 매개변수
- inMagicNumber: 이 EA에서 주문을 구별하기 위해 사용되는 고유한 마법 번호입니다.
- inLotSize: 각 주문의 초기 로트 크기입니다.
- inMultiply: 로트 크기 전략에 사용되는 곱셈 계수입니다.
- inJarakLayer: 그리드/레이어 전략에서 거래 포지션 간의 피프 거리입니다.
- inMAPeriodFast & inMAPeriodSlow: 빠른 이동 평균과 느린 이동 평균의 기간입니다.
- inSTOKPeriod, inSTODPeriod, inSTOSlowing: 스토캐스틱 오실레이터의 매개변수입니다.
- inTakeProfit & inStopLoss: 손익 설정입니다.
3. Struct dataTrades
이 Struct는 열린 거래 포지션과 관련된 데이터를 저장하는 데 사용됩니다. 예를 들어 총 포지션 수(`ttlPos`), 포지션의 평균 가격(`hargaTA`, `hargaTB`), 총 볼륨(`ttlLot`) 등을 포함합니다.
4. OnInit() 함수
이 함수는 EA의 초기화를 처리합니다. 입력 매개변수를 검증하고(예: 빠른 MA 기간이 느린 MA 기간보다 작은지 확인) MA와 스토캐스틱 지표의 핸들을 생성합니다.
5. OnTick() 함수
가격이 움직일 때마다 실행되는 주요 함수입니다. GetSignal() 함수를 호출하여 새로운 신호를 확인하고, 신호가 발견되면 manageTrading()를 사용하여 거래를 실행합니다. 또한 setTPSL()을 호출하여 항상 손익을 업데이트합니다.
6. isNewCandle() 함수
이 함수는 새로운 캔들이 형성되었는지 감지합니다. 이는 EA가 신호를 확인하는 데 중요합니다.
7. GetSignal() 함수
이 함수는 선택된 전략에 따라 유효한 거래 신호가 존재하는지 판단합니다:
- eTypeCrossMA: 빠른 이동 평균과 느린 이동 평균의 교차에 따라 신호를 결정합니다.
- eTypeTrend: MA와 스토캐스틱의 확인을 사용하여 신호를 판단합니다.
8. manageTrading() 함수
이 함수는 거래 실행을 관리합니다. 유효한 신호가 감지되면, EA는 getLotSize() 함수를 사용하여 결정된 로트 크기로 포지션을 엽니다. 또한 가격 거리(`inJarakLayer`)에 따라 추가 포지션을 열기 위해 그리드/레이어 전략이 적용됩니다.
9. updateDataTrades() 함수
이 함수는 진행 중인 거래 포지션과 관련된 데이터를 업데이트합니다. 예를 들어 열린 포지션의 평균 가격과 총 볼륨을 계산합니다.
10. openTrade() 함수
이 함수는 생성된 신호와 계산된 로트 크기에 따라 새로운 거래 포지션을 엽니다. OrderSend()를 사용하여 주문을 실행합니다.
11. setTPSL() 함수
이 함수는 각 열린 포지션의 Take Profit과 Stop Loss를 설정하거나 업데이트합니다.
12. modifTPSL() 함수
이 함수는 기존 포지션의 Take Profit과 Stop Loss를 수정합니다. 이전에 설정된 값과 다르면 업데이트가 이루어집니다.
13. validateLot() 함수
이 함수는 사용되는 로트 크기가 허용된 최소 및 최대 범위 내에 있는지 확인합니다. 또한 최소 로트 스텝(`gLotStep`)과 일치하는지 확인합니다.
14. getLotSize() 함수
이 함수는 초기 로트 크기와 이미 열린 포지션 수를 기반으로 사용할 로트 크기를 계산합니다. 곱셈 계수(`inMultiply`)도 고려됩니다.
이 코드는 이동 평균과 스토캐스틱의 기술 신호를 사용하여 시장 트렌드를 포착하고 거래 포지션을 자동으로 관리하는 데 설계되었습니다.