FMZ PINE 스크립트 문서

저자:작은 꿈, 창작: 2022-05-06 14:27:06, 업데이트: 2024-02-23 15:36:48

[TOC]

키워드, 문법, 설정 설명서

코드 구조

Pine의 코드는 다음과 같은 일반적인 구조를 따르고 있습니다.

<version>
<declaration_statement>
<code>

참고자료

FMZ의 파인 언어 지원 해설 기호: 단선 해설//이 글의 주제는/* */예를 들어, 다음 예제에서 해설 글씨를 사용하십시오:

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

버전

다음과 같은 형태의 컴파일러 명령은 컴파일러에게 이 스크립트가 어떤 버전의 파이인으로 작성되었는지 알려줍니다:

//@version=5

기본 버전은 v5이고, 코드에서 제외할 수 있습니다.//@version=5

선언문

  • indicator()
  • strategy()

선언 문장은 스크립트의 유형을 결정하고, 이는 또한 어떤 내용이 허용되고, 어떻게 사용되고 실행되는지 결정한다. 스크립트의 핵심 속성을 설정한다. 예를 들어, 그것의 이름, 그것이 차트에 추가될 때 그것이 어디에 나타날지, 그것이 표시하는 수치의 정확성과 형식, 그리고 실행 시 행동하는 특정 값을 관리한다. 예를 들어, 그것은 차트에 표시되는 최대 그림 객체의 수를 관리한다. 전략의 경우, 속성은 초기 자본, 수수료, 점, 등과 같은 재검토를 제어하는 매개 변수를 포함한다. FMZ의 Pine는 전략 코드에 포함되어야 할 것을 요구하지 않는다.indicator()또는strategy()이 글은 에 대한 글입니다.

코드

스크립트에서 코멘트나 컴파일러 명령어가 아닌 행은 문장이며, 그것은 스크립트의 알고리즘을 구현한다. 문장은 그 중 하나가 될 수 있다.

  • 변수 선언
  • 변수의 재배정
  • 함수 선언
  • 내장 함수 호출, 사용자 정의 함수 호출
  • ifforwhile또는switch같은 구조

문장은 여러 가지 방법으로 분류될 수 있습니다.

  • 어떤 문장은 하나의 줄로 표현될 수 있다. 예를 들어 대부분의 변수 선언은 하나의 함수 호출 줄만 포함하거나 단일 줄의 함수 선언을 포함한다. 다른 문장들은 구조처럼, 항상 여러 줄이 필요하며, 왜냐하면 그들은 하나의 로컬 블록을 필요로 하기 때문이다.
  • 시나리오의 범용 문장 (즉, 부분의 일부가 아닌 부분) 은空格또는制表符(tab 키) 시작. 그들의 첫 번째 문자는 또한 해당 줄의 첫 번째 문자가어야 한다. 해당 줄의 첫 번째 위치에서 시작하는 문자는 정의에 따라 스크립트의 범주의 일부가 된다.
  • 구조 또는 다줄기 함수 선언은 항상local block▲ 로컬블록은 하나의 표기장 또는 네 개의 공간으로 축소되어야 한다 (그렇지 않으면 전줄의 연속적인 내용으로 결정되는 전줄의 연속 코드로 풀려난다) 그리고 각 로컬블록은 다른 로컬 스펙트럼을 정의한다.
  • 여러 개의 단선 문장은 코마 (,) 를 사용하여 하나의 줄에서 분리 표시로 연결할 수 있습니다.
  • 한 줄에는 설명서가 포함될 수도 있고 그냥 설명서가 될 수도 있습니다.
  • 줄은 또한 묶어질 수 있습니다.

예를 들어, 세 개의 로그램을 포함하고, 하나는 사용자 정의 함수 선언에서, 두 개는 변수 선언에서 if 구조를 사용하며, 다음과 같은 코드를 사용합니다:

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

코드 라인 변경

긴 줄은 여러 줄로 나눌 수 있고, 또는 "폐쇄"될 수 있다. 포괄된 줄은 4의 배수가 아닌 한, 모든 수의 공간으로 축소되어야 한다.

a = open + high + low + close

이렇게 포장할 수 있습니다. (선별로 축소된 공간의 수는 4의 배가 아닙니다.)

a = open +
      high +
          low +
             close

긴 플롯 (plot) 호출을 묶어 놓을 수 있습니다.

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

사용자 정의 함수 선언의 문장도 포괄될 수 있다. 그러나, 로그램은 문법적으로 축소로 시작되어야 하기 때문에 (4개의 공간 또는 1개의 표기호) 다음 줄로 분리할 때, 문장의 연속 부분은 하나 이상의 축소로 시작되어야 한다 (4개의 공간의 배수와 같지 않다). 예를 들어:

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

시간 순서

시간계열은 데이터 타입이나 형식이 아니라, 시간계열은 PINE 언어의 기본 구조의 개념이다. 시간에 연속적으로 변화하는 값을 저장하기 위해 사용되며, 각각의 값은 시간점에 해당한다. 시간계열의 개념의 구조는 시간이 지남에 따라 변화하는 일련의 데이터를 처리하고 기록하는 데 적합하다. 기본 변수open예를 들어,open내장 변수는 K줄 BAR의 개시 가격을 기록합니다.open5분 K선 주기의 데이터입니다.open변수에 기록된 것은 K 라인 BAR (?? 기둥) 의 열기 가격입니다. 당신의 정책 프로그램이 실행되는 동안 코드에서 참조됩니다.open즉, 현재 K 라인 BAR의 열기값을 참조한다. 시간 계열의 이전 값 (역시 값) 을 참조하기 위해 우리는 사용한다.[]역사 연산자는 어떤 K줄 BAR에서 실행될 때open[1]즉, 현재 K 라인 BAR의 이전 K 라인 BAR의 개시 가격을 참조하는 것이다.

하지만시간 순서쉽게 "배열" 같은 데이터 구조를 떠올릴 수 있지만, PINE 언어에는 배열 유형도 있습니다. 그러나 그들은 시간 순서와 완전히 다른 개념입니다.

