Анимированный график свечей с использованием VBA [закрыто]

Я взялся за сложную работу по анимации 5-минутного свечного графика из данных открытия, максимума и минимума закрытия в Excel 2007. Вся основная работа по анимации с использованием vba выполнена. Анимация хорошо работает для каждого тика в 1 минуту с интервалом ожидания в 1 секунду для каждого тика в 1 минуту, но я застрял в месте, чтобы показать линию тренда, которая движется вверх и вниз вместе с ценой закрытия.

Может ли кто-нибудь помочь мне в том, как я могу анимировать пунктирную линию вверх и вниз на каждом тике с ее ценой закрытия? Условие состоит в том, что если цена закрытия меньше, чем цена открытия для этого конкретного тика, тогда цвет линии и текста должен измениться на красный, значение также должно быть изменено, а линия должна переместиться к цене закрытия. Точно так же, если закрытие больше открытия для этого тика, тогда цвет должен быть зеленым, а если открытие и закрытие одинаковы, тогда цвет должен быть черным.

Прошу вас, ребята, помочь мне в том же.

PS: Это кросс-пост. опубликовано на форуме ниже, но не получил ответа. https://www.excelforum.com/excel-programming-vba-macros/1341860-animated-candlestick-chart-using-vba.html

Мой код может быть не очень эффективным, поскольку я не профессионал, вы можете изменить его, чтобы повысить его эффективность.

      Sub Reset_Candles()
        Range("C18:G43").ClearContents
End Sub
Sub Animate_Candles()
    
    Dim LastRow As Long
    Dim StartRow As Long
    Dim i As Long
    Dim minVal As Long
    Dim maxVal As Long
    Dim minmax As Range
    
    StartRow = 18
    LastRow = Range("I" & Rows.Count).End(xlUp).Row
    
    Set minmax = Sheet1.Range("J1:M" & LastRow)
    
    minVal = Application.WorksheetFunction.Min(minmax)
    maxVal = Application.WorksheetFunction.Max(minmax)
    maxVal = maxVal + (maxVal * 0.005)
    minVal = minVal - (minVal * 0.005)

    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue)
        .MinimumScale = minVal
        .MaximumScale = maxVal
    End With

    Range("B18:G18").Value = Range("I18:N18").Value
    For i = StartRow + 1 To LastRow
        DoEvents
        If Trim(Range("I" & i).Value) = Trim(Range("B" & StartRow + 1).Value) Then
            StartRow = StartRow + 1
            Range("B" & StartRow & ":G" & StartRow).Value = Range("I" & i & ":N" & i).Value
        End If
        If Range("K" & i).Value > Range("D" & StartRow).Value Then
            Range("D" & StartRow).Value = Range("K" & i).Value
        End If
        If Range("L" & i).Value < Range("E" & StartRow).Value Then
            Range("E" & StartRow).Value = Range("L" & i).Value
        End If
        Range("F" & StartRow).Value = Range("M" & i).Value
        Application.Wait (Now + TimeValue("0:00:01"))
        DoEvents
    Next i
End Sub

Ссылка на Google диск для загрузки файла https://drive.google.com/file/d/1aiF8b__Ezn1HmPsz0mtGBM1AcfLtLAD6/view?usp=sharing

0 ответов

Другие вопросы по тегам