본문 바로가기
  • "Backtest, backtest, backtest." - Martin Schwartz
[백테스팅] 소개

[백테스팅 도구] 파인 스크립트로 작성하는 나만의 트레이딩뷰 전략테스터

by Eirene 2022. 11. 24.
반응형

파인스크립트로 작성하는 나만의 트레이딩뷰 전략테스터

파인 스크립트 언어로 작성하는 백테스팅

파인 스크립트 (Pine Script)는  트레이딩뷰 내에서 고유의 전략이나 인디케이터를 만들어 차트에 쓸 수 있게 하는 트레이딩뷰에서 개발한 개발 언어입니다. 특히, 트레이딩뷰에서 전략 테스터를 이용하여 백테스팅을 위해서는 트레이딩뷰에서 제공하는 전략 외에 자신만의 전략을 작성을 해야 하기 때문에 파인 스크립트를 알아야 합니다. 

트레이딩뷰 전략 테스터파인 스크립트 기본 문법은 아래 링크 참고 부탁드립니다.

 

[백테스팅 도구] 트레이딩뷰 전략테스터

트레이딩뷰(TradingView)의 전략테스터(Strategy Tester) 트레이딩뷰에서 제공하는 전략테스터는 차트에 입력된 주식이나 암호화폐 종목에 대해 기술적 지표 기반 매매 전략이 작성된 스크립트를 선택

backtesting.tistory.com

 

[백테스팅 도구] 파인 스크립트 기본 문법

트레이딩 뷰에서 제공하는 파인 스크립트 파인 스크립트 (Pine Script)는 트레이딩 뷰 내에서 고유의 전략이나 인디케이터를 만들어 차트에 쓸 수 있게 하는 트레이딩뷰에서 개발한 개발 언어입니

backtesting.tistory.com

 

본 글에서는 간단하게 살펴보고, 빠르게 백테스팅해 볼 수 있는 Quick Start를 먼저 보고, 이동평균 전략을 이용한 파인 스크립트 작성 예제와 마지막으로 전략 테스터 옵션에 대해 자세히 알아보도록 하겠습니다.

 

자세한 트레이딩뷰와 파인 스크립트 관련 정보는 아래 WikiDocs에 있는 온라인북 참고 바랍니다.
[도서] : 트레이딩뷰 파인 스크립트 개발 : 기술적 지표, 신호, 전략, 백테스팅
 

트레이딩뷰 파인 스크립트 개발: 기술적 지표, 신호, 전략, 백테스팅

이 책는 트레이딩뷰(TradingView) 플랫폼에서 사용되는 프로그래밍 언어인 파인 스크립트(Pine Script)를 배우고 숙달하기 위한 궁극적인 가이드입니다. 이 포괄적인 …

wikidocs.net

파인 스크립트 기반 백테스팅 작성 Quick Start

파인 스크립트 기반 전략 테스팅 순서
파인 스크립트 기반 전략 테스팅 순서

실행 순서는 위 그림과 같이 우선 ①트레이딩뷰 차트에서 백테스팅할 종목과 시간 간격을 선택합니다. 그 후에 하단에 있는 ②"Pine 에디터"를 열어서 코드를 작성합니다. 그런 다음 "Pine 에디터" 오른쪽 상단에 있는 "Publish script"를 실행하면,전략테스터 창에서 결과를 확인할 수 있습니다.

 

Pine 에디터에서 아래 코드를 실행하면 간단하게 실행해 볼 수 있습니다.

//@version=5
strategy("간단한 이동평균", overlay=true) 

// 20주간 이동 평균
avg = ta.sma(close, 20*5)

// 현재 바에서 close가 avg보다 크고, 이전 바에서 close가 avg보다 작은 경우 매도 
buy_condition = ta.crossover(close, avg)
if buy_condition
    strategy.entry(id="ID Buy", direction=strategy.long, limit=close)

// 현재 바에서 close가 avg보다 작고, 이전 바에서 close가 avg보다 큰 경우 매수 
sell_condition = ta.crossunder(close, avg)
if sell_condition
    strategy.exit("ID Sell", qty=100, limit=close)

// 차트에 20일간 이동 평균 보여주기
plot(avg)