PINE 언어에서 이렇게 설계된 시간 계열은 전략 코드에서 매우 쉽게 종결 가격의 누적 값을 계산할 수 있으며, for와 같은 루킹 구조를 사용하지 않고, 단지 PINE 언어를 사용하는 내장 함수를 사용하여 계산할 수 있습니다.ta.cum(close)또 다른 예로, 우리는 마지막 14개의 K줄 BAR (즉, 코드가 실행될 때 현재 시점까지 가장 가까운 14개의 K줄 BAR) 의 최대값과 최소값의 평균값을 계산해야 합니다.ta.sma(high - low, 14)

시간계열에 함수를 호출하는 결과도 시간계열에 흔적을 남깁니다.[]역사 연산자는 이전 값을 참조한다. 예를 들어, 현재 K 라인 BAR의 종료 가격이 마지막 10개의 K 라인 BAR 중 가장 높은 가격의 최대값을 초과하는지 테스트할 때 (현재의 K 라인 BAR를 제외한다) 우리는 이렇게 쓸 수 있다.breach = close > ta.highest(close, 10)[1]이 글은 다른 글과도 같습니다.breach = close > ta.highest(close[1], 10)그래서ta.highest(close, 10)[1]그리고ta.highest(close[1], 10)이 글은 다른 글과 비슷합니다.

다음 코드를 사용하여 확인할 수 있습니다:

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

위의 테스트 코드는 a와 b가 각 BAR에 해당 시퀀스의 값을 출력합니다. a와 b가 항상 같다는 것을 볼 수 있습니다. 따라서 두 표현 방식은 동등합니다.

Pine 언어 거래 클래스 라이브러리 템플릿 파라미터

PINE 정책의 내장 템플릿 "Pine 언어 거래 클래스 라이브러리"의 매개 변수 설정 설명.

거래 설정

  • 실행 방법 클로시 가격 모델: 현재 BAR가 끝나기 전까지 모델을 실행하고, 하위 바르가 시작될 때 거래를 실행한다. 실시간 가격 모델: 가격 변동마다 모델을 실행하고 신호가 즉시 거래를 실행합니다.
  • 기본 상장 수: 거래 지시가 거래 수를 지정하지 않은 경우 해당 설정에 따라 거래 수를 실행합니다.
  • 최대 단일 거래 단위: 실제 거래 상장에 따라, 이 매개 변수 설정과 결합하여, 거래 상자에 충격을 피하기 위해 매번 거래 상장의 최대 수를 결정한다.
  • 가격 점수:定价货币精度매개 변수와 이 매개 변수는 주문 시 미끄러운 가격을 결정한다. 예를 들어, 가격화 통화 정확도는 2로 설정된다. 즉, 소수점 두 번째까지 정확하고 0.01까지 정확하다. 그러면 미끄러운 가격 점수는 각 점마다 0.01의 가격 단위를 나타낸다. 이 경우 미끄러운 가격 점수는 5로 설정되어 있으며, 주문 시 미끄러운 가격은 0.05이다.
  • 변수 최장 주기 수: 그래프 K 라인 BAR의 수에 영향을 미치며javascript전략에서 호출SetMaxBarLen이 함수들은 같은 역할을 합니다.

선물 옵션

  • 품종 코드: 계약 코드, 거래소 객체가 비 현장 거래소 객체일 때 설정해야 합니다.
  • 최소 계약 수: 주문 시 계약의 최소 거래량.

