종합 자동화 거래 이동 평균 무지개 전략

저자:차오장, 날짜: 2023-11-13 10:44:41
태그:

img

전반적인 설명

종합 자동화 거래 이동 평균 무지개 전략은 전형적인 멀티 타임프레임 이동 평균 조합 전략이다. 트렌드 방향을 결정하고 자동화 거래를 구현하기 위해 엔트리, 스톱 로스 및 영업 조건을 정의하기 위해 서로 다른 기간을 가진 12 개의 이동 평균을 사용합니다. 이 전략은 트렌드를 자동으로 식별 할 수 있으며 위험을 제어하기위한 완전한 스톱 로스 메커니즘을 갖추고 있습니다.

원칙

이 전략은 12개의 이동 평균을 사용하며, 3, 5, 8의 기간을 포함하여 55까지 이동 평균 유형은 EMA, SMA, RMA 등에서 선택할 수 있습니다. 전략은 먼저 짧은 기간과 긴 기간 이동 평균 (1-4 기간 라인 및 5-8 기간 라인) 사이의 배열 관계를 판단하여 상승 추세 또는 하락 추세 환경인지 결정합니다.

상향 트렌드에서, 가격이 이전 하위점과 일치하는 이동 평균을 뚫으면, 그것은 긴 신호로 결정됩니다. 스톱 손실은 이전 하위점과 일치하는 이동 평균에 배치되며, 이익은 중지 손실의 1.6 배입니다. 하위 트렌드에서, 가격이 이전 고점에 대응하는 이동 평균을 뚫면, 그것은 짧은 신호로 결정됩니다. 스톱 손실은 이전 고점에 대응하는 이동 평균에 배치되며, 이익은 중지 손실의 1.6 배입니다.

이 전략은 또한 트렌드 역전 탐지 기능이 있습니다. 보유 기간 동안, 짧은 기간 이동 평균 배열이 변경되고 가격이 가장 최근의 최고 또는 최저 지점을 초과하면, 트렌드 역전이 발생했을 수 있음을 결정합니다. 이 시점에서 현재 위치에서 나와 반대 방향으로 위치로 들어가 새로운 최고 또는 최저 지점을 스톱 로스로 사용하여 수익을 취합니다.

장점

  1. 이 전략은 트렌드 방향을 더 잘 결정하기 위해 다중 시간 프레임 분석을 종합적으로 적용합니다.

  2. 이동 평균 순서적/반면적 배열을 추가하면 변화 시장에 의해 오해를 피하는 데 도움이됩니다.

  3. 이 전략은 모든 거래의 위험을 효과적으로 제어하기 위해 완전한 스톱 로스 메커니즘을 가지고 있습니다.

  4. 이 전략은 트렌드 반전을 감지하여 역전 기회를 파악하고 시스템 위험을 줄입니다.

  5. 이 전략은 유연한 매개 변수 설정을 가지고 있으며 이동 평균 기간과 유형을 사용자 정의 할 수 있습니다.

  6. 이 전략은 최대 수익을 확보하기 위해 후속 스톱 손실을 사용합니다.

위험성

  1. 여러 이동 평균 조합 전략, 매개 변수 설정은 성능에 영향을 미치며 최적화 테스트가 필요합니다.

  2. 이동 평균은 변화 시장에서 잘못된 신호를 줄 수 있으므로 매개 변수를 조정하거나 일시적으로 거래를 중단해야합니다.

  3. 약간의 지연이 있고, 트렌드 전환점에 놓칠 기회의 위험이 있습니다.

  4. 다른 기술 지표를 관찰하고 중요한 지원 수준 근처에 단축을 피해야 합니다.

  5. 시스템적 위험은 모니터링이 필요하고, 반전 탐지로는 이러한 위험을 완전히 피할 수 없습니다.

  6. 마감 컨트롤은 추가 메커니즘이 필요합니다. 동적 위치 크기를 고려하십시오.