위 코드를 실행하면 아래 화면처럼 차트에 파란선으로 이동 평균이 그려집니다. 또한 3번에서 입력한 매수 매도 조건별로 표기가 됩니다.

트레이딩뷰 파인스크립트 실행 예

 

예제를 통한 거래 전략 작성법 - 골든크로스/데드크로스 이동평균

Quick Start에서는 단순히 이동평균 하나만을 이용하여 전략을 작성했지만, 백테스팅 기간 / 투자금액 / 수수료 등 입력 정보뿐만 아니라 차트에도 단순하게만 그렸습니다. 이번 예제에서는 골든크로스/데드크로스 전략을 사용하여 보다 자세하게 설명드리도록 하겠습니다.

0. 단기/장기 이동평균을 이용한 골든크로스/데드크로스 전략 매매 조건 

  • 매수 : 골든크로스 발생 시 (단기 20일 이평선이 장기 60일 이평선을 위로 뚫고 올라가는 현상으로 상승추세가 강화)
  • 매도 : 데드크로스 발생 시 (단기 20일 이평선이 장기 60일 이평선을 아래로 뚫고 내려가는 현상으로 하락추세가 강화)

1. 백테스팅 전략 선언입력 설정

백테스팅하기 위해서는 파인 스크립트에서 전략을 설정해 주어야 합니다.

//@version=5
strategy(title="골든/데드크로스 전략",
    overlay = true, 
    calc_on_every_tick = true,
    initial_capital = 10000,
    commission_type = strategy.commission.percent,
    commission_value = 0.05,
    default_qty_type = strategy.percent_of_equity,
    default_qty_value= 100)

  - overlay = true와 같이 설정하면 차트 바로 위에 그려지게 됩니다.

  - calc_on_every_tick = true는 현재 바 포함 모든 틱에 대해 실행합니다.

  - 초기 자본 설정을 위해 initial_capital = 10000와 같이 설정했습니다. 현재는 통화가 없는데 기본적으로 차트에 설정된 통화를 사용합니다.

  - 거래 수수료는 거래 시마다 거래 금액의 0.05%를 지불하기 위해서 commission_type = strategy.commission.percent, commission_value = 0.05와 같이 설정했습니다.

  - 그리고 거래금액은 매 거래마다 전체 자본금의 100%를 투자하도록 default_qty_type = strategy.percent_of_equity, default_qty_value= 100와 같이 설정했습니다.

위와 같이 설정은 추후에 화면에서 변경도 가능합니다.

전략 세부 옵션

그리고 백테스팅 기간 설정을 위해 아래와 같이 작성합니다.

// 백테스팅 기간
startYear = input.int(title="시작 년도", defval=2012, minval=1800, maxval=2100, group="1. 백테스팅 기간")
startMonth = input.int(title="시작 월", defval=1, minval=1, maxval=12, group="1. 백테스팅 기간")
startDate = input.int(title="시작 날짜", defval=1, minval=1, maxval=31, group="1. 백테스팅 기간")

endYear = input.int(title="종료 년도", defval=2022, minval=1800, maxval=2100, group="1. 백테스팅 기간")
endMonth = input.int(title="종료 월", defval=12, minval=1, maxval=12, group="1. 백테스팅 기간")
endDate = input.int(title="종료 날짜", defval=30, minval=1, maxval=31, group="1. 백테스팅 기간")

// 현재 바가 백테스팅 기간 이내이면 true, 아니면 false
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

또한 장기 및 단기 기간 설정을 위해 아래와 같이 입력합니다.

// 단기 및 장기 기간 설정
fast_period = input.int(title="단기 이동 평균 기간", defval=50, minval=1, group="2. 이동평균기간")
slow_period = input.int(title="장기 이동 평균 기간", defval=200, minval=1, group="2. 이동평균기간")

위와 같이 input.int()를 사용하면 추후에 입력 값을 아래와 같이 쉽게 변경 가능합니다. 

입력값 설정

2. 전략에 사용될 이동 평균 구한 후 골든 크로스 및 데드 크로스 여부 확인

알고리즘의 핵심은 골든 크로스 및 데드 크로스 여부입니다. 