디스크 옵션

  • 자동 복원 진행: 마지막 정책이 중단되기 전의 상태로 자동 복원합니다.
  • 주문을 다시 시도하는 횟수: 거래가 이루어지지 않은 주문은 주문을 취소하고 다시 주문을 시도하는 거래로 제한됩니다. 이 매개 변수는 최대 반복 횟수를 제한합니다.
  • 네트워크 쿼리 간격 (millisecond): REST 프로토콜에만 유효하며, 네트워크 요청 간격을 제어하고 요청이 너무 자주 거래소 제한을 초과하는 것을 피합니다.
  • 계정 동기화 시간 ((초): 계정 데이터의 동기화 시기의 주기.
  • 포스트 포지션 동기화 시간 (millisecond): 일부 거래소 데이터 지연으로 인한 반복 포지션에 대해서만, 동기화 시간을 더 크게 설정하면 이러한 문제를 완화할 수 있다.
  • 레버 팩토리: 레버 팩토리를 설정합니다.

현금 거래, 다른 설정

  • 한쪽 거래량: 기본 한쪽 거래량은 현금에만 유효합니다.
  • 최소 거래량: 최소 거래량.
  • 가격화 통화 정확성: 가격의 정확성, 즉 가격의 소수자 숫자.
  • 거래 품종 정확성: 다음 단위의 정확성, 즉 다음 단위의 소수자 수.
  • 서비스 요금: 이 설정에 따라 일부 데이터에 대해 계산하면 0.002은 2분의 1이다.
  • 수익/손실 통계 간격: 실판에서만 수익/손실 통계를 사용한다.
  • 실패 재시험 (毫秒): 네트워크 요청이 실패할 때 재시험 간격.
  • 사용 대리인: REST 프로토콜에만 유효합니다.
  • 로그 영역에서 로그를 숨기는 일반적인 오류.
  • 데이터베이스 주소 전환: REST 프로토콜에서만 유효합니다.
  • 알림: 메세지를 이메일로 밀고 보내십시오.

아래의 거래

개장

strategy(title = "open long example", pyramiding = 3)                                // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10))       // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

평장

strategy(title = "close long example", pyramiding = 2)                              // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%")   // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%")   // 平仓,指定平掉分组标签为long2的仓位的80%持仓

거래 메커니즘

PINE 언어의 보유 메커니즘은 단방향 보유와 유사하다. 예를 들어, 다중 지위를 보유할 때 ("다중 지위 보유") 판매 운영, 계획 목록 등이 있는 경우 ("거래 방향에 비해 역방향) 의 주문이 발생하면, 먼저 다중 지위를 평평하게 하고 ("모든 다중 지점을 평평하게 하고") 그 다음에는 평평화 이전 보유 방향에 비해 역방향의 주문을 실행한다.

계획 목록

하위 명령어를 사용하면 하위 명령어를 사용할 때, 어떤 가격을 지정하지 않으면 시장 가격 목록으로 설정됩니다. 하위 목록은 시장 가격 이외에도 계획 목록으로 주문할 수 있으며 계획 목록은 즉시 하위 목록을 작동하지 않습니다. 계획 목록은 트리거가 없을 때 존재하는 프로그램의 계획 위탁 큐에 포함될 수 있습니다.실제 디스크 / 재검토시간 상태 정보 (즉, 전략 실행 상태 탭) 의 "계획 주문" 테이블 분화에서 볼 수 있다. 시장 실시간 가격 조건이 충족될 때 시스템이 실제로 이 계획 주문을 촉발할 때이다. 따라서 이 주문의 거래 가격에 약간의 오차가 있는 것이 정상적인 상황이다.strategy.entry이 함수들을 정렬할 때limitstop파라미터.

var isTrade = false 
if not barstate.ishistory and not isTrade
    isTrade := true 
    strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order")                     // stop
    strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order")                    // limit
    strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order")   // stop-limit    
  • 제한 주문

    주문의 제한 가격을 설정합니다.direction변수는strategy.long), 시장의 현재 가격이 그 가격보다 낮을 때만 주문이 촉발됩니다. 주문이 판매 주문이 될 때 (예:direction변수는strategy.short이 경우, 시장의 현재 가격이 그 가격보다 높을 때만 주문이 발생한다.

  • 정지 주문

    주문의 중지 손실 가격을 설정하여 주문을 지불할 때, 시장의 현재 가격이 그 가격보다 높을 때만 주문을 유발합니다. 주문이 판매 주문일 때, 시장의 현재 가격이 그 가격보다 낮을 때만 주문이 촉발됩니다.

  • 스톱-리미트 주문

    동시에 설정할 수 있습니다.limitstop파라미터, 주문은 우선 조건에 맞는 가격에 촉발됩니다.

선언, 논리 구조 키워드

var

var는 배분 및 일회성 초기화 변수에 사용되는 키워드이다. 일반적으로, 키워드 var를 포함하지 않는 변수 부여 문법은 데이터를 업데이트할 때마다 변수의 값을 덮어 놓을 수 있습니다. 반대로, 키워드 var를 사용하여 변수를 할당할 때, 데이터가 업데이트 되더라도 상태가 유지될 수 있으며, if-expressions의 조건이 충족될 때만 변경할 수 있습니다.

var variable_name = expression

설명:

  • variable_name- 파인 스크립트에서 허용되는 사용자 변수의 모든 이름 (대문자와 소문자를 포함할 수 있으며, 숫자와 하부선을 포함할 수 있지만 숫자로 시작될 수 없습니다)
  • expression- 어떤 수학적 표현식도 일반 변수를 정의하는 것과 같습니다.

예를 들어

// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
    var x = close
    b := x
    green_bars_count := green_bars_count + 1
    if green_bars_count >= 10
        var y = close
        c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")

변수 a은 일련의 각 기둥의 첫 기둥의 닫기 가격을 유지한다. 변수 b은 시리즈의 첫 번째 녹색 가격 바의 종료 가격을 유지한다. 변수?? c?? 은 시리즈의 10번째?? 녹색?? 의 종료 가격을 유지했다.

FMZ에서는 실시간 가격 모델, 폐쇄 가격 모델,varvarip우리는 다음과 같은 코드를 사용하여 변수를 테스트합니다.

strategy("test pine", "test 1", true) 

// 测试 var varip
var i = 0
varip ii = 0

// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)

// 每轮逻辑执行都给i、ii递增1
if true
    i := i + 1
    ii := ii + 1
  • 실시간 가격 모델 위의 테스트 코드는 실행 시 두 단계로 나뉘어 있습니다: 1, 역사 K 라인 단계; 2, 실시간 K 라인 단계.varvarip선언된 변수 i、ii는 정책 코드의 각 라운드 실행에 따라 증가 작업을 수행합니다.if true따라서 확실히 해당 실행 조건 코드 블록) 를 참조하십시오. 그래서 다시 검색 결과 K 라인 BAR에 표시되는 숫자가 각각 1으로 증가하는 것을 볼 수 있습니다. 역사 K 라인 단계가 끝나면 실시간 K 라인 단계가 시작됩니다.varvarip선언된 변수는 다르게 변하기 시작합니다. 실시간 가격 모델이기 때문에, K줄 BAR 내에서 가격 변화마다 전략 코드가 반복적으로 실행됩니다.i := i + 1그리고ii := ii + 1i는 매번 수정된다. 하지만 i는 매번 수정되기도 하지만, 다음 라운드 실행 시 정책 논리가 이전 값으로 돌아갑니다. 현재 K 라인 BAR가 끝나기 전까지는 업데이트가 이루어지지 않습니다. 그래서 우리는 변수 i가 여전히 각 바에 BAR1을 추가하는 것을 볼 수 있습니다. 그러나 변수 ii는 각 BAR에 여러 번 추가됩니다.

  • 매각 가격 모델 클로시 프라이스 모델은 K 라인 BAR가 끝나면 한 번씩 전략 논리를 실행하기 때문이다. 따라서 클로시 프라이스 모델에서는 역사 K 라인 단계와 실시간 K 라인 단계가varvarip선언된 변수는 위의 예제에서 증가하는 것과 완전히 일치합니다. 모든 K줄에 BAR가 1로 증가합니다.

다양성

varip (var intrabar persist) 은 분배 및 한 번에 초기화되는 변수에 사용되는 키워드이다. var 키워드와 유사하지만 varip 선언을 사용하는 변수는 실시간 K줄 업데이트 사이에 값을 유지한다.

varip variable_name = expression

설명:

  • variable_name- Pine 스크립트에서 허용되는 사용자 변수의 모든 이름 (대문자와 소문자를 포함할 수 있으며, 숫자와 하부선을 포함할 수 있지만 숫자로 시작될 수 없습니다.)
  • expression- 어떤 수학적 표현식도 일반 변수를 정의하는 것과 같다. 첫 번째 K줄에서, 표현식은 한 번만 계산하고 변수에 한 번만 할당한다.

예를 들어

// varip
varip int v = -1
v := v + 1
plot(v)

var를 사용하면 그래프가 bar_index의 값을 반환한다. varip를 사용하면 역사 K줄에서 동일한 동작이 발생하지만 실시간 K줄에서는 그래프가 하나의 값을 반환하고, 이 값은 각 틱에 대해 하나씩 증가한다.

참고자료float,int,bool,string과 같은 간단한 타입과 그 타입의 배열과 함께만 사용 가능합니다.

사실

부르 타입의 변수의 값을 표시하거나,비교또는논리연산자가 계산할 수 있는 값이다.

참고자료참고로비교연산자와논리연산자의 설명.

안녕하세요 bool

거짓

부르형 변수의 값과 비교 동작, 논리 동작의 결과를 나타냅니다.

참고자료참고로비교연산자와논리연산자의 설명.

안녕하세요 bool

만약

if 문장은 표현 조건이 충족될 때 실행되어야 하는 문장 블록을 정의한다. 4판 파이인 스크립트 언어는 당신이 else if 문법을 사용할 수 있도록 한다.

보편적인 암호는 다음과 같습니다:

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

참고자료 var_declarationX- 이 변수는 if 문장의 값을 얻습니다condition- 조건이 true라면 문장 블록을 사용합니다then이 글의 논리는var_decl_then0var_decl_then1etc) ⇒ false 조건이 있는 경우 문장 블록을 사용합니다.else if또는else이 글의 논리는var_decl_else0var_decl_else1그리고 그 다음에는return_expression_then , return_expression_else- 모듈의 마지막 표현식 또는 블록else의 표현식이 문장의 최종 값을 반환한다. 변수가 마지막에 선언되면 그 값은 결과 값이 된다.

