이 가이드에서는 Algo API를 통해 개발된 cBot을 사용하여 실행할 수 있는 주요 거래 작업에 대해 자세히 설명합니다.
다음은 cBot에서 지원하는 작업 중 일부입니다:
시장가 주문 전송.
예약 주문 실행.
예약 주문 및 오픈 포지션 수정.
포지션 청산 및 주문 취소.
거래 이벤트(포지션, 주문 및 관련 활동) 구독.
시장가 주문 전송
ExecuteMarketOrder() 메서드가 호출되면 시장가 주문이 거래 서버로 전송됩니다. 새 cBot을 생성한 후 시장가 주문의 여러 정의된 속성(심벌, 거래량, 이익실현, 손절매 등)을 포함하여 이 메서드를 추가할 수 있습니다. 아래 예제는 cBot이 시작될 때 시장가 주문을 실행합니다.
트레이드 워치 패널의 로그 탭에는 세 개의 예약 주문이 실행된 직후 성공적으로 수정된 것이 표시됩니다.
다양한 주문 유형이 성공적으로 실행된 후 계정에 포지션이 오픈됩니다. 모든 오픈 포지션은 cBot의 Positions 컬렉션에서 사용할 수 있습니다. 이전 예제에서 예약 주문을 수정한 것과 유사하게 오픈 포지션을 수정할 수 있습니다. 시장가 주문은 포지션을 오픈하는 가장 빠른 방법이므로 이 가이드의 첫 번째 cBot에 포지션 수정 작업이 포함된 OnBar() 메서드를 추가해 보겠습니다.
cTrader는 알고리즘 개발자가 거래 이벤트를 구독하고 거래 활동을 모니터링할 수 있도록 허용하며, 이러한 활동이 cBot에 의해 시작되었든 수동으로 시작되었든 상관없이 가능합니다. 이는 앞서 설명한 두 컬렉션인 Positions 및 PendingOrders에서 사용 가능한 이벤트를 수신함으로써 달성됩니다.
포지션에 대해 사용 가능한 세 가지 이벤트가 있습니다:
Open
Modified
Closed
이 이벤트는 각각 계정에서 포지션을 오픈, 수정 및 클로즈할 때 트리거됩니다.
아래 코드 스니펫에서는 OnStart() 메서드에서 세 가지 이벤트를 선언하고 호출할 메서드를 할당합니다. 이렇게 하면 사용할 코드 시그니처가 자동으로 생성됩니다. 이후 각 이벤트 메서드에 Print() 문이 추가됩니다.
1 2 3 4 5 6 7 8 9101112131415161718192021
protectedoverridevoidOnStart(){Positions.Opened+=Positions_Opened;Positions.Modified+=Positions_Modified;Positions.Closed+=Positions_Closed;}privatevoidPositions_Opened(PositionOpenedEventArgsobj){Print("Position with ID "+obj.Position.Id+" was opened");}privatevoidPositions_Modified(PositionModifiedEventArgsobj){Print("Position with ID "+obj.Position.Id+" was modified");}privatevoidPositions_Closed(PositionClosedEventArgsobj){Print("Position with ID "+obj.Position.Id+" was closed");}
1 2 3 4 5 6 7 8 910111213
defon_start(self):api.Positions.Opened+=self.positions_openedapi.Positions.Modified+=self.positions_modifiedapi.Positions.Closed+=self.positions_closeddefpositions_opened(self,obj):api.Print("Position with ID "+str(obj.Position.Id)+" was opened")defpositions_modified(self,obj):api.Print("Position with ID "+str(obj.Position.Id)+" was modified")defpositions_closed(self,obj):api.Print("Position with ID "+str(obj.Position.Id)+" was closed")
Open, Modified 및 Closed 이벤트를 수행하는 것이 사용자이든 cBot이든, 알고리즘은 아래 로그에 표시된 것처럼 매번 인쇄된 메시지와 함께 이벤트에 도달할 것입니다.
마찬가지로 예약 주문과 관련된 이벤트를 구독할 수 있습니다. 예약 주문에 대해 사용 가능한 네 가지 이벤트가 있습니다:
Created
Modified
Filled
Cancelled
네 가지 이벤트는 OnStart() 메서드에서 선언되며, 이벤트 핸들러는 다음과 같이 추가됩니다.
protectedoverridevoidOnStart(){PendingOrders.Created+=PendingOrders_Created;PendingOrders.Modified+=PendingOrders_Modified;PendingOrders.Filled+=PendingOrders_Filled;PendingOrders.Cancelled+=PendingOrders_Cancelled;}privatevoidPendingOrders_Created(PendingOrderCreatedEventArgsobj){Print("Pending order with ID "+obj.PendingOrder.Id+" was created");}privatevoidPendingOrders_Modified(PendingOrderModifiedEventArgsobj){Print("Pending order with ID "+obj.PendingOrder.Id+" was modified");}privatevoidPendingOrders_Filled(PendingOrderFilledEventArgsobj){Print("Pending order with ID "+obj.PendingOrder.Id+" was filled");}privatevoidPendingOrders_Cancelled(PendingOrderCancelledEventArgsobj){Print("Pending order with ID "+obj.PendingOrder.Id+" was cancelled");}
1 2 3 4 5 6 7 8 91011121314151617
defon_start(self):api.PendingOrders.Created+=self.pending_orders_createdapi.PendingOrders.Modified+=self.pending_orders_modifiedapi.PendingOrders.Filled+=self.pending_orders_filledapi.PendingOrders.Cancelled+=self.pending_orders_cancelleddefpending_orders_created(self,obj):api.Print("Pending order with ID "+str(obj.PendingOrder.Id)+" was created")defpending_orders_modified(self,obj):api.Print("Pending order with ID "+str(obj.PendingOrder.Id)+" was modified")defpending_orders_filled(self,obj):api.Print("Pending order with ID "+str(obj.PendingOrder.Id)+" was filled")defpending_orders_cancelled(self,obj):api.Print("Pending order with ID "+str(obj.PendingOrder.Id)+" was cancelled")
예약 주문과 관련된 이벤트를 구독하면 cBot은 수동 및 프로그래밍된 거래 활동 모두에 반응할 것입니다.
요약
결론적으로, cTrader는 알고리즘 개발자에게 cBot을 통해 실행할 수 있는 인상적인 거래 작업 무기를 제공합니다. 이를 능숙하게 적용하면 맞춤형이고 정교한 거래 전략을 추구할 수 있습니다.