Блог им. SciFi

Полезный скрипт для ведения журнала в Excel

    • 23 июня 2016, 03:00
    • |
    • SciFi
  • Еще
Я веду свой журнал в Excel. Но есть одно неудобство. Сделки в QUIK представлены в виде списка транзакций, а не сделок как таковых с открытием и закрытием позиции. 

В журнале же нужно записывать сделку целиком с транзакцией на открытие и закрытие, чтобы видеть прибыль и убыток с каждой сделки.

Чтобы вручную не копировать строки в журнал, я написал две маленькие функции, которые выполняют одну простенькую задачу — они копируют сделку на закрытие и ставят ее рядом со сделкой на открытие. Конечно, перед этим нужно в Excel немного почистить данные, чтобы сделки были целиком (а не кусками по 1-2 лота) и по одному инструменту. 

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

Итак, вот что было:
Полезный скрипт для ведения журнала в Excel

Стало:

Полезный скрипт для ведения журнала в Excel



Код на VBA:

' Склеивает сделки
Sub mergeDeals()

    ' Объявление переменных
    Dim LastRow, prevRow As Long
    Dim i As Long, j As Long
    Dim myRange As String
   
    ' Выделяем Лист, с которым работаем
    Sheets("Лист1").Select

    ' Определяем число заполненных строк
    With Worksheets("Лист1")
        LastRow = .Cells(.rows.Count, "A").End(xlUp).Row
    End With

    ' Проходимся по всем строкам от 1 до последней
    For i = 1 To LastRow
        With Worksheets("Лист1")
            
            ' Если строка четная, то копируем ее и вставляем рядом с предыдущей строкой
            If i Mod 2 = 0 Then
                prevRow = i - 1
                myRange = "A" & i & ":" & "G" & i
                .Range(myRange).Copy Destination:=Worksheets("Лист1").Range("H" & prevRow)
                
                ' Удаляем содержимое скопированной строки
                .rows(i).ClearContents
            End If
        End With
    Next i
   
End Sub

' Удаляет пустые строки
Sub clearEmptyRows()

    ' Объявление переменных
    Dim r As Range, rows As Long, i As Long
    
    ' Объявление диапазона, в котором ищем пустые строки
    Set r = ActiveSheet.Range("A1:Z500")
    
    ' Удаление пустых строк
    rows = r.rows.Count
    For i = rows To 1 Step (-1)
        If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete
    Next
End Sub
★30
7 комментариев
Автор, Вы можете сделать скрипт для автоматической отправки смс из экселя при добавлении новой строки? 

Иван Тишевской, только смс, другие варианты не проходят?
Иван Тишевской, у меня есть питоновский скрипт, который крутится на винде постоянно и при появлении текстового файла в определенной папке посылает смс. А вот другой робот кладет этот файл в эту папку, когда совершает сделку. Аналогично можно написать робота, который следит за таблицей сделок и кладет такой файл. Я могу вам его дать, да и в интернете таких скриптов полно. Но вот отладить его будет геморрой для вас. Нужно создать аккаунт на смс сервере. Нужно научиться пользоваться Python. Я сейчас потихоньку мигрирую на Метатрейдер, там уже есть встроенный функционал отправки пуш-уведомлений на телефон. Это и рекомендую использовать. Пуши, кстати, бесплатные. 
avatar
Фыва, к чему ваш пост? На более читабельную версию поста автора в другом блоге автора?
Рустем Закиров, просто скопировал пост ТС на сайт, где код более читабелен
avatar
Конечно, перед этим нужно в Excel немного почистить данные, чтобы сделки были целиком (а не кусками по 1-2 лота)

Для этого обычно пишется скриптик объединяющий сделки по времени (+- несколько секунд).

теги блога SciFi

....все тэги



UPDONW
Новый дизайн