if 문장의 반환 값의 종류는return_expression_then그리고return_expression_else타입. 트레이딩뷰에서 실행될 때, 그들의 타입이 일치해야 합니다:else 블록에 문자열 값을 가지고 있을 때, then 문장 블록에서 정수를 반환하는 것은 불가능합니다.FMZ에서 실행될 때, 다음 예는 오류를 반환하지 않습니다. y값이 "open"으로 설정되면, 플롯 그래프가 그려지는 값은 n/a입니다.

예를 들어

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

빗나갈 수 있습니다.else블록. 이 경우, 조건이 false라면 var_declarationX 변수에??empty 문값을 부여한다 (na、false 또는??):

예를 들어

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

여러??else if 블록을 사용하거나 전혀 사용할 수 있다. ▲then,??else if,??else if의 블록은 네 개의 공간으로 이동된다:

예를 들어

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

무시할 수 있습니다.if문장의 결과값 ((var_declarationX=을 생략할 수 있다) ). 만약 당신이 표현의 부작용을 필요로 한다면 유용할 수 있다. 예를 들어 전략 거래에서:

예를 들어

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

만약 문장은 서로 포함될 수 있습니다.

예를 들어

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

에 대해

'for' 구조는 여러 문장을 반복적으로 실행할 수 있도록 허용합니다:

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- return_expression의 값으로 지정되는 선택 가능한 변수 선언.counter- 회전 카운터 값의 변수를 저장하고 회전 반복마다 1 또는 step_num 값을 증가/ 감소시킨다.from_num- 카운터의 시작값. series int/float 값/표현을 사용하도록 허용한다.to_num- 카운터의 최종값. 카운터가 to_num보다 크거나 from_num > to_num의 경우 to_num보다 작을 때 루프를 중단한다. series int/float thresholds/expressions를 사용할 수 있지만 루프의 첫 번째 반복에서만 평가된다.step_num- 카운터의 증가/ 감소 값. 그것은 선택적이다. 기본 값은 +1 또는 -1입니다. 그것은 from_num 또는 to_num 중 가장 큰 값에 따라 다릅니다. 값이 사용되면 카운터는 또한 from_num 또는 to_num 중 가장 큰 값에 따라 증가/ 감소합니다. 따라서 step_num의 +/- 기호는 선택적입니다.statements | continue | break- 임의의 수의 문장, 또는 4개의 공간 또는 한 개의 탭으로 축소된 continue 또는 break 키워드return_expression- 루프의 반환 값은 존재한다면 var_declaration의 변수에 할당된다. 만약 루프가 continue 또는 break 키워드로 인해 종료된다면, 루프의 반환 값은 루프의 종료 전에 할당된 마지막 변수의 반환 값이다.continue- 회전에서만 사용할 수 있는 키워드. 그것은 회전의 다음 반복이 실행되도록 합니다.break- '회복'의 키워드

예를 들어

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

안녕하세요 for...in while

내... 내

for...in구조는 배열의 각 요소에 대해 여러 개의 문장을 반복적으로 실행하도록 허용한다. 그것은 어떤 변수와 함께 사용될 수 있다:array_element또는 두 개의 매개 변수와 함께 사용할 수 있습니다:[index, array_element]^ 두 번째 형태는 루킹의 기능에 영향을 미치지 않는다 ^ 원소군의 첫 번째 변수에서 현재 반복된 인덱스를 추적한다 ^

[var_declaration =] for array_element in array_id
    statements | continue | break
    return_expression

[var_declaration =] for [index, array_element] in array_id
    statements | continue | break
    return_expression

var_declaration- 선택 가능한 변수 선언이 루크에 부여됩니다return_expression이 문서는index- 현재 반복 인덱스의 선택 가능한 변수를 추적한다. ▲ 인덱스는 0에서 시작된다. ▲ 변수는 루킹체에서 변하지 않는다. ▲ 사용 시에는 하나의 포함도 포함되어야 한다.array_element이 부분의 본문은array_element- 루프에서 처리해야 할 각각의 연속적 배열 요소의 변수를 포함합니다. 이 변수는 루프체에서 변하지 않습니다.array_id- 회전 반복 배열 ID.statements | continue | break- 임의의 수의 문장, 또는 4개의 공간 또는 한 개의 탭으로 축소된 continue 또는 break 키워드return_expression- 회로의 반환값은var_declaration속 변수, 만약 존재한다면. 만약 루그가 continue 또는 break 키워드 때문에 탈퇴한다면, 루그의 반환 값은 루그가 탈퇴하기 전에 마지막으로 부여된 변수이다.continue- 회전에서만 사용할 수 있는 키워드. 그것은 회전의 다음 반복이 실행되도록 합니다.break- '회복'의 키워드