최적화 방향

  1. 최적의 조합을 찾기 위해 다른 이동 평균 유형과 매개 변수 설정을 테스트합니다.

  2. 역전 탐지 메커니즘을 최적화하고 더 정확한 역전 트리거 조건을 설정합니다.

  3. 다이내믹 포지션 사이징을 추가하면 드로다운이 너무 높을 때 포지션 사이즈를 줄일 수 있습니다.

  4. 머신러닝 알고리즘을 적용하여 빅데이터를 사용하여 핵심 점에 대한 판단을 훈련시키는 것을 고려하세요.

  5. 정확도를 높이기 위해 다른 표시 신호를 통합 판단에 포함합니다.

  6. 낮은 상관관계를 사용하여 위험을 다양화하기 위해 다중 거래 포트폴리오를 구축합니다.

요약

종합 자동화 거래 이동 평균 무지개 전략은 전반적으로 트렌드 식별 및 리스크 제어에 강한 능력을 가진 견고한 트렌드 다음 전략입니다. 매개 변수 조정, 동적 위치 사이징 추가 등과 같은 추가 최적화로 매우 실용적인 양적 거래 전략이 될 수 있습니다. 전략 논리는 명확하고 이해하기 쉽습니다. 또한 특정 유연성을 가지고 있으며, 심도 있는 연구, 사용 및 지속적인 개선에 가치가 있습니다.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AugustoErni

//@version=5
strategy('Moving Average Rainbow (Stormer)', overlay=true)

maType                        = input.string('EMA', title='Moving Average Type/Tipo de Média Móvel', options=['EMA', 'SMA', 'RMA', 'WMA', 'HMA', 'VWMA'], tooltip='This option is to select the type of Moving Average that the Rainbow will use./Esta opção é para selecionar o tipo de Média Móvel que o Rainbow utilizará.', group='Moving Averages/Médias Móveis')
maLengthFirst                 = input.int(3, title='MA #1', minval=1, step=1, tooltip='First MA length./Comprimento da primeira MA.', group='Moving Averages/Médias Móveis')
maLengthSecond                = input.int(5, title='MA #2', minval=1, step=1, tooltip='Second MA length./Comprimento da segunda MA.', group='Moving Averages/Médias Móveis')
maLengthThird                 = input.int(8, title='MA #3', minval=1, step=1, tooltip='Third MA length./Comprimento da terceira MA.', group='Moving Averages/Médias Móveis')
maLengthFourth                = input.int(13, title='MA #4', minval=1, step=1, tooltip='Fourth MA length./Comprimento da quarta MA.', group='Moving Averages/Médias Móveis')
maLengthFifth                 = input.int(20, title='MA #5', minval=1, step=1, tooltip='Fifth MA length./Comprimento da quinta MA.', group='Moving Averages/Médias Móveis')
maLengthSixth                 = input.int(25, title='MA #6', minval=1, step=1, tooltip='Sixth MA length./Comprimento da sexta MA.', group='Moving Averages/Médias Móveis')
maLengthSeventh               = input.int(30, title='MA #7', minval=1, step=1, tooltip='Seventh MA length./Comprimento da sétima MA.', group='Moving Averages/Médias Móveis')
maLengthEighth                = input.int(35, title='MA #8', minval=1, step=1, tooltip='Eighth MA length./Comprimento da oitava MA.', group='Moving Averages/Médias Móveis')
maLengthNineth                = input.int(40, title='MA #9', minval=1, step=1, tooltip='Nineth MA length./Comprimento da nona MA.', group='Moving Averages/Médias Móveis')
maLengthTenth                 = input.int(45, title='MA #10', minval=1, step=1, tooltip='Tenth MA length./Comprimento da décima MA.', group='Moving Averages/Médias Móveis')
maLengthEleventh              = input.int(50, title='MA #11', minval=1, step=1, tooltip='Eleventh MA length./Comprimento da décima primeira MA.', group='Moving Averages/Médias Móveis')
maLengthTwelveth              = input.int(55, title='MA #12', minval=1, step=1, tooltip='Twelveth MA length./Comprimento da décima segunda MA.', group='Moving Averages/Médias Móveis')
targetFactor                  = input.float(1.6, title='Target Take Profit/Objetivo de Lucro Alvo', minval=0.1, step=0.1, tooltip='Calculate the take profit factor when entry position./Calcula o fator do alvo lucro ao entrar na posição.', group='Risk Management/Gerenciamento de Risco')
verifyTurnoverTrend           = input.bool(true, title='Verify Turnover Trend/Verificar Tendência de Rotatividade', tooltip='This option checks for a supposedly turnover trend and setup new target (for long is the highest high and for short is the lowest low identified)./Esta opção verifica uma suposta tendência de rotatividade e estabelece um novo objetivo (para long é a máxima mais alta, para short é a mínima mais baixa identificados).', group='Turnover Trend/Rotatividade Tendência')
verifyTurnoverSignal          = input.bool(false, title='Verify Turnover Signal/Verificar Sinal de Rotatividade', tooltip='This option checks for a supposedly turnover signal, closing the current position and opening a new one (for long it will close and open a new for short, for short it will close and open a new for long)./Essa opção verifica um sinal de possível reversão, fechando a posição atual e abrindo uma nova (para long fechará e abrirá uma nova para short, para short fechará e abrirá uma nova para long).', group='Turnover Signal/Rotatividade Sinal')
verifyTurnoverSignalPriceExit = input.bool(false, title='Verify Price Exit Turnover Signal/Verificar Saída de Preço Sinal de Rotatividade', tooltip='This option complements "turnover signal" by veryfing the price if profitable before exiting the current position./Esta opção complementa o "sinal de rotatividade" verificando o preço do lucro antes de sair da posição atual.', group='Turnover Signal/Rotatividade Sinal')

