資源の読み込みに... 荷物...

総合的な自動取引移動平均のレインボー戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-13 10:44:41
タグ:

img

概要

総合自動取引移動平均虹の戦略は,典型的なマルチタイムフレーム移動平均の組み合わせ戦略である.トレンド方向を決定し,自動取引を実施するためのエントリー,ストップ損失および利益の条件を定義するために,異なる期間の12つの移動平均を使用する.この戦略は,トレンドを自動的に特定し,リスクを制御するための完全なストップ損失メカニズムを持っています.

原則

この戦略は,3,5,8から55までの期間を含む12の移動平均を使用します.移動平均のタイプは,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)


もっと