루프 내에서 배열의 요소 또는 크기를 변경할 수 있습니다. 여기서는for...in각 K줄에 얼마나 많은 K줄의 OHLC가 close의 SMA보다 크는지 결정하기 위한 단변수 형태:

예를 들어

// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
    int result = 0
    for currentElement in array
        if currentElement > value
            result += 1
        result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))

여기 우리는 for...in의 두 개의 변수 형태를 사용해서isPos그 값은true그리고 그들은 우리의valuesArray대수에서 대응값은 현재입니다:

예를 들어

// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)  

for [index, value] in valuesArray
    if value > 0
        array.set(isPos, index, true)  

if barstate.islastconfirmedhistory
    runtime.log(str.tostring(isPos))

안녕하세요 for while array.sum array.min array.max

한동안

while문장은 로컬 코드 블록의 조건을 반복하도록 허용합니다.

variable_declaration = while boolean_expression
    ...
    continue
    ...
    break
    ...
    return_expression

설명:variable_declaration- 선택 가능한 변수 선언.return expression이 변수에 초기화 값을 부여할 수 있습니다.boolean_expression- true가 되면 실행합니다while문장의 로컬 블록. false가 되면,while문장 후에 스크립트를 실행합니다.continue - continue키워드는 다음 반복으로 순환 브랜치를 유도합니다.break - break키워드는 루프를 종료합니다. 스크립트의 실행은while이 문장들은 문장을 마치고 다시 시작합니다.return_expression- 제공while문장이 반환하는 값의 선택 라인.

예를 들어

// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter   = i_n
int factorial = 1
while counter > 0
    factorial := factorial * counter
    counter   := counter - 1

plot(factorial)

참고자료초기while행 뒤에 있는 로컬 코드 블록은 네 개의 공간 또는 한 표기 문자로 축소되어야 합니다.while이 모든 것은while다음의 풀 표현식은 결국 false가 되어야 합니다.break

전환

스위치 오퍼레이터는 조건과 표현의 값에 따라 컨트롤을 몇 가지 문구 중 하나로 옮깁니다.

[variable_declaration = ] switch expression
    value1 => local_block
    value2 => local_block
    ...
    => default_local_block

[variable_declaration = ] switch
    boolean_expression1 => local_block
    boolean_expression2 => local_block
    ...
    => default_local_block

이 글은 이 글의 제목과 같은 글입니다.

예를 들어

// Switch using an expression

string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])

float ma = switch i_maType
    "EMA" => ta.ema(close, 10)
    "SMA" => ta.sma(close, 10)
    "RMA" => ta.rma(close, 10)
    // Default used when the three first cases do not match.
    => ta.wma(close, 10)

plot(ma)

이 글은 이쪽에서 읽었습니다.

예를 들어

strategy("Switch without an expression", overlay = true)

bool longCondition  = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

switch
    longCondition  => strategy.entry("Long ID", strategy.long)
    shortCondition => strategy.entry("Short ID", strategy.short)

값을 반환합니다.실행되는 로컬 문장 블록의 마지막 표현식의 값.

참고자료실행할 수 있습니다.local_block예를 들어default_local_block그 중 하나는 ᅳdefault_local_block그리고=>표시가 함께 입력되고, 전 블록이 실행되지 않는 경우에만 실행됩니다.switch문장의 결과는 변수에 할당되며 지정되지 않습니다.default_local_block실행되지 않으면local_block이 문장이 다시 돌아옵니다.naᅳ할 것입니다switch이 문장의 결과가 변수에 할당되면, 모든local_block예를 들어, 같은 타입의 값을 반환해야 합니다.

안녕하세요 if ?:

시리즈

series는 데이터 시리즈 타입을 나타내는 키워드이다.series키워드는 보통 불필요합니다.

연산자

=

변수를 부여하는 데 사용되지만 변수를 선언할 때만 사용된다.

:=

좌측 변수에 부여하는 부여 연산자. 이전에 선언된 변수에 부여하기 위해 사용된다.

!=

어떤 종류의 표현식에도 적용될 수 있습니다.

expr1 != expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

%

