파인스크립트 기본반
분류 예제

기간 설정 input.time

페이지 정보

본문

기간 설정에 관련하여 짧은 예문 몇가지를 올려드립니다.

작년 12월 경에 input.time형의 입력 형식이 지원되면서 스크립트가 간결해졌습니다.

기존에는 시작과 종료 날짜의 연월일을 각각 받아야해서 속성에서도 6줄을 차지했었죠.

특정 기간에만 배경색과 지표, 전략 신호를 나타내는 예제입니다.

보시고, 응용하시거나 관련하여 추가로 궁금하신 경우가 있다면 질문 남겨주시기 바랍니다.


1. 특정 기간에만 배경색을 나타내는 예제

//@version=4
study("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 2월 28일까지만 배경색을 출력하는 예제
// 지표 속성에서 날짜를 바꿀 수 있음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)
endTime   = input(timestamp("2021-02-28"), "종료일", input.time)
inDateRange = time >= startTime and time <= endTime
bgcolor(inDateRange ? color.green : na, 90)



2. 특정 기간에만 배경색과 이평선을 출력하는 예제


//@version=4
study("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 2월 28일까지 배경색과 이평선을 출력하는 예제

// 이평 길이 입력 받음
maLength  = input(20, "이평 길이")

// 시작일 입력 받음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)

// 종료일 입력 받음
endTime   = input(timestamp("2021-02-28"), "종료일", input.time)

// 현재 날짜가 시작일보다 크고(미래), 현재 날짜가 종료일보다 작으면(과거) inDateRange는 true(참)이고, 아니라면 false(거짓)값을 갖는다.
inDateRange = time >= startTime and time <= endTime

// 배경색을 출력하는데, inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면 배경색은 color.green(녹색)이고, 아니라면 na(아무색도 아님)다. 투명도는 90%
bgcolor(inDateRange ? color.green : na, 90)

// ma는 close(종가)의 maLength일 이동평균이다.
ma = sma(close, maLength)

// inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면, ma(이동 평균), 아니라면 na(아무값도 없음)를 출력함.
plot(inDateRange ? ma : na, "이평선")


3. if를 사용한 2의 다른 형태 (ma값을 직접 변조하므로 추천하지 않음 - 예제를 위한 예제)


//@version=4
study("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 2월 28일까지 배경색을 달리하고 이평선을 출력하는 예제

// 이평 길이 입력 받음
maLength  = input(20, "이평 길이")

// 시작일 입력 받음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)

// 종료일 입력 받음
endTime   = input(timestamp("2021-02-28"), "종료일", input.time)

// 현재 날짜가 시작일보다 크고(미래), 현재 날짜가 종료일보다 작으면(과거) inDateRange는 true(참)이고, 아니라면 false(거짓)값을 갖는다.
inDateRange = time >= startTime and time <= endTime

// 배경색을 출력하는데, inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면 배경색은 color.green(녹색)이고, 아니라면 na(아무색도 아님)다. 투명도는 90%
bgcolor(inDateRange ? color.green : na, 90)

// ma는 close(종가)의 maLength일 이동평균이다.
ma = sma(close, maLength)

// inDateRange가 false(거짓)이 되어야 if의 조건문이 true(참)이 됨.
// 만약 현재 날짜가 시작일과 종료일 사이에 없다면(범위 밖이라면), ma는 na(아무것도 없음)로 값을 바꿈
if(not inDateRange)
    ma := na
    
// ma(이동 평균)를 출력함.
plot(ma, "이평선")


4. 기간 내에서만 이평 돌파 매매를 하는 예제


//@version=4
strategy("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 3월 15일까지 배경색을 달리하고 이평선 매매 출력하는 예제

// 이평 길이 입력 받음
maLength  = input(20, "이평 길이")

// 시작일 입력 받음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)

// 종료일 입력 받음
endTime   = input(timestamp("2021-03-15"), "종료일", input.time)

// 현재 날짜가 시작일보다 크고(미래), 현재 날짜가 종료일보다 작으면(과거) inDateRange는 true(참)이고, 아니라면 false(거짓)값을 갖는다.
inDateRange = time >= startTime and time <= endTime

// 배경색을 출력하는데, inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면 배경색은 color.green(녹색)이고, 아니라면 na(아무색도 아님)다. 투명도는 90%
bgcolor(inDateRange ? color.green : na, 90)

// ma는 close(종가)의 maLength일 이동평균이다.
ma = sma(close, maLength)

// longCondition(매수 조건)은 close(종가)가 ma(이평)을 상방 돌파할때
longCondition = crossover(close, ma)

// exitCondition(청산 조건)은 close(종가)가 ma(이평)을 하방 돌파할때
exitCondition = crossunder(close, ma)

// 만약 현재 날짜가 시작일과 종료일 사이에 있다면, 매매를 시작한다.
if(inDateRange)
    // longCondition이 참이면(매수 조건이 만족하면)
    if(longCondition)
        // "BUY"라는 이름의 매수 주문 시가 체결
        strategy.entry("BUY", strategy.long)
    // exitCondition이 참이면(청산 조건이 만족하면)
    if(exitCondition)
        // "BUY"라는 이름의 주문을 청산하고, 차트에는 EXIT로 출력
        strategy.close("BUY", comment="EXIT")

// ma(이동 평균)를 출력함.
plot(ma, "이평선")


5. 매매 주문 함수의 when 인자를 활용한 4의 다른 예제


//@version=4
strategy("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 3월 15일까지 배경색을 달리하고 이평선 매매 출력하는 예제

// 이평 길이 입력 받음
maLength  = input(20, "이평 길이")

// 시작일 입력 받음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)

// 종료일 입력 받음
endTime   = input(timestamp("2021-03-15"), "종료일", input.time)

// 현재 날짜가 시작일보다 크고(미래), 현재 날짜가 종료일보다 작으면(과거) inDateRange는 true(참)이고, 아니라면 false(거짓)값을 갖는다.
inDateRange = time >= startTime and time <= endTime

// 배경색을 출력하는데, inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면 배경색은 color.green(녹색)이고, 아니라면 na(아무색도 아님)다. 투명도는 90%
bgcolor(inDateRange ? color.green : na, 90)

// ma는 close(종가)의 maLength일 이동평균이다.
ma = sma(close, maLength)

// longCondition(매수 조건)은 close(종가)가 ma(이평)을 상방 돌파할때
longCondition = crossover(close, ma)

// exitCondition(청산 조건)은 close(종가)가 ma(이평)을 하방 돌파할때
exitCondition = crossunder(close, ma)

// 만약 현재 날짜가 시작일과 종료일 사이에 있다면, 매매를 시작한다.
if(inDateRange)
    // longCondition이 참일때(매수 조건이 만족하면) "BUY"라는 이름의 매수 주문 시가 체결
    strategy.entry("BUY", strategy.long, when=longCondition)
    // exitCondition이 참일때(청산 조건이 만족하면) "BUY"라는 이름의 주문을 청산하고, 차트에는 EXIT로 출력
    strategy.close("BUY", exitCondition, comment="EXIT")

// ma(이동 평균)를 출력함.
plot(ma, "이평선")


6. 5에서 설정한 기간이 넘었을 경우 모든 포지션을 청산하는 예제


//@version=4
strategy("기간 설정 예제", overlay=true)

// 2021년 1월 1일 부터 3월 15일까지 배경색을 달리하고 이평선 매매 출력하고, 백테스트 기간이 끝나면 모든 포지션을 마감하는 예제

// 이평 길이 입력 받음
maLength  = input(20, "이평 길이")

// 시작일 입력 받음
startTime = input(timestamp("2021-01-01"), "시작일", input.time)

// 종료일 입력 받음
endTime   = input(timestamp("2021-03-15"), "종료일", input.time)

// 현재 날짜가 시작일보다 크고(미래), 현재 날짜가 종료일보다 작으면(과거) inDateRange는 true(참)이고, 아니라면 false(거짓)값을 갖는다.
inDateRange = time >= startTime and time <= endTime

// 배경색을 출력하는데, inDateRange가 true(참 : 현재 날짜가 시작일과 종료일 사이에 있다면)이라면 배경색은 color.green(녹색)이고, 아니라면 na(아무색도 아님)다. 투명도는 90%
bgcolor(inDateRange ? color.green : na, 90)

// ma는 close(종가)의 maLength일 이동평균이다.
ma = sma(close, maLength)

// longCondition(매수 조건)은 close(종가)가 ma(이평)을 상방 돌파할때
longCondition = crossover(close, ma)

// exitCondition(청산 조건)은 close(종가)가 ma(이평)을 하방 돌파할때
exitCondition = crossunder(close, ma)

// 만약 현재 날짜가 시작일과 종료일 사이에 있다면, 매매를 시작한다.
if(inDateRange)
    // longCondition이 참일때(매수 조건이 만족하면) "BUY"라는 이름의 매수 주문 시가 체결
    strategy.entry("BUY", strategy.long, when=longCondition)
    // exitCondition이 참일때(청산 조건이 만족하면) "BUY"라는 이름의 주문을 청산하고, 차트에는 EXIT로 출력
    strategy.close("BUY", exitCondition, comment="EXIT")
// 만약 현재 날짜가 범위 밖에 있다면
else
    // 모든 주문을 청산하고 차트에는 END로 출력
    strategy.close_all(comment="END")

// ma(이동 평균)를 출력함.
plot(ma, "이평선")

관련자료

등록된 댓글이 없습니다.
전체 28건 / 1페이지

+ 최근글


+ 새댓글


통계