mas(maType, maLengthFirst, maLengthSecond, maLengthThird, maLengthFourth, maLengthFifth, maLengthSixth, maLengthSeventh, maLengthEighth, maLengthNineth, maLengthTenth, maLengthEleventh, maLengthTwelveth) =>
    if (maType == 'SMA')
        [ta.sma(close, maLengthFirst), ta.sma(close, maLengthSecond), ta.sma(close, maLengthThird), ta.sma(close, maLengthFourth), ta.sma(close, maLengthFifth), ta.sma(close, maLengthSixth), ta.sma(close, maLengthSeventh), ta.sma(close, maLengthEighth), ta.sma(close, maLengthNineth), ta.sma(close, maLengthTenth), ta.sma(close, maLengthEleventh), ta.sma(close, maLengthTwelveth)]
    else if (maType == 'RMA')
        [ta.rma(close, maLengthFirst), ta.rma(close, maLengthSecond), ta.rma(close, maLengthThird), ta.rma(close, maLengthFourth), ta.rma(close, maLengthFifth), ta.rma(close, maLengthSixth), ta.rma(close, maLengthSeventh), ta.rma(close, maLengthEighth), ta.rma(close, maLengthNineth), ta.rma(close, maLengthTenth), ta.rma(close, maLengthEleventh), ta.rma(close, maLengthTwelveth)]
    else if (maType == 'WMA')
        [ta.wma(close, maLengthFirst), ta.wma(close, maLengthSecond), ta.wma(close, maLengthThird), ta.wma(close, maLengthFourth), ta.wma(close, maLengthFifth), ta.wma(close, maLengthSixth), ta.wma(close, maLengthSeventh), ta.wma(close, maLengthEighth), ta.wma(close, maLengthNineth), ta.wma(close, maLengthTenth), ta.wma(close, maLengthEleventh), ta.wma(close, maLengthTwelveth)]
    else if (maType == 'HMA')
        [ta.hma(close, maLengthFirst), ta.hma(close, maLengthSecond), ta.hma(close, maLengthThird), ta.hma(close, maLengthFourth), ta.hma(close, maLengthFifth), ta.hma(close, maLengthSixth), ta.hma(close, maLengthSeventh), ta.hma(close, maLengthEighth), ta.hma(close, maLengthNineth), ta.hma(close, maLengthTenth), ta.hma(close, maLengthEleventh), ta.hma(close, maLengthTwelveth)]
    else if (maType == 'VWMA')
        [ta.vwma(close, maLengthFirst), ta.vwma(close, maLengthSecond), ta.vwma(close, maLengthThird), ta.vwma(close, maLengthFourth), ta.vwma(close, maLengthFifth), ta.vwma(close, maLengthSixth), ta.vwma(close, maLengthSeventh), ta.vwma(close, maLengthEighth), ta.vwma(close, maLengthNineth), ta.vwma(close, maLengthTenth), ta.vwma(close, maLengthEleventh), ta.vwma(close, maLengthTwelveth)]
    else
        [ta.ema(close, maLengthFirst), ta.ema(close, maLengthSecond), ta.ema(close, maLengthThird), ta.ema(close, maLengthFourth), ta.ema(close, maLengthFifth), ta.ema(close, maLengthSixth), ta.ema(close, maLengthSeventh), ta.ema(close, maLengthEighth), ta.ema(close, maLengthNineth), ta.ema(close, maLengthTenth), ta.ema(close, maLengthEleventh), ta.ema(close, maLengthTwelveth)]