모전수 ((진수 미적수) ᅳ 숫자의 표현식에 적용된다.ᅳ

expr1 % expr2

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

참고자료파인 스크립트에서, 정수들의 잔수를 계산할 때, 상자는 절단된다. 즉, 그것을 사각형으로 다섯으로 세어 최소의 절대값에 넣는다. 얻은 값은 배당과 동일한 기호를 가지고 있다.

예제: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1。

%=

모그먼트 지표는 숫자 표현식에 쓰인다.

expr1 %= expr2

예를 들어

// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

*

곱셈은 ≠ 곱셈을 뜻한다.

expr1 * expr2

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

*=

곱셈 지표는 숫자 표현식에 사용됩니다.

expr1 *= expr2

예를 들어

// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

+

추가 또는 단위 정수. 숫자 표현식 또는 문자열에 적용된다.

expr1 + expr2
+ expr

값을 반환합니다.문자열의 이진성+expres1과 expres2의 합을 반환합니다 숫자는 정수 또는 부동 소수점 값, 또는 일련의 값을 반환합니다: 이분법 +'는 expres1 + expres2를 반환한다. 원자 + 원자 는 expr (원자 연산자 대칭에 어떤 내용도 추가하지 않는다) 를 반환한다.

참고자료숫자를 가진 수학적 연산자와 변수 열을 사용할 수 있다. 숫자 열을 사용하는 경우, 연산자는 요소에 적용된다.

+=

곱셈 지표는 숫자 표현식이나 문자열에 적용됩니다.

expr1 += expr2

예를 들어

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

값을 반환합니다.문자열의 경우, expres1과 expres2의 연쇄를 반환한다. 숫자의 경우, 정수 또는 부동 소수점 값을, 또는 일련의 값을 반환한다.

참고자료숫자를 가진 수학적 연산자와 변수 열을 사용할 수 있다. 숫자 열을 사용하는 경우, 연산자는 요소에 적용된다.

-

미분법 또는 단적 음수.

expr1 - expr2
- expr

값을 반환합니다.전체 또는 유동점 값, 또는 일련의 값을 반환합니다: 이분법 +'는 expres1 빼기 expres2를 반환한다. 1원-이 식은 'expr'의 부정식을 반환합니다.

참고자료숫자를 가진 수학적 연산자와 변수 열을 사용할 수 있다. 숫자 열을 사용하는 경우, 연산자는 요소에 적용된다.

-=

소수법칙 지칭.

expr1 -= expr2

예를 들어

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

/

예외는 △ 숫자의 표현식에 적용됩니다.

expr1 / expr2

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

/=

부수 지정.. 숫자 표현식에 적용된다.

expr1 /= expr2

예를 들어

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

값을 반환합니다.정수 또는 유동점 값, 또는 일련의 값.

<

더 작다. 숫자 표현식에 적용된다.

expr1 < expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

<=

더 작거나 같다. 숫자 표현식에 적용된다.

expr1 <= expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

==

이 표현은 어떤 종류의 표현에도 적용될 수 있습니다.

expr1 == expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

=>

'=>' 연산자는 사용자 정의 함수 선언 및switch이 문장은

함수 선언 문법은 다음과 같습니다.

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

1개<local_block>0 또는 그 이상의 파인 문장입니다.<function_result>변수, 표현식, 또는 모음입니다.

예를 들어

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

참고자료사용자 설명서의 선언 함수 및 스크립트 라이브러리 페이지에서 사용자 정의 함수에 대한 자세한 정보를 얻을 수 있습니다.

>

더 큰. 숫자의 표현식에 적용됩니다.

expr1 > expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

>=

더 크거나 같다.

expr1 >= expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

?:

삼중 조건 연산자.

expr1 ? expr2 : expr3

예를 들어

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

값을 반환합니다.만약 express1이 true로 평가되면 express2이 true로 평가된다. 그렇지 않으면 express3이다. 0과 NaN+, Infinity,-Infinity의 값은 false로 간주되며 다른 값은 true이다.

참고자료만약 당신이 그것을 필요로 하지 않는다면, na를 else의 가지로 사용하십시오. 두 개 또는 그 이상의?: 연산자를 사용하여 스위치 과 유사한 문장을 구현할 수 있습니다 ( 위의 예제를 참조하십시오). 숫자를 가진 수학적 연산자와 변수 열을 사용할 수 있다. 숫자 열을 사용하는 경우, 연산자는 요소에 적용된다.

안녕하세요 na

[]

일련 하위 표기 ▲Expr1 시리즈의 이전 값에 대한 액세스를 제공합니다 ▲Expr2는 지난 k줄의 숫자이며, 숫자가 되어야 합니다 ▲플로버는 하위로 오차됩니다 ▲

expr1[expr2]

예를 들어

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

값을 반환합니다.여러 가지 값들이 있습니다.

안녕하세요 math.floor

그리고

논리 AND는 부르 표현식에 적용된다.

expr1 and expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

또는

논리 OR↑는 풀 표현식에 적용된다.

expr1 or expr2

값을 반환합니다.부르 값, 또는 부르 값의 일련.

아니

논리적인 역 (==NOT==) 은 풀 표현에 적용된다.

not expr1

값을 반환합니다.부르 값, 또는 부르 값의 일련.

데이터 타입 키워드

bool

변수 또는 파라그램을 명시적으로 선언하기 위해 사용된 bool () 타입의 키워드. "Bool" 변수의 값은 true, false 또는 na가 될 수 있다.

예를 들어

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

참고자료변수 선언에서 타입을 명시적으로 언급하는 것은 선택 사항이며, 이는 na로 초기화되지 않는 한이다. 타입 시스템의 사용자 설명서 페이지에서 파이인 타입에 대한 자세한 정보를 참조하십시오.

안녕하세요 var varip int float color string true false

int

변수 또는 파라미터를 명시적으로 선언하는 int (진수) 타입의 키워드.

예를 들어

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

참고자료변수 선언에서 타입을 명시적으로 언급하는 것은 선택 사항이며, 이는 na로 초기화되지 않는 한이다. 타입 시스템의 사용자 설명서 페이지에서 파이인 타입에 대한 자세한 정보를 참조하십시오.

안녕하세요 var varip float bool color string

플라트

변수 또는 파라미터를 명시적으로 선언하는 float (浮点) 타입의 키워드.

예를 들어

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

참고자료변수 선언에서 타입을 명시적으로 언급하는 것은 선택적이지만, na로 초기화되지 않는 경우이다.

안녕하세요 var varip int bool color string

문자열

변수 또는 파라미터를 명시적으로 선언하는 "string" 타입의 키워드.

예를 들어

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

참고자료변수 선언에서 타입을 명시적으로 언급하는 것은 선택 사항이며, 이는 na로 초기화되지 않는 한이다. 타입 시스템의 사용자 설명서 페이지에서 파이인 타입에 대한 자세한 정보를 참조하십시오.

안녕하세요 var varip int float bool str.tostring str.format

색상

변수 또는 파라미터를 명시적으로 선언하는 "color" 타입의 키워드.

예를 들어

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

참고자료컬러 문자에는 다음과 같은 형식이 있습니다: #RRGGBB 또는 #RRGGBBAA;; 글자는 00에서 FF까지의 16진수를 나타냅니다. (0에서 255까지의 10진수), RR,GG 및 BB는 색상의 빨간색, 녹색 및 파란색 분자의 값입니다. AA는 색상 투명성 (또는 알파 분자) 의 선택값이며, 00은 보이지 않으며 FF는 투명하지 않습니다. AA가 제공되지 않은 경우 FF를 사용합니다. 변수 선언에서 타입을 명시적으로 언급하는 것은 선택 사항이며, 이는 na로 초기화되지 않는 한이다. 타입 시스템의 사용자 설명서 페이지에서 파이인 타입에 대한 자세한 정보를 참조하십시오.

안녕하세요 var varip int float string color.rgb color.new

배열

변수 또는 파라미터를 명시적으로 선언하는 배열 타입의 키워드.array.new<type>,array.from함수는 배열 개체 (또는 ID) 를 만듭니다.

예를 들어

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

참고자료배열 객체는 항상 시리즈의 형식이다.

안녕하세요 var array.new array.from

내장 함수

함수를 호출할 때 매개 변수를 전송할 수 있으며, 매개 변수의 위치에서 직접 매개 변수를 전송할 수 있으며, 혼합 사용을 지원합니다. 예를 들어:

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

파라미터 이름 부여를 지정한 후, 변수를 직접 파라미터로 전달할 수 없으며, 이후의 파라미터는 파라미터 이름 부여의 형태로 작성되어야 한다.

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

기간

시간 프레임.초에서

이 자료는timeframe변수의 시간 주기는 초로 변환됩니다.

timeframe.in_seconds(timeframe)

예를 들어

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

값을 반환합니다. timeframeK줄의 세컨드 수의 int를 나타냅니다.

매개 변수

  • timeframe(simple string) 시간주기↑ 선택지↑ 기본값은 timeframe.period。

참고자료이 문제에 대해timeframe>= 1M 함수는 한 달의 30.4167 (365/12) 일일 기준으로 계산된 초수이다.

안녕하세요 input.timeframe timeframe.period

ticker.heikinashi

코드 아이디커를 생성하여 평균 K줄값을 매끄럽게 요청합니다.

ticker.heikinashi(symbol)

예를 들어

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

값을 반환합니다. 股票代码的字符串值,可以提供给request.security函数。

매개 변수

  • symbol(simple string) 상품 코드 식별자.

안녕하세요 syminfo.tickerid syminfo.ticker request.security

요청

request.data

외부 데이터를 요청합니다.

request.data(url, attribute)

예를 들어

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

값을 반환합니다.매개 변수attribute지정된 데이터 시리즈.

매개 변수

  • url(simple string) 요청된 데이터 소스의 url, 데이터 소스가 응답하는 데이터 형식은 다음과 같은 요구 사항을 충족해야 합니다 (적어도 time、data 속성을 포함):{"data": [], "schema": ["time", "data"]}◎ 예를 들어 데이터 포맷을 참조하십시오:
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) 속성 이름을 지정하여 원하는 데이터를 반환합니다. 예를 들어:"$.add_investor", 사용$.앞자리로, 속성 이름은 요청된 데이터 소스에 응답된 데이터의 data 필드의 속성과 일치합니다.

