Sub Main() 'تحديد اتجاه الصفحة من اليمين إلى اليسار (اللهم اجعلنا من أهل اليمين) ActiveSheet.DisplayRightToLeft = True Cells.Font.Name = "Arial Unicode MS" Cells.Font.Size = 10 'عامود كود السهم Columns(1).ColumnWidth = 8 'سمكه صغير نسبيًا Columns(1).HorizontalAlignment = xlCenter 'محاذاة للمنتصف Columns(1).Font.Color = vbRed 'اللون الأحمر Columns(1).Font.Bold = True 'الخط الثقيل 'عامود إسم السهم Columns(2).ColumnWidth = 25 'سمكه كبير Columns(2).HorizontalAlignment = xlRight 'محاذاة لليمين Columns(2).Font.Color = vbBlue 'اللون الأزرق Columns(2).Font.Bold = True 'الخط الثقيل 'عامود مسار ملف الميتاستوك الخاص بالسهم Columns(3).ColumnWidth = 80 'سمكه كبير جدًا Columns(3).HorizontalAlignment = xlLeft 'محاذاة لليسار 'تلوين صف عناوين الأعمدة Rows(1).Interior.Color = RGB(220, 220, 255) Rows(1).Font.Bold = True 'الخط الثقيل 'تحديد أسماء الأعمدة ومحاذتها Cells(1, 1) = "الكود" Cells(1, 2) = "إسم السهم" Cells(1, 2).HorizontalAlignment = xlCenter 'محاذاة للمنتصف Cells(1, 3) = "مسار ملف الميتاستوك" Cells(1, 3).HorizontalAlignment = xlCenter 'محاذاة للمنتصف Cells(1, 4) = "الإغلاق" Cells(1, 4).HorizontalAlignment = xlCenter Cells(1, 5) = "التغير%" Cells(1, 5).HorizontalAlignment = xlCenter 'مسار المجلد الذي يحتوي على الإي ماستر بجهازك Dim path As String path = "C:\Users\VIP PC\DFN\DirectFNPro10-Saudi\saif09990\metastock\history\TDWL\" 'هنا مسار مجلد الميتاستوك 'قراءة ملف الإي ماستر وتحويله إلى مصفوفة من البايتس Dim bytes() As Byte bytes = GetFileBytes(path + "EMASTER") Dim bytes_code(3) As Byte 'عدد 4 بايت لتخزين كود السهم Dim bytes_name(51) As Byte 'عدد 52 بايت لتخزين إسم السهم 'البايت الخاصة بالحرف الذي يمثل الفترة 'I - D - W - M Dim bytePeriodLetter As Byte bytePeriodLetter = bytes(192 + 60) 'البايت الخاصة بعدد دقائق الفترات أقل من اليومية Dim bytePeriodMinutes As Byte bytePeriodMinutes = bytes(192 + 62) 'متغير لتخزين الفترة من النوع النصي Dim period As String 'نبحث عن الحرف Select Case bytePeriodLetter Case 73 'ASCII Table -> I (Intraday) period = "M" + CStr(bytePeriodMinutes) 'إضافة بايت الدقيقة Case 68 'ASCII Table -> D (Daily) period = "Daily" Case 87 'ASCII Table -> W (Weekly) period = "Weekly" Case 77 'ASCII Table -> M (Monthly) period = "Monthly" End Select 'نعيد تسمية إسم السهم لوضع الفترة بجواره Cells(1, 2) = "إسم السهم (" + period + ")" 'نبحث عن قيمة خطوة البايتس المطلوبة لقراءة ملف أسعار الفترة Dim step As Integer Select Case bytePeriodLetter Case 73 'ASCII Table -> I (Intraday) step = 32 Case Else 'لأي بيانات أخرى step = 28 End Select 'تكرار الأوامر الآتية بعدد الأسهم كلها For i = 1 To UBound(bytes) / 192 'هنا يتم استخراج بيانات السهم 'أولًا كود السهم ويتكون من عدد 4 بايت بداية من البايت رقم 11 For j = 0 To 3 bytes_code(j) = bytes(i * 192 + 11 + j) Next j Cells(i + 1, 1) = StrConv(bytes_code, vbUnicode) 'ثانيًا إسم السهم ويتكون من عدد 52 بايت بداية من البايت رقم 139 For j = 0 To 51 bytes_name(j) = bytes(i * 192 + 139 + j) Next j Cells(i + 1, 2) = StrConv(bytes_name, vbUnicode, &H401) 'ثالثًا رقم ملف الميتاستوك الخاص بالسهم وهو بالبايت رقم 2 Cells(i + 1, 3) = path + "F" + CStr(bytes(i * 192 + 2)) + ".DAT" Next i End Sub 'دالة قراءة أي ملف وتحويله إلى مصفوفة من البايت حيث يتم إدخال بها مسار الملف Public Function GetFileBytes(ByVal path As String) As Byte() 'فرض الملف Dim file As Long file = FreeFile() 'فرض مصفوفة البايتس التي سيتم قراءة الملف فيها Dim bytes() As Byte If LenB(Dir(path)) Then 'التحقق من وجود الملف لتجنب حدوث أخطاء 'فتح الملف لقراءته Open path For Binary Access Read As file 'تحديد طول مصفوفة البايتس وهو طول الملف سالب واحد 'وذلك لأن الترقيم بأي مصفوفة يبدأ من صفر وليس واحد ReDim bytes(LOF(file) - 1) As Byte 'قراءة الملف داخل المصفوفة Get file, , bytes 'إغلاق الملف بعد الانتهاء من قراءته Close file End If 'إرجاع القيمة المطلوبة كناتج للدالة، وهي مصفوفة البايتس GetFileBytes = bytes End Function
الكلمات الدلالية (Tags) |
لتحليل, لربط, إصنع, والتاريخية, اللحظية, الإكسل, البيانات, احترافية, excel, برنامجك, دورة |
أدوات الموضوع | |
تعليمات المشاركة |
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك
BB code is متاحة
الابتسامات متاحة
كود [IMG] متاحة
كود HTML معطلة
|