차트에 스트래티지를 넣었지만 아무런 오더가 나오지 않습니다

차트에 전략을 추가한 후 전략 테스터의 "거래 목록" 및 "개요" 탭에 "데이터 없음"이 표시되면 주문을 시뮬레이션하지 않아서 탭을 채울 데이터가 없는 것일 수 있습니다. 스크립트가 주문을 생성하지 않는 경우 다음 이유 중 하나 때문일 수 있습니다:

스크립트가 전략으로 분류되지 않거나 주문을 생성하는 명령을 사용하지 않습니다.

전략 테스터를 이용한 백테스팅은 선언문에 `strategy()` 함수를 사용하는 파인 스크립트™ 전략에서만 작동합니다.  `indicator()` 또는 `library()`로 선언된 스크립트는 전략 테스터 모듈과 상호 작용할 수 없습니다.

전략으로 선언된 스크립트는 스크립트 작성자가 코드에 포함했을 수 있는 다른 매수/매도 신호와 관계없이 `strategy.*` 주문 발주 명령(예: `strategy.order()` 또는 `strategy.entry()`)을 사용하여 주문을 시뮬레이션하고 전략 테스터에 데이터를 표시해야 합니다.

전략에 포지션을 개시하기에 충분한 자본이 없습니다.

전략이 포지션을 개시하려면 지정된 수의 계약/랏/주식/유닛을 매수할 수 있는 충분한 자금이 있어야 합니다. 비용을 충당할 수 있는 충분한 자본이 없으면 거래에 진입하지 않습니다. 예를 들어 전략의 초기 자본금이 1000달러이고 주문 규모가 1계약인 경우 자산 가격이 1000달러 미만으로 떨어지지 않으면 전체 거래를 감당할 수 없으므로 포지션에 진입할 수 없습니다. 전략은 항상 지정된 수의 계약/주식/랏/유닛을 매수하려고 시도하며 그 이하로는 매수하지 않습니다.

선물 백테스팅에 대한 중요 참고사항: 

선물 심볼에는 일반적으로 계약 단위라고 하는 것이 있습니다(트레이딩뷰에서는 포인트 값으로 표시되고 파인에서는 `syminfo.pointvalue` 변수를 통해 액세스할 수 있음). 다른 심볼과 마찬가지로 차트의 원시 가격은 거래되는 상품 한 단위의 가격을 나타냅니다. 그러나 선물 계약은 각각 수량이 정해져 있으므로 일반적으로 단일 단위로 매수할 수 없습니다. 계약에 필요한 자본을 계산하려면 차트 가격에 포인트 가치를 곱하면 됩니다.

선물 심볼로 운용하는 전략에 대한 포인트 가치의 효과를 설명하기 위해 유동성이 가장 좋고 포인트 가치가 50인 ES 선물 계약을 나타내는 CME_MINI:ES1! 심볼을 살펴 보겠습니다:

아래 예시에서 차트에 추가한 전략은 정확히 4000달러에 포지션을 진입하고 4500달러에 청산했습니다. 진입 가격으로 계약에 사용한 실제 금액은 4000달러에 포인트 가치 50을 곱한 20만 달러입니다. 전략이 청산 가격으로 포지션을 청산했을 때 받은 금액은 4500 USD * 50 = 225,000 USD로 25,000 USD의 수익이 발생했으며, 이는 전략 테스터의 "거래 목록" 탭의 "수익" 열을 통해 확인할 수 있습니다:

이 경우 전략의 초기 자본이 200,000달러 미만이었다면 차트에 표시된 가격의 50배인 진입가를 감당할 수 없어 주문을 낼 수 없었을 것입니다. 포지션을 시뮬레이션하려면 전략이 감당할 수 있도록 개시 증거금을 늘리거나 마진 롱/숏 값을 낮춰야 합니다.

전략이 런타임 오류를 반환합니다.