request.security

다른 품종/해상도를 요구합니다.

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

예를 들어

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

값을 반환합니다.요구된 시리즈

매개 변수

  • symbol(simple string) 상품 코드.
  • timeframe(simple string) 시간주기. 빈 문자열은 그래프의 현재 시간주기로 해석됩니다.
  • expression(series int/float/bool/color) 는 request.security에서 계산을 호출하여 표현식을 반환할 수 있다. 그것은 일련 또는 일련으로 변환될 수 있는 요소를 포함하는 요소를 포함하는 집합이 될 수 있다.
  • gaps(barmerge_gaps) 요청된 데이터에 대한 결합 정책 ((데이터가 자동으로 주요 일련의 OHLC 데이터와 결합되도록 요구한다) ). 가능한 값: barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - 요청된 데이터와 가능한 간격이 결합된다. barmerge.gaps_off - 요청된 데이터가 연속적으로 끊이지 않고 결합되며 모든 간격은 이전 가장 최근의 기존 값을 채우며. 기본값은 barmerge.gaps_off。
  • lookahead(barmerge_lookahead) 요청된 데이터의 결합 정책을 제공합니다. 가능한 값: barmerge.lookahead_on, barmerge.lookahead_off. 버전 3부터 기본 값은 barmerge.lookahead_off입니다. 참고로 동작은 실시간과 동일하지만 역사에서 다릅니다.
  • ignore_invalid_symbol(const bool) 선택 가능한 변수이다. 지정된 상품이 발견되지 않으면 함수의 동작을 결정한다. 만약 false라면 스크립트가 멈추고 실행 시 오류를 반환한다. 만약 true라면 함수가 na를 반환하고 실행을 계속한다. 기본값은 false이다.
  • currency(simple string) 상품의 화폐 관련 값 (예를 들어 OHLC) 을 변환한 화폐. 그리고 변환된 값에 따라 expression?? 를 계산한다. 사용된 변환율은 FX_IDC 쌍의 전날의 일일 환율 (수준에 비해 계산되는 K선) 에 기초한다. 선택된다. 기본값은 syminfo.currency이다. 가능한 값: ISO 4217 형식 화폐 코드 (예를 들어 USD) 를 가진 3자 문자열 또는 currency.* 이름 공간의 상수 중 하나, 예를 들어 currency.USD이다.

참고자료이 기능을 사용하는 파이너스크립트 코드는 역사 기록과 실시간 데이터에 대해 다른 계산을 할 수 있습니다.만약 당신이 요청한 상품에 대한 추가 매개 변수를 지정하고 싶다면, 예를 들어 거래 시간 또는 조정 유형,您可以使用ticker.new() 함수입니다. 이 함수에 점의 오차를 전달하기 위해 ticker 변수를 사용할 수 없습니다. 당신은 을 사용할 수 있습니다.ticker.new변수 또는 주식 코드에서 문자열 표현 형태, 예를 들어 AAPL+MSFT*TSLA.현재 한 스크립트에는 최대 40개의 request.security 호출이 가능합니다. 이 변수/함수 사용으로 지표가 재구성될 수 있음을 참고하십시오. 해상도 매개 변수는 다음과 같은 값을 허용합니다. 1S, 5S, 15S, 30S - 초 간격 (표시 주기 는 요청 된 주기로 작거나 같아야 한다) 1에서 1440분까지 1D에서 365D까지 1W에서 52W까지 몇 주 1M에서 12M까지 몇 달

안녕하세요 syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

만약source문자열을 포함합니다.str자막 문자열은 true를 반환하고, 그렇지 않으면 false를 반환합니다.

str.contains(source, str)

예를 들어

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

값을 반환합니다.만약source문자열에서 찾을 수 있습니다.str,는 true이고, 그렇지 않으면 false입니다.

매개 변수

  • source(series string) 소스 문자열
  • str(series string) 검색하려는 하위 문자열.

안녕하세요 str.pos str.match

str.endswith

만약source문자열은str중에서 지정된 하위 문자열의 끝은 true, 그렇지 않으면 false를 반환한다.

str.endswith(source, str)

