Анализ Excel и VBA
Страница 1 из 815 123 ... ПоследняяПоследняя
Results 1 to 10 of 41

Thread: Анализ Excel и VBA

  1. #1
    Добро пожаловать,

    Я выделяю эту тему для эволюции наших листов Excel.

    Я бы хотел, чтобы это был аналитический рай, и я готов быть здесь наедине с моей маленькой эволюцией. Иногда вы можете взглянуть, так как я собираюсь публиковать свои сценарии VBA, надеясь, что некоторые профессионалы появятся и поправят меня. Во время моей торговой карьеры мне приходилось много раз анализировать несколько раз, и часто хотелось посмотреть на нее с какой-то странной перспективы. К сожалению, это ИТ-анализ. Поэтому я научился кодировать основы VBA, закодировал его как свинью, но как-то это сработало, и я получил то, что мне было нужно.

    По какой-то причине, я считаю, что некоторые из вас были или были в той же ситуации, и я считаю, что если мы поделимся нашими кодами VBA и excel combos, мы сможем сделать довольно приятные вещи.

    Я также использую этот форум в качестве магазина для кодов, поэтому они находятся в одном месте. Я призываю вас помочь мне в эволюции этих. Если вы поняли, как это можно улучшить, скажите об этом.

    Отказ от ответственности: Это действительно глупые коды. Если вы планируете использовать их, убедитесь, что вы понимаете, что они делают, и сначала сохраните свои данные, прежде чем запускать макрос. Все коды написаны в VBA Excel 2010.

    Должен добавить одно правило потока:
    Пожалуйста, попытайтесь придерживаться этого. Также приветствуется ACDC.

    Наслаждаться,

    Том

  2. #2
    Итак, первый маленький код, который мне нужно сохранить. Я делал это coz иногда, когда я загружаю timeerie, разные страны имеют разные форматы времени и даты и отлично не читают дату. Это просто для того, чтобы получить идею горячего изменения всех этих неправильных дат. 'datecrush Set rng = Range (Ячейки (1, 1), Ячейки (1, 1) .End (xlDown)) Для каждого b В rng b.Offset (0, 7) .Value = (Left (b.Value, 4 ) - Середина (b.Value, 6, 2) - Вправо (b.Value, 2)) Далее Для каждого b В rng b.Value = b.Offset (0, 7) .Value Next rng.NumberFormat = dmyyyy Second один действительно беспорядок. Этот код должен раздавить данные, экспортированные в формате * .csv, и изменить его на читаемое временное время только с закрытием и датами. Был проверен на ежедневные данные ЕС по Оанде из MT4. Существует небольшая ошибка с датами, которые исправляются сейчас - с использованием кода №1. Думайте, что весь экспорт MT4 должен быть таким же. Sub datecrushMT4Daily () 'перезапускает листы раздавленные и окончательные Appliion.DisplayAlerts = False Worksheets (Data_crushed) .Delete Worksheets.Add.Name = Data_crushed Worksheets (Data_crished) .Move After: = Worksheets (Data) Worksheets (Data_final) .Delete Worksheets.Add .Name = Data_final Worksheets (Data_final) .Move After: = Рабочие листы (меню) Appliion.DisplayAlerts = True Appliion.ScreenUpdating = False 'Дата раздавливания - ежедневные рабочие таблицы MT4 (данные). Активация диапазона (ячейки (1, 1), ячейки ( 1, 7) .End (xlDown)). Копировать рабочие листы (Data_crished) .Activate ActiveSheet.Paste 'Столбцы разделяют столбцы (A: A). Выберите Selection.TextToColumns Destination: = Range (A1), DataType: = xlDelimited, _ TextQualifier : = xlDoubleQuote, ConsecutiveDelimiter: = False, Tab: = True, _ Точка с запятой: = False, Comma: = True, Space: = False, Other: = False, FieldInfo _: = Array (Array (1, 4), Array ( 2, 4), Array (3, 1), Array (4, 1), Array (5, 1), Array (6, 1), _ Array (7, 1)), DecimalSeparator: =., TrailingMinusNumbers: = True Range (G14). Выберите «визуальные столбцы (B). Удалить столбцы (g) .ClearContents Rows (1: 1) .Insert Shift: = xlDown, CopyOrigin: = xlFormatFromLeftOrAbove Range (A1) .FormulaR1C1 = Диапазон дат (b1) .FormulaR1C1 = Открытый диапазон (c1) .FormulaR1C1 = Высокий диапазон (d1) .FormulaR1C1 = Low Range (e1) .FormulaR1C1 = Close Range (f1) .FormulaR1C1 = Volume 'перейти к окончательному списку Range (A: A, E: E). Копировать таблицы (Data_final). Таблицы активации (Data_final). Выбрать ActiveSheet.Paste End Sub

  3. #3
    1 Вложения (ы) Вот простой лист Excel для управления сделками ЕС и UJ. Это всего лишь один способ
    но вы можете приспособить его, если хотите. Если вы нашли ошибку, сообщите об этом. Числа являются фальшивыми, кроме этих записей.
    https://www.forex-russian.com/attach...352376108.xlsx

  4. #4
    Хорошо, я сделал это. Все было в этой маленькой штуковине. Если вы хотите преобразовать текстовый формат в дату, формат по умолчанию .xls - yyyy-mm-dd. Смысл, если примитивный, как я, вы как-то заставляете его внутри и делаете! Таким образом, этот один работает, был протестирован на экспорт Oanda MT4 Monthly, Weekly и Daily.forex-russianне позволит мне загружать .xlsm здесь, поэтому я описываю, как это работает. Вы делаете лист Excel с четырьмя списками, называемыми Menu Data_crushed Data_final и Data. Когда-нибудь в таблице MT4, нажмите ctrl s и сохраните * .csv. Скопируйте данные из * .csv в список данных. Запустите макрос. Он будет подавлять даты до читаемого формата и выбирать только закрытие, чтобы вы могли быстро составить график. Листовые данные дробленые содержат все OHLC и объем, лист Final только те, которые закрываются. Наслаждайтесь, T. Sub datecrushMT4Daily () 'перезапускает листы раздавленные и окончательные Appliion.DisplayAlerts = False Worksheets (Data_crushed) .Delete Worksheets.Add.Name = Data_crushed Worksheets (Data_crished) .Move After: = Worksheets (Data) Worksheets (Data_final). Удалить Worksheets.Add.Name = Data_final Рабочие листы (Data_final) .Move После: = Рабочие листы (меню) Appliion.DisplayAlerts = True Appliion.ScreenUpdating = False 'Date crush - ежедневные рабочие таблицы MT4 (данные). Диапазон активации (ячейки (1, 1) ), Ячейки (1, 7) .End (xlDown)). Копировать рабочие листы (Data_crushed) .Activate ActiveSheet.Paste Columns (A: A). Выбрать Selection.TextToColumns Destination: = Range (A1), DataType: = xlDelimited, _ TextQualifier: = xlNone, ConsecutiveDelimiter: = False, Tab: = True, точка с запятой _: = False, Comma: = True, Space: = False, Other: = False, FieldInfo: = Array (_ Array (1, 4), Array (2, 4), Array (3, 1), Array (4, 1), Array (5, 1), Array (6, 1), Array (7, 1)), _ DecimalSeparator: =., TrailingMinusNumbers: = True Selection.NumberFormat = [$ -F800] dddd, mmmm dd, yyyy 'datecrush Set rng = Диапазон (ячейки (1, 1), ячейки (1, 1) .End (xlDown)) Для каждого b В rng b.Offset (0, 7) .Value = (Left (b.Value, 4) - Mid (b.Value, 6, 2) - Вправо (b.Value, 2)) Далее rng.NumberFormat = [$ -F800] dddd, mmmm dd, yyyy 'rng.NumberFormat = dmyyyy Для каждого b В rng b.Value = b.Offset (0, 7) .Value Next 'визуальные столбцы (B). Удалить столбцы (g) .ClearContents Строки (1: 1) .Insert Shift: = xlDown, CopyOrigin: = xlFormatFromLeftOrAbove Range (A1) .FormulaR1C1 = Диапазон дат (b1) .FormulaR1C1 = Открытый диапазон (c1) .FormulaR1C1 = Высокий диапазон (d1) .FormulaR1C1 = Низкий диапазон (e1) .FormulaR1C1 = Близкий диапазон (f1) .FormulaR1C1 = Объем 'переходит в конечный диапазон (A: A , E: E). Копированные рабочие листы (Data_final). Активные листы (Data_final). Выберите ActiveSheet.Paste End Sub

  5. #5
    2 Вложения (ы) Вот серия, интересна визуализация формы, образованной серией, когда рацион приходит к полной стабилизации.
    https://www.forex-russian.com/attach...584174451.xlsx
    https://www.forex-russian.com/forex-...ing-style.html

  6. #6
    Эй, Том, похоже, вы используете много записанных макросов vba. Просто имейте в виду, что записанная vba может выйти из строя, так как активная ячейкалистetc относится к тому, что активно во время записи, если вы специально не выбрали определенную активную ячейку. Лучше использовать модель рабочей книги Excelрабочего листадиапазона и явно назначать вещи для переменных и объектов диапазона. Это более точный и масштабируемый подход. Я собрал код для работы с выходом MT4. Я отправлю сообщение, если вам интересно. У вас есть опыт разработки, который работает с классами и объектами?

  7. #7
    Кстати, если у кого-то есть просьбы Excel, опубликуйте их. Я довольно продвинутый разработчик VBA и создал в Excel отличные графические приложения. Я не буду создавать вам приложение, но я могу помочь с любыми вопросамизадачами vba. Я не могу обещать быстрый поворот, но эй ... ты получаешь что-то бесплатно. Это предложение не на столе навсегда, поэтому пользуйтесь им, пока оно есть.

  8. #8
    Quote Originally Posted by ;
    Эй, Том, похоже, вы используете много записанных макросов vba. Просто имейте в виду, что записанная vba может выйти из строя, так как активная ячейкалистetc относится к тому, что активно во время записи, если вы специально не выбрали определенную активную ячейку. Лучше использовать модель рабочей книги Excelрабочего листадиапазона и явно назначать вещи для переменных и объектов диапазона. Это более точный и масштабируемый подход. Я собрал код для работы с выходом MT4. Я отправлю сообщение, если вам интересно. У вас есть опыт разработки ...
    Привет, JR. Спасибо, что появился. Расскажите, как использовать классы и объекты
    , Я использовал записанные макросы для первой сортировки данных в столбцы. Смотрите, вот почему у меня есть эти команды: range.activate - поэтому я выбираю правильный диапазон для запуска этого записанного макроса. Но я знаю, что выбор данных замедляет программу, и я мог бы как-то записать ее где-нибудь и выполнить целые действия без выбора ячеек. Но не знаю как. T

  9. #9
    sorry I didn't get back to you sooner. I was out of town. Basically, there are two different styles to VBA. One is the macro code. The other is the object model. The object model is more akin to Visual Basic 6. The object model is a lot cleaner, easier to manipulate, and less prone to the errors you get using the macro recorder which is dependent on things such as active sheet, active cell, etc. The easy way to remember the basic model structure is that it's hierarchical. Workbook.Worksheet.Range(column_cell:column_cell). properties Below is some basic VBA to copy the Date, Time, O,H,L,C,V from an MT4 csv data file. The main thing to understand with objects and variables is that objects have to be created or instantiated using set. Variables initialized using =. By using explicit descriptions of the objects to be used and manipulated, there is no need to record what workbook,worksheet,cell, etc. needs to be highlighted or active. It's all specified by declaring which object to reference. The code is much cleaner and can be re-used in other larger routines. I call the sample below from another routine that processes multiple .csv files in one go using some for loops. The cool thing with setting Range objects is it's easier to copy/paste. You'd just say: sourceRangeName.copy then Range(A1).paste Which is a lot easier than trying to record highlighting a range, copying, and pasting. Inserted Code Sub OpenCSV() Dim sourceWb As Workbook Dim targetWb As Workbook Dim sourceWs As Worksheet Dim targetWs As Worksheet Dim sourceRng As Range Dim targetRng As Range Dim fPath As String Dim fName As String Dim lastCell As Integer 'Set target workbook, worksheet, and range. Set targetWb = ActiveWorkbook Set targetWs = targetWb.Worksheets(Mt4) 'Set file path and file name fPath = C:\MetaQuotes\MQL4\Files\ fName = [email protected] 'set sourceWb object to file to open Set sourceWb = Workbooks.Open(fPath fName, False, True) 'set the source range to the contiguous area from A1 and find the last row number Set sourceRng = sourceWb.Worksheets(1).Range(A1).CurrentRegion 'sourceRng.Copy lastCell = sourceRng.Rows.Count Debug.Print lastCell 'Clear existing data targetWs.Range(A1).CurrentRegion.Clear 'Header Row targetWs.Range(A1) = DATE targetWs.Range(B1) = TIME targetWs.Range(C1) = OPEN targetWs.Range(D1) = HIGH targetWs.Range(E1) = LOW targetWs.Range(F1) = CLOSE targetWs.Range(G1) = VOLUME targetWs.Range(H1) = fName 'set the target range values to the source range values then close the .csv file targetWs.Range(A2:G lastCell 1).Value = sourceRng.Value sourceWb.Close False End Sub There are a few other ways to get data from the csv files without opening them. You can do a file query through a connection string. That is one of the few recorded macros that is actually very useful. Another way is to an ADODB connection object and then use normal SQL (Select * from blah blah blah) to get the data into a recordset held in memory. This method is a bit slower, but allows you to get aggregate data if you want rather than read in all of the data and the aggregate. Or use a where clause if you want to be more selective.

  10. #10
    Спасибо за и JR97. Как выглядит код, если мне просто нужно извлечь текущий OHLC из MT4 без открытия или даже создания файла csv? (модулятор, пожалуйста, скажите, почему, если вы блокируете мое сообщение для публикации, вы всегда блокируете мои сообщения без причины)

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.