مرحبا ، السيد توم ، والسيد JR97 .... إذا كان من الممكن لتصدير إطار زمني البيانات ، وزوج ...؟ مثل بيانات التصدير EURUSD في الإطار الزمني M5 ، M15 ، حتى W1 ...؟
مرحبا ، السيد توم ، والسيد JR97 .... إذا كان من الممكن لتصدير إطار زمني البيانات ، وزوج ...؟ مثل بيانات التصدير EURUSD في الإطار الزمني M5 ، M15 ، حتى W1 ...؟
شكرا ل و JR97. كيف تبدو الشفرة إذا كنت ببساطة بحاجة إلى استخراج OHLC الحالي من MT4 دون فتح أو ربما إنتاج ملف CSV؟ (الرجاء إخبارنا إذا كنت تعيق رسالتي للطباعة ، لقد قمت دائماً بحظر رسائلي بدون أي دافع)
Sorry I didn't get back to you earlier. I was out of town. Basically, there are two different fashions to VBA. One is your macro code. Another is the object version. The object model is much 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 that depends on matters such as active sheet, active cell, etc.. The simple way to remember the basic model structure is the fact that it is hierarchical. Workbook.Worksheet.Range(column_cell:column_cell). properties Below is a few fundamental VBA to replie the Date, Time, O,H,C,V from an MT4 csv data file. The main thing to know with variables and objects is that objects have to be created or instantiated using place. Factors initialized using . By employing explicit descriptions of these objects to be used and manipulated, there's no need to record what workbook,worksheet,cell, etc. has to be highlighted or busy. It's all specified by declaring which object to mention. The code is a lot cleaner and may be re-used in other larger patterns. I call the sample below from a different routine that processes several .csv files in 1 go using some for loops. The trendy thing with placing Range objects is it is simpler to copy/paste. You'd just say: sourceRangeName.copy afterward Range(A1).paste Which is a lot simpler than attempting 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\Documents \ fName = [email protected]'set sourceWb object to file to open Set sourceWb = Workbooks.Open(fPath fName, False, True)'set the source range into the neighboring region from A1 and find the final row variety 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 into the origin range values then shut the. Csv file targetWs.Range(A2:G lastCell 1).Value = sourceRng.Value sourceWb.Close False End Sub There are a few different techniques to acquire info from the csv files without opening them. You can certainly do a file query. That's one of the very few recorded macros that's in fact quite helpful. The other way is to an ADODB connection object and then use normal SQL (Select * from blah blah blah) to find the information into a recordset stored in memory. This method is a little slower, but allows you to find aggregate data should you desire instead of read in each of the data along with the aggregate. Or use a where clause if you want to be selective.
مرحبا JR .. شكرا لك على الظهور. الرجاء ابلاغي عن كيفية استخدام الفئات والكائناتOriginally Posted by ;
. لقد استخدمت وحدات الماكرو المسجلة للفرز الأول من البيانات إلى الأعمدة. انظر ، ولهذا السبب لدي هذه الأوامر: range.activate - بحيث أختار النطاق المناسب لإجراء هذا الماكرو المسجل. ولكني أعلم أن اختيار البيانات يبطئ البرنامج ، وأنه يمكنني فقط تسجيله في مكان ما والقيام بعمل كامل دون اختيار الخلايا. لكن لا أفهم كيف. تي
راجع للشغل ، إذا كان أي شخص لديه excel يسأل ، نشرها. أنا مبرمج VBA متقدمة إلى حد ما ، وقمت بتجميع بعض برامج رسم قوية إلى حد ما في Excel. لن أبني لك تطبيقًا ولكن يمكنني تقديم المساعدة في أي أسئلةمهام متعلقة بـ vba. لا أستطيع أن أعدكم بالتحول السريع ، لكن ... أنت تحصل على شيء بدون أي تكلفة. هذه الصفقة ليست على الطاولة إلى الأبد ، لذا استفد منها في أي وقت.
![]()
يا توم ، يبدو أنك تستخدم الكثير من vba الماكرو المسجلة. فقط كن على دراية بأن vba المسجلة يمكن أن تفشل حيث أن الخليةالورقةالخ مشغول تكون نسبة إلى أي شيء مشغول في وقت التسجيل إلا إذا قمت باختيار خلية نشطة محددة. من الأفضل استخدام نموذج كائن المصنفورقة العملنطاق Excel وتعيين المسائل بشكل خاص للمتغيرات وكائنات النطاق. هو نهج أكثر دقة وقابلة للتطوير. لقد تم وضع رمز للعمل مع إخراج MT4 سأقوم بنشرها إذا كنت فضوليا. هل لديك أي خبرة في تطوير العمل مع الأشياء والدروس؟
2 مرفق (ق) فيما يلي مسلسلك ، ما هو مثير للاهتمام هو أن التصور للشكل الذي شكله العرض حالما تأتي الحصة للاستقرار الكامل.
https://www.cavemantrading.com/attac...584174451.xlsx
https://www.cavemantrading.com/forex...ing-style.html
حسنا ، لقد تم ذلك من قبلي. كان في هذا thingie. إذا كنت ترغب في تحويل ترتيب النص إلى التاريخ ، فسيكون تنسيق xls الافتراضي هو yyyy-mm-dd. يعني إذا بدائية مثلي ، أنت فقط بطريقة ما لحثها على القيام بذلك! لذلك تم اختبار هذا العمل واحد ، على 0and MT4 الصادرات الشهرية والأسبوعية واليومية.cavemantradingلن تسمح لي بتحميل .xlsm هنا ، لذلك أصف كيف يعمل. يمكنك إنشاء ورقة إكسل باستخدام أربع قوائم ، تسمى أيضًا Data_crushed Data_final والبيانات. مرة واحدة في مخطط MT4 ، اضغط على ctrl s وانسخ * .csv. نسخ البيانات من .csv إلى قائمة المعلومات. تشغيل الماكرو. سوف يسحق التواريخ لتنسيق وتحديد إغلاق فقط ، لذلك فمن الممكن كسب الرسم البياني بسرعة. ورقة البيانات سحق يحتوي على كل OHLC والكمية ، ورقة إغلاق فقط تلك العصي. تتمتع ، T. Sub datecrushMT4Daily () 'أوراق إعادة تشغيل crushed و Last Appliion.DisplayAlerts = أوراق عمل False (Data_crushed) .Delete Worksheets.Add.Name = أوراق عمل Data_crushed (Data_crushed) .Move بعد: = أوراق عمل (بيانات) أوراق العمل (Data_final). حذف Worksheets.Add.Name = أوراق عمل Data_final (Data_final) .Move بعد: = أوراق العمل (قائمة) Appliion.DisplayAlerts = Authentic Appliion.ScreenUpdating = False 'سحق تاريخ - أوراق عمل MT4 يومية (بيانات). تنشيط نطاق (خلايا (1 ، 1 ) ، خلايا (1 ، 7) .End (xlDown)) نسخ أوراق العمل (Data_crushed). تنشيط أعمدة ActiveSheet.Paste (A: A). تحديد Selection.TextToColumns الوجهة: = نطاق (A1) ، DataType: = xlDelimited ، _ TextQualifier: = xlNone، ConsecutiveDelimiter: = False، Tab: = True، Semicolon _: = False، Comma: = True، Space: = False، Other: = False، FieldInfo: = Array (_ Array (1، 4)، Array (2 ، 4) ، صفيف (3 ، 1) ، صفيف (4 ، 1) ، صفيف (5 ، 1) ، صفيف (6 ، 1) ، صفيف (7 ، 1)) ، _ DecimalSeparator: =. ، TrailingMinusNumbers: = True Selection.NumberFormat = [$ -F800] dddd، mmmm dd، yyyy 'datecrush Set rng = Range (Cells (1، 1)، Cells (1، 1) .End (xlDown)) For each b In rng b.Offset (0، 7) .Value = (Left (b.Value، 4) - Mid (b.Value، 6، 2) - Correct (b.Value، two)) next rng.NumberFormat = [$ - F800] dddd، mmmm dd، yyyy'rng.NumberFormat = dmyyyy For Each b in rng b.Value = b.Offset (0، 7). القيمة ”الأعمدة المرئية التالية (B). حذف أعمدة (جرام) .ClearContents الصفوف (1: 1) .إدراج Shift: = xlDown ، CopyOrigin: = xlFormatFromLeftOrAbove Range (A1) .FormulaR1C1 = النطاق الزمني (b1) .FormulaR1C1 = فتح نطاق (c1). .FormulaR1C1 = نطاق مرتفع (d1). .FormulaR1C1 = نطاق منخفض (e1). .FormulaR1C1 = إغلاق نطاق (f1). .FormulaR1C1 = حجم الصوت ”المتابعة إلى إغلاق النطاق (A: A، E: E) .Copy Worksheets (Data_final) ) .Activate Sheets (Data_final). حدد ActiveSheet.Paste End Sub
1 مرفق (مرفقات) هذه ورقة تفوق سهلة من MM لإدارة تعاملات الاتحاد الأوروبي و UJ. انها مجرد طريقة واحدة
ومع ذلك ، يمكنك تكييفها إذا كنت ترغب في ذلك. إذا اكتشفت بعض الأخطاء ، فيرجى الإبلاغ عنها. الأرقام هي ofc وهمية ، إلى جانب تلك المداخل.
https://www.cavemantrading.com/attac...352376108.xlsx
لذلك أول رمز صغير أحتاج لتخزينه. لقد جعلت هذا كوز في بعض الأحيان عندما أقوم بتنزيل timeserie ، لدى الأمم المختلفة تنسيقات مختلفة للوقت والتاريخ ولا يمكن excel تصفح التاريخ. هو فقط لإيجاد فكرة ساخنة هيك تغيير كل تلك التواريخ الخاطئة. 'datecrush Set rng = Range (Cells (1، 1)، Cells (1، 1) .End (xlDown)) For each b in 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). القيمة rng.NumberFormat = d.m.yyyy الثاني هو في الحقيقة حالة من الفوضى. سيكون هذا الرمز لسحق المعلومات التي تم تصديرها بتنسيق * .csv ومن ثم تغييرها إلى timeserie مقروء مع إغلاق وتواريخ فقط. تم اختبارها على معلومات يومية الاتحاد الأوروبي Oanda من MT4. هناك خطأ طفيف في التواريخ ، والذي يمكن إصلاحه الآن - بالرمز no1. نعتقد أن جميع صادرات MT4 يجب أن تكون هي نفسها. datecrushMT4Daily () 'أوراق إعادة المهزوم و Last Appliion.DisplayAlerts = أوراق عمل False (Data_crushed) .Delete Worksheets.Add.Name = أوراق عمل Data_crushed (Data_crushed) .Move بعد: = أوراق عمل (إحصائيات) أوراق العمل (Data_final) .Delete Worksheets.Add .Name = Data_final Workshe (Data_final) .Move After: = Workshe (Menu) Appliion.DisplayAlerts = Authentic Appliion.ScreenUpdating = False 'Crush Date - MT4 Daily Worksheets (Data) .Activate Range (Cells (1، 1)، Cells ( 1 ، 7) .End (xlDown)) نسخ أوراق العمل (Data_crushed). تنشيط ActiveSheet.Paste ”أعمدة منفصلة أعمدة (A: A). حدد التحديد. TextToColumns الوجهة: = نطاق (A1) ، DataType: = xlDelimited ، _ TextQualifier : = xlDoubleQuote، ConsecutiveDelimiter: = False، Tab: = True، _ Semicolon: = 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: = Actual Range (G14). حدد ”الأعمدة المرئية (B). حذف أعمدة (g) .ClearContents Rows (1: 1) .إدراج Shift: = xlDown ، CopyOrigin: = xlFormatFromLeftOrAbove Range (A1) .FormulaR1C1 = Date نطاق (b1). .FormulaR1C1 = فتح نطاق (c1). .FormulaR1C1 = نطاق مرتفع (d1). .FormulaR1C1 = نطاق منخفض (e1) .FormulaR1C1 = إغلاق نطاق (f1) .FormulaR1C1 = مستوى الصوت 'الانتقال إلى إغلاق نطاق السجل (A: A E: E) .Copy Workshe (Data_final) .Activate Sheets (Data_final). حدد ActiveSheet.Paste End Sub