값을 반환합니다.만약source문자열은str중간에 지정된 하위 문자열의 끝은 true, 그렇지 않으면 false이다.

매개 변수

  • source(series string) 소스 문자열
  • str(series string) 검색하려는 하위 문자열.

안녕하세요 str.startswith

str.startswith

만약source문자열은str중에서 지정된 하위 문자열의 시작은 true, 그렇지 않으면 false를 반환한다.

str.startswith(source, str)

값을 반환합니다.만약source문자열은str이 중에서 지정된 하위 문자열의 시작은 true, 그렇지 않으면 false이다.

매개 변수

  • source(series string) 소스 문자열
  • str(series string) 검색하려는 하위 문자열.

안녕하세요 str.endswith

str.substring

이 문자는 새로운 문자열을 반환합니다.source문자열의 하위 문자열.begin_pos지정된 인덱스의 문자가 시작되고source문자열의 end_pos - 1

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

예를 들어

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

값을 반환합니다.소스 문자열에서 추출된 하위 문자열.

매개 변수

  • source(series string) 에서 자열을 추출합니다.
  • begin_pos(series int) 를 추출한 하위 문자열의 시작 위치. 그것은 독점적 ( 추출한 하위 문자열에는 그 위치의 문자가 포함되어 있습니다.) 이다.
  • end_pos(series int) 종료 위치. 그것은 독점적이다. (수출된 문자열은 해당 위치의 문자를 포함하지 않는다.)source문자열의 길이는.

참고자료문자열 인덱스는 0에서 시작됩니다.begin_pos이 값은end_pos, 함수는 빈 문자열을 반환합니다.

안녕하세요 str.contains str.pos str.match

str.tonumber

str.tonumber(string)

값을 반환합니다.유효한 숫자를 포함하면 문자열의 유동점 형식이고 그렇지 않으면 na이다.

매개 변수

  • string(series string) int 또는 float의 문자열 표현식.

str.format

형식 문자열과 값을 형식 문자열로 변환한다. 형식 문자열은 문자 텍스트와 각각의 형식 값의 대괄호 {} 내의 점수를 포함할 수 있다. 각각의 점수는 그것의 필수 매개 변수를 대체하는 인덱스를 포함한다. (0부터 시작) 그리고 선택적인 형식 설명자를 포함한다. 인덱스는 매개 변수가 str.format 매개 변수 목록에 있는 위치를 나타낸다.

str.format(formatString, arg0, arg1, ...)

예를 들어

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

값을 반환합니다.형식화 된 문자열.

매개 변수

  • formatString(series string) 형식의 문자열.
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) 는 포맷해야 하는 값이다.

참고자료인용되지 않은 스타일의 모든 괄호는 균형을 유지해야 한다. 예를 들어, ab {0} de"와 "ab } de"는 유효한 스타일이지만, "ab {0} de, ab } de"와 {"는 유효하지 않다.

str.length

문자열에 있는 문자수와 일치하는 정수를 반환합니다.

str.length(string)

값을 반환합니다.소스 문자열에 있는 문자들의 수.

매개 변수

  • string(series string) 소스 문자열

str.lower

모든 글자가 소문자로 변환된 새로운 문자열을 반환합니다.

str.lower(source)

값을 반환합니다.모든 글자가 새 줄무늬로 작아졌습니다.

매개 변수

  • source(series string) 변환하려는 문자열.

안녕하세요 str.upper

str.upper

모든 문자를 대문자로 변환한 새로운 문자열을 반환합니다.

str.upper(source)

값을 반환합니다.모든 글자가 새로운 문자열로 대문자로 변환됩니다.

매개 변수

  • source(series string) 변환하려는 문자열.

안녕하세요 str.lower

str.match

만약 일치한다면regex정형표현은 반환됩니다.source문자열의 새로운 하위 문자열, 그렇지 않으면 na를 반환합니다.

str.match(source, regex) 

예를 들어

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

더 많은

우우오안어떻게 하면 여러 거래가 동시에 실행될 수 있을까요?

가벼운 구름JS처럼 트레이딩을 통해 트레이딩을 할 수 있나요? 감사합니다.

리사20231자세한 문서 제공 감사합니다.

예술오케이! 이 파이인 스크립트는 어떻게 okex의 모티브 디스크를 플랫폼에서 사용할 수 있을까요?

예술이것은 TradingView 플랫폼의 전략을 직접 발명가 플랫폼에 복사하여 사용할 수 있는 것과 같습니다.

작은 꿈PINE 언어는 단종 정책을 수행할 수 있으며, 다종 정책은 파이썬, 자바스크립트, C++로 작성하는 것이 좋습니다.

작은 꿈오, 네, OKX는 특이하게도, 그들의 아날로그 환경과 실제 환경은 같은 주소를 가지고 있지만 다른 곳에서 차이를 만듭니다. 그래서 아날로그 디스크로 전환하는 데 기본 주소를 바꿀 방법이 없습니다.

가벼운 구름okx 모형 디스크는 사용할 수 없습니다.

작은 꿈이 다채로운 구조의 문제는 해결되지 않습니다. 각 거래소의 인터페이스가 다르기 때문에, 인터페이스 주파수 제한이 다르기 때문에 많은 문제가 발생할 수 있습니다.

작은 꿈좋은 소식입니다. 이 제안해주셔서 감사합니다.

가벼운 구름JS와 혼용하는 것이 가장 좋다고 느껴지고, JS는 다양한 거래 방식에 더 잘 적응할 수 있습니다.

트렌드 사냥꾼그리고 그 다음에는 다양한 품종을 고려할 것인가? 매매 가격은 모든 품종에 걸쳐 적용됩니다.

작은 꿈이 모든 것은 매우 무례합니다.

가벼운 구름좋은, 감사합니다.

작은 꿈안녕하세요, PINE 언어 전략은 한 가지 종류만 사용할 수 있습니다.

작은 꿈이 문서는 이 문서를 계속 개선해 나갈 것입니다.

작은 꿈네, 그렇습니다.

작은 꿈PINE 템플릿 클래식 라이브러리, 매개 변수에 스위치 거래소의 기본 주소를 설정할 수 있다. 문서의 시작: PINE 언어 거래 클래식 라이브러리 템플릿 매개 변수.