[ma1, ma2, ma3, ma4, ma5, ma6, ma7, ma8, ma9, ma10, ma11, ma12] = mas(maType, maLengthFirst, maLengthSecond, maLengthThird, maLengthFourth, maLengthFifth, maLengthSixth, maLengthSeventh, maLengthEighth, maLengthNineth, maLengthTenth, maLengthEleventh, maLengthTwelveth)

maTouchPriceTrend(ma1, ma2, ma3, ma4, ma5, ma6, ma7, ma8, ma9, ma10, ma11, ma12, trend) =>
    var float touchPrice = na
    if (trend == 'UPTREND')
        if (low <= ma1 and low >= ma2)
            touchPrice := ma2
        else if (low <= ma2 and low >= ma3)
            touchPrice := ma3
        else if (low <= ma3 and low >= ma4)
            touchPrice := ma4
        else if (low <= ma4 and low >= ma5)
            touchPrice := ma5
        else if (low <= ma5 and low >= ma6)
            touchPrice := ma6
        else if (low <= ma6 and low >= ma7)
            touchPrice := ma7
        else if (low <= ma7 and low >= ma8)
            touchPrice := ma8
        else if (low <= ma8 and low >= ma9)
            touchPrice := ma9
        else if (low <= ma9 and low >= ma10)
            touchPrice := ma10
        else if (low <= ma10 and low >= ma11)
            touchPrice := ma11
        else if (low <= ma11 and low >= ma12)
            touchPrice := ma12
        else
            touchPrice := na
    else if (trend == 'DOWNTREND')
        if (high >= ma1 and high <= ma2)
            touchPrice := ma2
        else if (high >= ma2 and high <= ma3)
            touchPrice := ma3
        else if (high >= ma3 and high <= ma4)
            touchPrice := ma4
        else if (high >= ma4 and high <= ma5)
            touchPrice := ma5
        else if (high >= ma5 and high <= ma6)
            touchPrice := ma6
        else if (high >= ma6 and high <= ma7)
            touchPrice := ma7
        else if (high >= ma7 and high <= ma8)
            touchPrice := ma8
        else if (high >= ma8 and high <= ma9)
            touchPrice := ma9
        else if (high >= ma9 and high <= ma10)
            touchPrice := ma10
        else if (high >= ma10 and high <= ma11)
            touchPrice := ma11
        else if (high >= ma11 and high <= ma12)
            touchPrice := ma12
        else
            touchPrice := na

maMean = ((ma1 + ma2 + ma3 + ma4 + ma5 + ma6 + ma7 + ma8 + ma9 + ma10 + ma11 + ma12) / 12)