// 이동평균 구하기
movingaverage_fast = ta.sma(close, fast_period)
movingaverage_slow = ta.sma(close, slow_period)

// 골든크로스 및 데드크로스 여부
golden_cross = ta.crossover(movingaverage_fast, movingaverage_slow)
death_cross = ta.crossunder(movingaverage_fast, movingaverage_slow)
  - ta.sma(close, fast_period)를 이용하여 단순이동평균을 구합니다.
  - ta.crossover(movingaverage_fast, movingaverage_slow)를 이용하여 단기선이 장기선을 뚫고 올라 갔는지 확인 합니다.

3. 전략에 따른 매수 및 매도

// 전략에 따른 매수 및 매도
if golden_cross and inDateRange
    strategy.entry(id = "ID Buy", direction=strategy.long, limit=close)
else if death_cross and inDateRange
    strategy.close(id = "ID Buy")

백테스팅 기간 내에서만 매수/매도가 발생되도록 하였습니다.

4. 차트에 반영 및 결과 보기

// 차트에 이동 평균 그리기
plot(movingaverage_fast, color=color.red)
plot(movingaverage_slow, color=color.blue)

// 차트에 골든크로스 혹은 데드크로스 발생 지점에 동그라미 표시
plot(ta.cross(movingaverage_fast, movingaverage_slow) ? movingaverage_fast : na, color = (movingaverage_slow - movingaverage_fast > 0 ? color.red : color.lime) , style=plot.style_circles, linewidth = 4)

// 차트에 골든크로스 혹은 데드크로스 발생 지점에 문구 표시
plotshape(death_cross ? movingaverage_fast : na, color=color.red, text="데드크로스", textcolor=color.black, style=shape.labeldown, location=location.absolute)
plotshape(golden_cross ? movingaverage_fast : na, color=color.lime, text="골든크로스", textcolor=color.black, style=shape.labeldown, location=location.absolute)

차트에서 어떻게 전략이 발생되는지 확인하기 위해서 위와 같이 구현하면 아래와 같이 표기됩니다.

전략 적용 차트 예
전략 적용 차트 예

5. 얼러트 발생시키기

alertcondition(golden_cross, title="골든크로스(상승장)", message="골든크로스(상승장)")
alertcondition(death_cross, title="데드크로스(하락장)", message="데드크로스(하락장)")

위와 같이 코드 작성 시 실시간으로 추후에도 골든 크로스나 데드크로스 발생 시 트레이딩 뷰에서 알람을 받아 볼 수 있습니다.

 

※ 더보기를 누르면 전체 코드를 보실 수 있습니다.

더보기
//@version=5
strategy(title="골든/데드크로스 전략",
    overlay = true
    calc_on_every_tick = true,
    initial_capital = 10000,
    commission_type = strategy.commission.percent,
    commission_value = 0.05,
    default_qty_type = strategy.percent_of_equity,
    default_qty_value= 100)
 
// 백테스팅 기간
startYear = input.int(title="시작 년도", defval=2012, minval=1800, maxval=2100, group="1. 백테스팅 기간")
startMonth = input.int(title="시작 월", defval=1, minval=1, maxval=12, group="1. 백테스팅 기간")
startDate = input.int(title="시작 날짜", defval=1, minval=1, maxval=31, group="1. 백테스팅 기간")
 
endYear = input.int(title="종료 년도", defval=2022, minval=1800, maxval=2100, group="1. 백테스팅 기간")
endMonth = input.int(title="종료 월", defval=12, minval=1, maxval=12, group="1. 백테스팅 기간")
endDate = input.int(title="종료 날짜", defval=30, minval=1, maxval=31, group="1. 백테스팅 기간")
 
