콘텐츠로 이동

cBot에서 지표를 사용하는 방법

이 글과 해당 비디오에서는 cBot에서 맞춤형 지표를 참조하고 사용하는 방법을 시연합니다. 이를 위해 샘플 맞춤형 지표의 출력을 사용하여 거래 작업을 수행하는 트레이딩 알고리즘을 개발할 것입니다.

새로운 cBot 생성

현재 기기에 설치된 모든 맞춤형 지표를 보려면 Algo 앱으로 전환하여 지표 탭으로 이동하세요.

여기에 하나 이상의 맞춤형 지표가 표시된다면, 다른 알고리즘에서 자유롭게 사용할 수 있다는 의미입니다. 이 튜토리얼에서는 Sample SMA 지표를 사용하고 단순 이동 평균 방향에 따라 거래하는 cBot을 개발할 것입니다.

먼저, 새로운 cBot 생성을 하고 "SMA Robot"과 같이 정보를 제공하는 이름으로 변경합니다. 우리의 cBot은 SMA가 강세로 돌아설 때 매수 거래를 하고, 약세로 돌아설 때 매도 거래를 할 것입니다. 우리의 cBot은 포지션을 헤징하지 않으므로, 각각의 새로운 신호에서 반대 포지션은 종료됩니다.

지표 초기화하기

맞춤형 지표의 경우, 첫 번째 단계는 맞춤형 지표에 대한 참조를 추가하는 것입니다. 맞춤형 지표를 참조하려면 다음 단계를 실행해야 합니다:

  1. 참조 관리 버튼을 클릭합니다.
  2. 새로 열린 창에서 참조하고자 하는 지표를 찾습니다.
  3. 참조하고자 하는 지표 옆의 체크박스를 선택합니다.
  4. 적용을 클릭하세요.

지표가 참조된 후에는 해당 유형의 인스턴스 변수를 생성할 수 있습니다.

1
SampleSMA _sma;

참고

지표 유형은 지표 클래스 이름과 동일해야 합니다. 이는 지표의 파일 이름과 다를 수 있습니다.

다음 단계는 OnStart() 메서드에서 지표를 초기화하는 것입니다. 하지만 그 전에, 맞춤형 SMA 지표에서 사용되는 기간을 구성할 수 있는 매개변수를 cBot에 추가할 것입니다.

1
2
[Parameter(DefaultValue = 14)]
public int Periods { get; set; }

Indicators.GetIndicator<>() 메서드를 사용하여 참조하고 있는 모든 맞춤형 지표를 초기화할 수 있습니다. 지표 유형을 정의하고 쉼표로 구분된 지표의 매개변수를 전달해야 합니다.

참고

매개변수는 지표 클래스에서 선언된 순서대로 전달되어야 합니다.

우리의 경우, 유형은 SampleSMA이며 이 지표의 소스 값을 전달할 것입니다. 이 경우에는 봉의 종가와 Period 매개변수입니다.

1
_sma = Indicators.GetIndicator<SampleSMA>(Bars.ClosePrices, Periods);

거래 로직 구현하기

지표를 초기화했으므로 이제 거래 로직을 구현할 수 있습니다. 우리의 맞춤형 SMA 지표는 이동 평균 값을 Results 컬렉션에 저장합니다. Results 컬렉션에는 IsRising()IsFalling()이라는 두 가지 유용한 메서드가 있습니다. 이 메서드들을 사용하여 지표 결과가 상승하는지 하락하는지 알 수 있습니다.

이 메서드들을 사용하여 거래 조건을 구현할 것입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {        

    }
    else if(_sma.Result.IsFalling())
    {

    }
}

이제 if 문을 채워 넣겠습니다. 이동 평균이 상승할 때 모든 매도 포지션을 청산하고 매수 포지션을 열 것입니다. 반대로 이동 평균이 하락할 때는 모든 매수 포지션을 청산하고 매도 포지션을 열 것입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if(_sma.Result.IsFalling())
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);            
    }
}

우리 코드에서는 API가 기본적으로 제공하지 않는 두 가지 새로운 메서드를 사용했습니다. Open() 메서드는 정의된 방향과 수량에 따라 새로운 포지션을 엽니다. Close() 메서드는 정의된 방향의 모든 포지션을 청산합니다.

다음은 Open() 메서드가 정의된 방식입니다.

1
2
3
4
5
private void Open(TradeType tradeType)
{
    if(Positions.Count == 0)
        ExecuteMarketOrder(tradeType, SymbolName, Volume, InstanceId);
}

Open() 메서드 내에서 주문을 실행하려면 Volume 매개변수도 추가해야 합니다.

1
2
[Parameter(DefaultValue = 10000)]
public int Volume { get; set; }

남은 것은 Close() 메서드를 정의하는 것뿐입니다.

1
2
3
4
5
private void Close(TradeType tradeType)
{
    foreach (var position in Positions.Where(p => p.TradeType == tradeType))
        position.Close();
}

백테스트 수행하기

항상 그렇듯이, cBot이 우리를 대신해 거래하도록 하기 전에 철저히 백테스트를 수행할 것입니다. 같은 작업을 수행하려면 인스턴스를 추가한 다음 백테스팅 탭으로 전환하세요.

cBot을 더 자세히 테스트하기 위해, 참조한 맞춤형 지표를 인스턴스가 연결된 차트에 추가하고 포지션 진입 지점이 지표 출력과 일치하는지 확인합니다.

cBot의 사용 및 개발에 대해 더 자세히 알아보려면 문서의 다른 섹션을 자유롭게 살펴보고 YouTube 채널을 구독하여 새로운 동영상이 게시될 때 알림을 받으세요.

이 글과 함께 제공되는 동영상에서는 cBot에서 맞춤형 지표를 참조하고 사용하는 방법을 보여드릴 것입니다. 이를 위해 미리 만들어진 맞춤형 지표의 출력을 사용하여 거래 작업을 수행하는 거래 알고리즘을 개발할 것입니다.

새로운 cBot 만들기

현재 컴퓨터에 설치된 모든 맞춤형 지표를 보려면 Algo 애플리케이션으로 전환하고 '지표'로 이동하세요.