isMa1To4Above            = ma1 > ma2 and ma2 > ma3 and ma3 > ma4 ? 1 : 0
isMa1To4Below            = ma1 < ma2 and ma2 < ma3 and ma3 < ma4 ? 1 : 0
isMa5To8Above            = ma5 > ma6 and ma6 > ma7 and ma7 > ma8 ? 1 : 0
isMa5To8Below            = ma5 < ma6 and ma6 < ma7 and ma7 < ma8 ? 1 : 0
isCloseGreaterMaMean     = close > maMean ? 1 : 0
isCloseLesserMaMean      = close < maMean ? 1 : 0
isCurHighGreaterPrevHigh = high > high[1] ? 1 : 0
isCurLowLesserPrevLow    = low < low[1] ? 1 : 0
isMaUptrend              = isCloseGreaterMaMean and isMa5To8Above ? 1 : 0
isMaDowntrend            = isCloseLesserMaMean and isMa5To8Below ? 1 : 0
isUptrend                = isMaUptrend ? 'UPTREND' : na
isDowntrend              = isMaDowntrend ? 'DOWNTREND' : na

curTouchPriceUptrend    = maTouchPriceTrend(ma1, ma2, ma3, ma4, ma5, ma6, ma7, ma8, ma9, ma10, ma11, ma12, isUptrend)
prevTouchPriceUptrend   = curTouchPriceUptrend[1]
curTouchPriceDowntrend  = maTouchPriceTrend(ma1, ma2, ma3, ma4, ma5, ma6, ma7, ma8, ma9, ma10, ma11, ma12, isDowntrend)
prevTouchPriceDowntrend = curTouchPriceDowntrend[1]

isPrevTouchPriceUptrendTouched   = prevTouchPriceUptrend > 0.0 or not na(prevTouchPriceUptrend) ? 1 : 0
isPrevTouchPriceDowntrendTouched = prevTouchPriceDowntrend > 0.0 or not na(prevTouchPriceDowntrend) ? 1 : 0
isPrevTouchedPriceUptrend        = isPrevTouchPriceUptrendTouched and isMaUptrend ? 1 : 0
isPrevTouchedPriceDowntrend      = isPrevTouchPriceDowntrendTouched and isMaDowntrend ? 1 : 0

isPositionFlat  = strategy.position_size == 0 ? 1 : 0

var float positionEntryPrice         = na
var bool positionIsEntryLong         = false
var bool positionIsEntryShort        = false
var float longPositionHighestHigh    = na
var float shortPositionLowestLow     = na
var float stopLossLong               = na
var float stopLossShort              = na
var float targetLong                 = na
var float targetShort                = na
var bool isTurnoverTrendLongTrigger  = na
var bool isTurnoverTrendShortTrigger = na

isPositionLongClose  = na(positionEntryPrice) and not positionIsEntryLong ? 1 : 0
isPositionShortClose = na(positionEntryPrice) and not positionIsEntryShort ? 1 : 0
isLongCondition      = isMaUptrend and isCurHighGreaterPrevHigh and isPrevTouchedPriceUptrend ? 1 : 0
isShortCondition     = isMaDowntrend and isCurLowLesserPrevLow and isPrevTouchedPriceDowntrend ? 1 : 0
longTurnoverExit     = verifyTurnoverSignal and verifyTurnoverSignalPriceExit ? (verifyTurnoverSignal and isLongCondition and positionIsEntryShort and close < positionEntryPrice) : verifyTurnoverSignal ? (verifyTurnoverSignal and isLongCondition and positionIsEntryShort) : na
shortTurnoverExit    = verifyTurnoverSignal and verifyTurnoverSignalPriceExit ? (verifyTurnoverSignal and isShortCondition and positionIsEntryLong and close > positionEntryPrice) : verifyTurnoverSignal ? (verifyTurnoverSignal and isShortCondition and positionIsEntryLong) : na

if (isPositionFlat)
    positionEntryPrice          := na
    positionIsEntryLong         := false
    positionIsEntryShort        := false
    stopLossLong                := na
    targetLong                  := na
    stopLossShort               := na
    targetShort                 := na
    isTurnoverTrendLongTrigger  := na
    isTurnoverTrendShortTrigger := na