// 현재 바가 백테스팅 기간 이내이면 true, 아니면 false
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
(time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
 
// 단기 및 장기 기간 설정
fast_period = input.int(title="단기 이동 평균 기간", defval=50, minval=1, group="2. 이동평균기간")
slow_period = input.int(title="장기 이동 평균 기간", defval=200, minval=1, group="2. 이동평균기간")
 
// 이동평균 구하기
movingaverage_fast = ta.sma(close, fast_period)
movingaverage_slow = ta.sma(close, slow_period)
 
// 골든크로스 및 데드크로스 여부
golden_cross = ta.crossover(movingaverage_fast, movingaverage_slow)
death_cross = ta.crossunder(movingaverage_fast, movingaverage_slow)
 
// 전략에 따른 매수 및 매도
if golden_cross and inDateRange
    strategy.entry(id = "ID Buy", direction=strategy.long, limit=close)
else if death_cross and inDateRange
    strategy.close(id = "ID Buy")
 
// 차트에 이동 평균 그리기
plot(movingaverage_fast, color=color.red)
plot(movingaverage_slow, color=color.blue)
 
// 차트에 골든크로스 혹은 데드크로스 발생 지점에 동그라미 표시
plot(ta.cross(movingaverage_fast, movingaverage_slow) ? movingaverage_fast : na, color = (movingaverage_slow - movingaverage_fast > 0 ? color.red : color.lime) , style=plot.style_circles, linewidth = 4)
 
// 차트에 골든크로스 혹은 데드크로스 발생 지점에 문구 표시
plotshape(death_cross ? movingaverage_fast : na, color=color.red, text="데드크로스", textcolor=color.black, style=shape.labeldown, location=location.absolute)
plotshape(golden_cross ? movingaverage_fast : na, color=color.lime, text="골든크로스", textcolor=color.black, style=shape.labeldown, location=location.absolute)
 
alertcondition(golden_cross, title="골든크로스(상승장)", message="골든크로스(상승장)")
alertcondition(death_cross, title="데드크로스(하락장)", message="데드크로스(하락장)")

 

파인 스크립트 전략테스터 옵션 세부사항

strategy()

이 선언문은 스크립트를 전략테스터로 지정하며 여러 가지 전략 관련된 옵션을 세팅합니다.

strategy(title, shorttitle, overlay, format, precision, scale, 
    pyramiding, calc_on_order_fills, calc_on_every_tick, 
    max_bars_back, backtest_fill_limits_assumption, 
    default_qty_type, default_qty_value, 
    initial_capital, currency, slippage, commission_type, 
    commission_value, process_orders_on_close, close_entries_rule, 
    margin_long, margin_short, explicit_plot_zorder, max_lines_count, 
    max_labels_count, max_boxes_count, risk_free_rate, use_bar_magnifier) → void

인자는 다음과 같습니다.

더보기
  • title (const string) : 스크립트 제목. `shorttitle` 인자가 쓰이지 않을 때 차트에 디스플레이되며, 스크립트 퍼블리싱할 때 디폴트 타이틀이 됩니다.
  • shorttitle (const string) : 차트위 스크립트 디스플레이 네임. 지정되면 대부분의 차트-관련 윈도우에서 `title` 아규먼트를 리플레이스하게 됩니다. 옵셔널. 디폴트는 `title` 에 대해 쓰이는 아규먼트.
  • overlay (const bool) :  true 이면, 차트 위로 스트래티지가 디스플레이됩니다. false 이면, 별도의 페인데 들어가게 됩니다엔트리 및 엑시트 등의 스트래티지 전용 라벨은 이 세팅과 무관하게 메인 차트 위에 디스플레이됩니다. 옵셔널. 디폴트는 false.
  • format (const string) 스크립트의 디스플레이 밸류 포맷팅을 지정합니다. 쓸 수 있는 값들: format.inheritformat.priceformat.volume. 옵셔널. 디폴트는 format.inherit.
  • precision (const int) 스크립트 디스플레이 밸류의 소숫점 뒤 플로팅 포인트 자릿수. 0 이상 16 이하 정수라야 함. `format` 이 format.inherit 로 셋되고 `precision` 이 지정되면 해당 포맷은 format.price 로 대신 셋될 것입니다. 옵셔널. 디폴트는 차트 심볼의 프리시전을 내려 받습니다.
  • scale (scale_type) 쓰이는 프라이스 스케일. 쓸 수 있는 값들: scale.rightscale.leftscale.nonescale.none 밸류는 오로지 `overlay = true` 와 함께일때만 쓸 수 있습니다. 옵셔널. 디폴트로, 스크립트는 차트와 같은 스케일을 씁니다.
  • pyramiding (const int) 같은 방향으로 들어갈 수 있는 맥시멈 엔트리 수. 값이 0이면 한번에 딱 하나의 엔트리 오더만 나갈 수 있으며, 나머지 오더는 리젝트됩니다. 이 세팅은 스트래티지의 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 0.
  • calc_on_order_fills (const bool) 오더가 체결된 뒤 스트래티지 재계산 여부를 지정합니다. true 이면, 바가 클로즈할 때만 재계산되는 것과 달리, 오더가 체결된 뒤 스트래티지가 재계산됩니다. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 false.
  • calc_on_every_tick (const bool) 모든 리얼타임 틱에 대해 스트래티지 재게산 여부를 지정합니다. true 이면, 스트래티지가 리얼타임 바에서 돌아가고 있을 때, 차트가 업데이트될 때마다 재계산이 됩니다. false 이면, 리얼타임 바가 클로즈할 때만 재계산이 됩니다. 쓰인 아규먼트는 히스토리 데이터에 대한 스트래티지 셈에 영향을 주지 않습니다. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 false.
  • max_bars_back (const int) 모든 변수 및 펑크션에 대한 스크립트의 히스토리 버퍼 길이로써, `[]` 히스토리-레퍼런싱 오퍼레이터를 써서 얼마나 많은 지난 값들을 읽어올 수 있는 지를 결정합니다. 필요한 버퍼 사이즈는 파인 스크립트™ 런타임에 의해 저절로 감지됩니다. 이 파라미터는 오토매틱 디텍션이 실패해 런타임 에러가 날때만 쓸 필요가 있습니다. 히스토리 버퍼의 깊은 내막에 대한 자세한 정보는 당사 헬프 센터에 나와 있습니다. 옵셔널. 디폴트는 0입니다.
  • backtest_fill_limits_assumption (const int) 리밋 오더 체결 쓰레숄드 틱수. 이 값을 쓰면 마켓 프라이스가 오더의 리밋 레벨을 지정된 틱수만큼 넘어야만 리밋 오더가 체결됩니다. 옵셔널. 디폴트는 0.
  • default_qty_type (const string) `default_qty_value` 용 단위를 지정합니다. 쓸 수 있는 값들: 컨트랙트/셰어/랏의 경우 strategy.fixed, 커런시의 경우 strategy.cash, 또는 가용 에쿼티 퍼센티지의 경우 strategy.percent_of_equity. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 strategy.fixed.
  • default_qty_value (const int/float) `default_qty_type` 파라미텅와 함께 쓰이는 아규먼트에 의해 결정되는 단위로 된 디폴트 트레이드 수량. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 1.
  • initial_capital (const int/float) 트레이드할 스트래티지 초기 자금. 단위는 `currency`. 옵셔널. 디폴트는 1000000.
  • currency (const string) 커런시 관련 셈을 할 때 스트래티지가 쓰는 커런시. 마켓 포지션은 여전히 `currency` 를 차트 심볼 커런시로 바꾸어 오픈됩니다. 컨버전 레이트는 전날 (셈이 이루어지는 바에 대해 상대적으로) 의 FX_IDC 페어의 데일리 레이트에 기초합니다. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 currency.NONE 이며, 이 경우 차트 커런시가 쓰입니다. 쓸 수 있는 값들: `currency.*` 네임스페이스의 상수가운데 하나. 보기:  currency.USD.
  • slippage (const int) 틱으로 나타낸 슬리피지. 이 밸류는 마켓/스탑 오더의 체결가에 더하거나 빼서 체결가가 스트래티지에 대해 덜 우호적이 되도록 합니다. 보기: 만약 syminfo.mintick 이 0.01 이고 `slippage` 가 5 로 셋되면 롱 마켓 오더는 실제 프라이스보다 5 * 0.01 포인트 위로 들어가게 됩니다. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 디폴트는 0.
  • commission_type (const string) `commission_value` 로 넘긴 값이 무엇을 나타내는지를 결정합니다: 오더의 캐쉬 볼륨 퍼센티지의 경우 strategy.commission.percent, 컨트랙트당 커런시의 경우 strategy.commission.cash_per_contract, 오더별 커런시의 경우 strategy.commission.cash_per_order. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 strategy.commission.percent.
  • commission_value (const int/float) `commission_type` 파라미터로 보내진 아규먼트에 의해 결정되는 유닛으로 된 스트래티지 오더에 적용되는 커미션. 이 세팅은 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 0.
  • process_orders_on_close (const bool) true 로 셋되면 바 클로즈가 되어 스트래티지 셈이 끝난 뒤에 오더를 추가 실행하게 됩니다. 만약 마켓 오더라면 다음 바 오픈에 앞서 브로커 이뮬레이터가 그 오더를 체결합니다. 오더가 프라이스에 의존한다면 그 프라이스 조건이 닿아야만 체결되게 됩니다. 이 옵션은 커런트 바에서 포지션을 클로즈하고자 할 때 쓸모가 있습니다. 디폴트는 false.
  • close_entries_rule (const string) 트레이드가 클로즈되는 차례를 결정합니다. 쓸 수 있는 값들: 가장 이른 엑시트 오더가 가장 이른 엔트리 오더를 클로즈하려면 "FIFO" (First-In, First-Out), "ANY" if the orders are closed based on the parameter of the strategy.exit 펑크션의 `from_entry` 파라미터에 따라 오더가 클로즈되도록 하려면 "ANY". "FIFO" 는 스탁, 퓨쳐스 및 유에스 포렉스 (NFA 컴플라이언스 룰 2-43b) 에 대해서만 쓸 수 있는 반면, "ANY" 는 넌-유에스 포렉스에도 쓸 수 있습니다. 옵셔널. 디폴트는 "FIFO".
  • max_lines_count (const int) 마지막 디스플레이된 line 드로잉 갯수. 쓸 수 있는 값: 1-500. 옵셔널. 디폴트는 50.
  • max_labels_count (const int) 마지막 디스플레이된 label 드로잉 갯수. 쓸 수 있는 값: 1-500. 옵셔널. 디폴트는 50.
  • max_boxes_count (const int) 마지막 디스플레이된 box 드로잉 갯수. 쓸 수 있는 값: 1-500. 옵셔널. 디폴트는 50.
  • margin_long (const int/float) 롱 마진은 롱 포지션에 대해 현금이나 담보로 커버해야 되는 주식의 구매가 퍼센티지입니다. 마진콜 시뮬레이션 로직은 헬프 센터에 설명되어 있습니다. 이 세팅 또한 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 0 이며, 이 경우 스트래티지는 포지션 사이즈에 대해 아무런 제한을 두지 않습니다.
  • margin_short (const int/float) 숏 마진은 숏 포지션에 대해 현금이나 담보로 커버해야 되는 주식의 구매가 퍼센티지입니다. 마진콜 시뮬레이션 로직은 헬프 센터에 설명되어 있습니다.이 세팅 또한 스트래티지 "세팅/프로퍼티" 탭에서 바꿀 수 있습니다. 옵셔널. 디폴트는 0, 이 경우 스트래티지는 포지션 사이즈에 대해 아무런 제한을 두지 않습니다.
  • explicit_plot_zorder (const bool) 스크립트의 플롯, 필, hline 이 칠해지는 차례를 정합니다. true 이면, 플롯은 스크립트 코드에 나타나는 차례대로 그려집니다. 각각의 새로운 플롯은 이전 플로 위에 그려집니다. 이는 오로지 `plot*()` 펑그션, fill , 그리고 hline 에게만 적용됩니다. 옵셔널. 디폴트는 false.
  • risk_free_rate (const int/float) 리스크-프리 리턴율은 미니멈 또는 제로 리스크로 투자한 밸류에서의 한해 퍼센티지 체인지입니다. 샤피 앤 소르티노 레이쇼 셈에 쓰입니다. 옵셔널. 디폴트는 2.
  • use_bar_magnifier (const bool) 트루면 브로커 이뮬레이터는 히스토리 백테스팅을 할 때 좀 더 현실적인 결과를 얻으려 더 낮은 타임프레임을 씁니다. 옵셔널. 디폴트는 false프리미엄 어카운트만 이 피처를 쓸 수 있습니다.

 

 

 

728x90
반응형

댓글