전략이 계산하는 동안 문제가 발생하면 런타임 오류가 발생하고 전략이 포함된 차트 창의 왼쪽 상단 모서리에 빨간색 느낌표가 표시됩니다. 런타임 오류가 발생하면 스크립트가 계산을 계속할 수 없으므로 주문을 시뮬레이션할 수 없습니다. Pine의 다양한 런타임 오류에는 다양한 원인과 잠재적 수정 사항이 있습니다. 느낌표를 클릭하면 스크립트의 오류 메시지가 표시됩니다.

전략 주문에 필요한 조건이 충족되지 않았습니다.

 

전략에 데이터가 표시되지 않는 원인 중 하나는 테스트 범위 전체에서 주문을 발동하는 조건이 없기 때문일 수 있습니다. 이 경우 체결할 주문이 없기 때문에 차트에 항목이 없습니다. 사용자는 전략의 소스 코드에서 조건을 변경하여 이 문제를 해결할 수 있습니다. 전략 주문 조건의 이력을 차트에 표시하여 시각적으로 검사하는 것이 도움이 되는 경우가 많습니다.

아래 스크립트는 Pine의 `plotshape()` 함수를 사용하여 매수 및 매도 조건이 발생하면 막대 위에 파란색과 빨간색 십자가를 그려 차트에서 이력을 확인할 수 있도록 합니다:


//@version=5
strategy('My Strategy', overlay = true) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))if longCondition strategy.entry('Long', strategy.long)plotshape(longCondition, color=color.new(color.blue, 0)) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))if shortCondition strategy.entry('Short', strategy.short)plotshape(shortCondition, color=color.new(color.red, 0))
Java이 주제에 대한 자세한 내용은 유저 매뉴얼의 디버깅 페이지를 참조하세요.

전략의 속성이 올바르지 않습니다.

모든 전략에는 주문 개시 규칙에 적용되는 몇 가지 매개변수가 있습니다. 작성자는 전략의 소스 코드에서 이러한 매개변수를 설정할 수 있으며, 사용자는 전략 설정의 "속성" 탭에서 입력값으로 매개변수를 재정의할 수 있습니다.

노트: 전략의 소스 코드에는 사용자가 주문에 대한 계약/주식/랏/단위 수를 설정할 수 있는 여러 곳이 있습니다:

  • `strategy()` 함수의 매개변수를 통해 기본 거래 수량과 유형을 설정할 수 있으며, 이는 "속성" 탭에서 기본값으로 설정됩니다. 사용자는 "주문 크기" 입력을 조정하여 이 값을 재정의할 수 있습니다.
  • `strategy.entry()`와 같이 진입 주문을 생성하는 주문 배치 명령은 주문 단위로 거래 수량을 설정할 수 있습니다. 이 경우 "속성" 탭에서 입력을 변경해도 전략의 주문 크기에 영향을 미치지 않습니다. 

사용자는 전략의 주문 크기를 정확하게 지정해야 합니다. 위의 "전략에 포지션을 개시할 수 있는 자본이 충분하지 않습니다" 섹션에 추가하려면 이 점을 유의해야 합니다:

  • 전략의 "주문 유형"이 "계약"(소스 코드에서 기본_수량_유형으로서 `strategy.fixed`에 해당)으로 설정된 경우 대부분의 심볼에서 주문 크기는 1보다 커야 합니다. 일부 암호화폐는 소수점 단위 주문 크기를 지원합니다. 예를 들어 0.1의 주문 크기는 BTCUSD에는 유효하지만 AAPL이나 EURUSD에는 유효하지 않습니다.
  • 주문 크기는 양수여야 하며 음수는 런타임 오류를 일으키고 0은 아무런 영향을 미치지 않습니다.
  • 총 포지션 크기(계약 수)는 1e12를 초과할 수 없습니다. 포지션 크기가 이 숫자를 초과하면 전략에서 새 주문을 시뮬레이션하지 않습니다.