if ((isLongCondition and isPositionLongClose) or longTurnoverExit)
    positionEntryPrice          := close
    positionIsEntryLong         := true
    positionIsEntryShort        := false
    longPositionHighestHigh     := na
    shortPositionLowestLow      := na
    isTurnoverTrendLongTrigger  := na
    isTurnoverTrendShortTrigger := na
    stopLossLong                := prevTouchPriceUptrend
    if (isCurLowLesserPrevLow)
        curLowToucedPrice = na(curTouchPriceUptrend) ? low : curTouchPriceUptrend
        stopLossLong      := na(curTouchPriceUptrend) ? ((stopLossLong + curLowToucedPrice) / 2) : curLowToucedPrice
    targetLong := (positionEntryPrice + (math.abs(positionEntryPrice - stopLossLong) * targetFactor))
    if (targetLong > 0 and stopLossLong > 0)
        alertMessage = '{ "side/lado": "buy", "entry/entrada": ' + str.tostring(positionEntryPrice) + ', "stop": ' + str.tostring(stopLossLong) + ', "target/alvo": ' + str.tostring(targetLong) + ' }'
        alert(alertMessage)
        strategy.entry('Long', strategy.long)
        strategy.exit('Exit Long', 'Long', stop=stopLossLong, limit=targetLong)

if ((isShortCondition and isPositionShortClose) or shortTurnoverExit)
    positionEntryPrice          := close
    positionIsEntryLong         := false
    positionIsEntryShort        := true
    longPositionHighestHigh     := na
    shortPositionLowestLow      := na
    isTurnoverTrendLongTrigger  := na
    isTurnoverTrendShortTrigger := na
    stopLossShort               := prevTouchPriceDowntrend
    if (isCurHighGreaterPrevHigh)
        curHighToucedPrice = na(curTouchPriceDowntrend) ? high : curTouchPriceDowntrend
        stopLossShort      := na(curTouchPriceDowntrend) ? ((stopLossShort + curHighToucedPrice) / 2) : curHighToucedPrice
    targetShort := (positionEntryPrice - (math.abs(positionEntryPrice - stopLossShort) * targetFactor))
    if (targetShort > 0 and stopLossShort > 0)
        alertMessage = '{ "side/lado": "sell", "entry/entrada": ' + str.tostring(positionEntryPrice) + ', "stop": ' + str.tostring(stopLossShort) + ', "target/alvo": ' + str.tostring(targetShort) + ' }'
        alert(alertMessage)
        strategy.entry('Short', strategy.short)
        strategy.exit('Exit Short', 'Short', stop=stopLossShort, limit=targetShort)

if (verifyTurnoverTrend and positionIsEntryLong)
    curHighestHigh = high
    if (curHighestHigh > longPositionHighestHigh or na(longPositionHighestHigh))
        longPositionHighestHigh := curHighestHigh
    if (isMa1To4Below and isCloseLesserMaMean and longPositionHighestHigh > positionEntryPrice)
        isTurnoverTrendLongTrigger := true
        alertMessage = '{ "side/lado": "buy", "stop": ' + str.tostring(stopLossLong) + ', "target/alvo": ' + str.tostring(longPositionHighestHigh) + ', "new setup/nova definição": ' + str.tostring(isTurnoverTrendLongTrigger) + ' }'
        alert(alertMessage)
        strategy.exit('Exit Long', 'Long', stop=stopLossLong, limit=longPositionHighestHigh)

if (verifyTurnoverTrend and positionIsEntryShort)
    curLowestLow = low
    if (curLowestLow < shortPositionLowestLow or na(shortPositionLowestLow))
        shortPositionLowestLow := curLowestLow
    if (isMa1To4Above and isCloseGreaterMaMean and shortPositionLowestLow < positionEntryPrice)
        isTurnoverTrendShortTrigger := true
        alertMessage = '{ "side/lado": "sell", "stop": ' + str.tostring(stopLossShort) + ', "target/alvo": ' + str.tostring(shortPositionLowestLow) + ', "new setup/nova definição": ' + str.tostring(isTurnoverTrendShortTrigger) + ' }'
        alert(alertMessage)
        strategy.exit('Exit Short', 'Short', stop=stopLossShort, limit=shortPositionLowestLow)

plot(ma1, title='1st Moving Average', color=color.rgb(240, 240, 240))
plot(ma2, title='2nd Moving Average', color=color.rgb(220, 220, 220))
plot(ma3, title='3rd Moving Average', color=color.rgb(200, 200, 200))
plot(ma4, title='4th Moving Average', color=color.rgb(180, 180, 180))
plot(ma5, title='5th Moving Average', color=color.rgb(160, 160, 160))
plot(ma6, title='6th Moving Average', color=color.rgb(140, 140, 140))
plot(ma7, title='7th Moving Average', color=color.rgb(120, 120, 120))
plot(ma8, title='8th Moving Average', color=color.rgb(100, 120, 120))
plot(ma9, title='9th Moving Average', color=color.rgb(80, 120, 120))
plot(ma10, title='10th Moving Average', color=color.rgb(60, 120, 120))
plot(ma11, title='11th Moving Average', color=color.rgb(40, 120, 120))
plot(ma12, title='12th Moving Average', color=color.rgb(20, 120, 120))

tablePosition    = position.bottom_right
tableColumns     = 2
tableRows        = 7
tableFrameWidth  = 1
tableBorderColor = color.gray
tableBorderWidth = 1
tableInfoTrade   = table.new(position=tablePosition, columns=tableColumns, rows=tableRows, frame_width=tableFrameWidth, border_color=tableBorderColor, border_width=tableBorderWidth)

table.cell(table_id=tableInfoTrade, column=0, row=0)
table.cell(table_id=tableInfoTrade, column=1, row=0)

table.cell(table_id=tableInfoTrade, column=0, row=1, text='Entry Side/Lado da Entrada', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=0, row=2, text=positionIsEntryLong ? 'LONG' : positionIsEntryShort ? 'SHORT' : 'NONE/NENHUM', text_color=color.yellow)

table.cell(table_id=tableInfoTrade, column=1, row=1, text='Entry Price/Preço da Entrada', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=1, row=2, text=not na(positionEntryPrice) ? str.tostring(positionEntryPrice) : 'NONE/NENHUM', text_color=color.blue)

table.cell(table_id=tableInfoTrade, column=0, row=3, text='Take Profit Price/Preço Alvo Lucro', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=0, row=4, text=positionIsEntryLong ? str.tostring(targetLong) : positionIsEntryShort ? str.tostring(targetShort) : 'NONE/NENHUM', text_color=color.green)

table.cell(table_id=tableInfoTrade, column=1, row=3, text='Stop Loss Price/Preço Stop Loss', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=1, row=4, text=positionIsEntryLong ? str.tostring(stopLossLong) : positionIsEntryShort ? str.tostring(stopLossShort) : 'NONE/NENHUM', text_color=color.red)

table.cell(table_id=tableInfoTrade, column=0, row=5, text='New Target/Novo Alvo', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=0, row=6, text=verifyTurnoverTrend and positionIsEntryLong and isTurnoverTrendLongTrigger ? str.tostring(longPositionHighestHigh) : verifyTurnoverTrend and positionIsEntryShort and isTurnoverTrendShortTrigger ? str.tostring(shortPositionLowestLow) : 'NONE/NENHUM', text_color=color.green)

table.cell(table_id=tableInfoTrade, column=1, row=5, text='Possible Market Turnover/Possível Virada do Mercado', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=1, row=6, text=verifyTurnoverTrend and positionIsEntryLong and isTurnoverTrendLongTrigger ? 'YES/SIM (Possible long going short/Possível long indo short)' : verifyTurnoverTrend and positionIsEntryShort and isTurnoverTrendShortTrigger ? 'YES/SIM (Possible short going long/Possível short indo long)' : 'NONE/NENHUM', text_color=color.red)


더 많은