صفحة 1 من 26 123456711 ... الأخيرةالأخيرة
النتائج 1 إلى 15 من 378
  1. #1
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي جافا - تصميم الاكسبيرتات بلغة الجافا لمنصة jforex مع دوكاسكوبي

    بسم الله الرحمن الرحيم
    تعتمد منصة دوكاسكوبي على لغة الجافا بشكل كامل وتام اذا اردت تصميم طريقتك او مؤشرتك
    فقط هي تضيف على الجافا بعض الأشياء الخاصة بها, مثل وضع الأوامر وماشابه.
    هنا محاولة متوىاضعة مني لتقريب الأمر على من يرغب بتعلم JForex كلغة تحرير استراتيجيات ومؤشرات
    عندما نقول Jforex فنحن نختصر عبارة "Java Forex" مع دوكاسكوبي.

    ورغم أننا نفترض ان المهتم بهذا الشأن لابد أن يكون أولا خبيرا بلغة الجافا ولكن سنتحدث عن أهم مقومات هذه اللغة, بالقدر الكافي لفهمها لكي تفهم كيف تعمل دوال "دوكاسكوبي" بعد ذلك.

    ولتبسيط الأمر على الدراس الكريم, سنتبع أسلوب المقارنة أو المقابلة مع لغة mql المستخدمة حصرا لمنصات الميتا تريدر.

    مثلا عند الحديث عن SubmitOrder مع دوكاسكوبي سنذكر OrderSend مع الميتا تريدر
    وهكذا,

    لغات البرمجة الموجة نحو التداول الآلي ذات عدد, وحسب المنصة
    مثلا لغة easyLnaguage لمنصات TradeStation وهي كلغة مأخوذة من الفيجوال بيسك VB
    وهناك لغة cAlgo لمنصات cTrader وهي عينها لغة C# --- سي شارب (تعتبر الأبسط) بين كل اللغات التي نعرفها
    وهناك لغة NinjaScript لمنصات الـ NinjaTraders وهي نفسها لغة C++
    وغني عن القول أن منصات الميتا على الأرجح هي C# مع شوية أمور خاصة بـ MQL --- والدليل اكتب كلمة as في محرر الميت ستظهر لك باللون الأزرق وكلمة as تعتبر reserved word مع C#


    وهناك لغات تفهمها المنصات التي تعتمد على API مثل منصة TWS مع انتراكتيف بروكرز, مثل لغة C++ ولغة الجافا ولغة C# ولغة البايثون والاكسل و IDE ActiveX
    وهناك لغة REST رأيت بعض الوسطاء يستخدمونها--وأيضا ال MATLAB-Siumlik رأيت بعضهم يستخدمها, ولغة R تستخدم في بعض التطبيقات,
    وهناك منصات لا اعلم يستخدمون أي لغة مثل ساكسو بانك او مثل نوع منصات فوركس-يارد القديمة ولكن لا أعتقد تخرج عن اللغات الرئيسية الثلاث الجافا والسي بلس بلس و السي شارب.

    عموماً نرجو المتابعة
    والله الموفق والمسدد

  2. #2
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    Java في سطرين عبارة عن class نعطيها اسم وهذا الاسم يستخدم كأداة تعريف متغيرات وهي على غرار التعاريف البسيطة مثل int و double الخ
    ولكل class هناك constructor يحمل نفس الاسم ولكن مع قوسين -- قد تكون فارغة وقد يكون بداخلها متغيرات
    وكل class تحتوي على متغيرات variables وعلى دوال methods
    ولابد يكون هناك مفتاح لبدء البرنامج--يعني البرنامج يبدأ من اي سطر في الكود؟؟ وهذا المفتاح هو دالة main من نوع public static void
    واي مبتدئ من اجل التعلم والتطبيق لابد يفهم اولا دالة الطباعة System.out.printl() f

    تأمل الصورة التالية: وهو class فارغ الا من دالة main
    class يعني لايوجد فيه متغيرات ولادوال على مستوى الـ class
    اضغط على الصورة لعرض أكبر

الاســـم:	Untitled.png
المشاهدات:	6
الحجـــم:	54.4 كيلوبايت
الرقم:	520872

    لماذا طبع أولا 0 ثم 3 ثم 1 ثم 3 ثم 2 ؟؟؟
    لاحقاً
    ولكن main هنا تعتبر نقطة بدء البرنامج فهي الـ event-handlers
    مع دوكاسكوبي لديهم event-handlers حسب الحاجة وهي تأتي مكان main هنا.
    أبرزها:
    OnStart وهي تماثل OnInit مع الميتا تريدر
    OnTick وهي تماثل OnTick مع الميتا تريدر
    OnBar لامماثل لها في الميتا بشكل مباشر
    OnMessage لامماثل لها في الميتاتريدر بشكل مباشر
    OnStop وهي تكافئ Denit في الميتا
    OnAccount ولامماثل لها في الميتا

    اضغط على الصورة لعرض أكبر

الاســـم:	4546.png
المشاهدات:	7
الحجـــم:	106.3 كيلوبايت
الرقم:	520876

  3. #3
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    وتقاربها كثيرا الدوال مع cTrader-cAlgo
    اذا تلاحظ اول حرف c دلالة على لغة C أو C++
    اضغط على الصورة لعرض أكبر

الاســـم:	4546.png
المشاهدات:	4
الحجـــم:	42.2 كيلوبايت
الرقم:	520878

  4. #4
    الصورة الرمزية rain_man
    rain_man غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2011
    الإقامة
    مصر
    المشاركات
    199

    افتراضي

    انا عندي خبرة بسيطة بلغة الجافا وعندي طلب بسيط
    اذا كان هناك بعض المصادر التعليمية الجيدة لتعلم الاكسبيرتات بلغة الجافا لمنصة jforex اذا كانت فيديو اوكتب سواء عربي او انجليزي ارجو ان تزودني بها لاني مهتم لتعلم هذه اللغة
    شرحك سهل وبسيط
    متابع معك

  5. #5
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    للأسف المراجع شبه معدومة ولايوجد الا تطبيقات مباشرة--بعض البرامج الحاهزة
    ولكن كلما ازددت قوة في الجافا كلمها اتقنت jforex--اعتبرها احد عناوين الجافا

    مثلا لو اردت انت تصميم تطبيق (وهو في الأخيرة عبارة classes + interfaces) حينها jforex كهذه التطبيقات, لأنها أيضا (classes+interfaces)
    وتجدها في API- Ducascopy
    https://www.dukascopy.com/client/jav...w-summary.html
    هنا
    ---
    في موقعهم تطبيقات وشروح بسيطة تفترض المامك الكبير بالجافا
    بعد استعراض اكثرها, لابد يكون مر عليك في الجافا مفاهيم كثيرة, مثل ال inheritance+ abstraction-encapsulation-polymorphism
    ناهيك عن ال inner classes_inner interfaces ولاحظت كثرة استخدامهم لها
    وجميع شروط الجافا لابد تتنفذ بحرفية--مثلا أي method مرتبط بـ ال Inteface لابد كلها تكون implemented--مثلا ستلاحظ هناك تطبيقات يكفيك فيها دالة OnStart ولكن لغة الجافا تجبرك على وجود الدوال الخمس الأخرى Ontick-OnStop الخ--تجدههم يكتبونها ب ببدي body فارغ
    أيضا لاحظت في بعض اتطبيقات استخدام مفهوم ال multithreading-- او multitasking --يعني ممكن خبيرك ينفذ على زوجين او 100 في نفس اللحظة من الزمن
    أيضا مفاهيم GUI بسكل عام تستخدم بكثرة مثل صنع جدول او وضع widget على التشارت الخ وكلها تفاعلية--يعني مثلا ايقونة ترسمها برمجيا على التشارت--وتضغط عليها فيضع امر ماركت

    نرجع لردك ان عندك خبرة بسيطة بالجافا---عمق هذه الخبرة اخي--الجافا لغة صارمة

  6. #6
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    في موقع دوكاسكوبي تحت هذا الرابط تجد مايشبه تعليم بعذ التطبيقات اكثر من كونه تعليمي على أسس مرتبة
    https://www.dukascopy.com/wiki/en/development
    قد يسهل الامر عليك مع شوية اجتهاد وحرص وتفرغ

  7. #7
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    أين تفتح محرر البرامج jforex
    كيف تسوي لبرنامجك compile ؟؟
    كيف تشغله على المنصة بحيث يعمل كخبير او مؤشر؟ هل هو مثل الميتا ومثل cTrader نطبقه على التشارت؟ أم ان الامر مختلف.

    بعمما تفتح المنصة تتأكد انها في وضعية Standard
    وللتأكد من ذلك تذهب الى File اعلى اليسار المنصة ثم الى WorkSpace ثم Restore Default ثم تختار Standard

  8. #8
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    لفتح المحرر
    Navigator
    right-click Strategies
    New Strategy
    موضحة على الصورة
    اضغط على الصورة لعرض أكبر

الاســـم:	4546.png
المشاهدات:	3
الحجـــم:	65.2 كيلوبايت
الرقم:	520921
    سيظهر المحرر على هذا النحو مع الديفولت(الأشياء الموجودة في أي استراتيجية) وهي عبارة عن ست دوال اجباري تكون موجودة لأن IStrategt عبارة عن Interface وقاعدة الجافا تقول لابد من وجود كل الـ Abstract methods تحت ذلك الـ Interface -- لابد تكون موجودة حتى لو ماتحتاج بعضها-- بدي فارغ.

    اسم البرنامج لابد يكون نفسه اسم الكلاس
    يستحسن تغير الاسم في الصورة اسفل من Strategy الى مايلزم--مثلا Macd_expert

    اضغط على الصورة لعرض أكبر

الاســـم:	4547.png
المشاهدات:	3
الحجـــم:	155.6 كيلوبايت
الرقم:	520922

  9. #9
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    عندما يظهر لك البرنامج جرب ان تلغي سطر //import com.dukascopy.api.*;
    لاتحذفه ولكن استخدم علامات التعليق -- دبل سلاش \\
    ستكون اغلب المتغيرات بخط احمر تحتها--يعني لم يدكرها البرنامج وبالتالي نفهم أهمية هذا السطر,

    الكود أسفل عبارة عن متغيرات ودوال
    المتغيرات variables من الان ولاحقاً لها أربعة أسماء:
    اذا كان متغير على مستوى الكلاس--خارج الدوال نسميه Field
    اذا كان متغير داخل الدوال نسميه Local variable
    اذا كانت المتغيرات توجد في تعريف الدالة method signature نسميه Parameter
    اذا كانت متغيرات في دالة تستدعي هذه الدوال نسميه arguments هروبا من كلمة variable لأنك أحيانا تستدعي بقيم صريحة وليس بمتغيرات.

    فلابد أن تميز هذه المعاني بشكل دقيق والشرح هنا يغنيك عن كل المراجع.
    انظر للصورة:
    اضغط على الصورة لعرض أكبر

الاســـم:	4547.png
المشاهدات:	4
الحجـــم:	244.0 كيلوبايت
الرقم:	520923

  10. #10
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    باستخدام الجافا العادية نستخدم System.out.println()
    ولابد في البدء مع jforex نعرف المقابل لها او كيف يتم هذا الأمر:
    اذا تلاحظ الصورة السابقة تجد فيها:
    كود:
        private IEngine engine;
        private IConsole console;
        private IHistory history;
        private IContext context;
        private IIndicators indicators;
        private IUserInterface userInterface;
    وأهمها كمبتدئين هي:
    private IContext context

    انظر لها الان على انها المتغير الذي يربطك بهذه المنصة تحديدا ونعني منصة dukascopy
    IContext عبارة عن Interface أيضا وتحتها دوال كثيرة جدا اطلع عليها هنا:
    https://www.dukascopy.com/client/jav.../IContext.html


    في وثائق دوكاسكوبي تقرأ:

    public interface IContext
    Gives access to the various parts of the system
    يعني هي قناة العبور للمنصة.

    أحد هذه الدوال اسمها getConsole()

    وهي دالة الـ return الذي يخصها من نوع IConsole
    يعني دالة موجودة تحت الـ IContext Interface ولكنها من نوع IConsole

    وبالتاللي عندما نذهب لهذا النوع IConsoles سنجد ايضا تحته الدوال التي تخصه
    ورابطه هنا:
    https://www.dukascopy.com/client/jav.../IConsole.html

    ومنها دالة getOut()

    وهنا نخرج من دوال jforex الى الجافا بشكل عام -- حيث نجد انها تحت او من نوع: java.io.PrintStream

    وتحت هذا الـ java.io.PrintStream نجد دالة println كما هو معلوم لأي مبتدئ جافا

    اذا لكي نطبع اي شيء في المنصة -- نلخص كل ماسبق:

    IContext context
    وقلنا أن الكائن context تحته getColsole()

    تصبح:
    context.getConsole()

    وقلنا أن getConsole تحتها getOut
    context.getConsole().getOut()

    و getOut تحتها println()
    تصبح:
    context.getConsole().getOut.println()


    والتالي مثال تطبيقي---تم حذف جميع المتغيرات التي لن نستخدمها في البدء مع بقاء الدوال لأنه اجباري تكون موجودة.

  11. #11
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    الخبير أسفل بسيط جدا--لكي تعرف 1) الكمبلة 2) وكيفية تشغيله في المنصة 3) وكيف تفتح log تنبيهات هذا الخبير تحديداً--
    هدفه طباعة كلمة "السلام عليكم" في صفحة الرسائل لهذا الخبير.
    ونريده مرة واحدة فقط, وبالتالي نضعه تحت OnStartلأن البرنامج يمر عليها مرة احدة فقط وهي لحظة تشغيل الخبير.\

    يعني داخل جسد OnStart نضع السطر التالي بناء على الرد السابق:

    كود:
    context.getConsole().getOut.println("السلام عليكم")
    والكود كاملاً:
    كود:
    package jforex;
    import java.util.*;
    import com.dukascopy.api.*;
    public class SalmanExpert_01 implements IStrategy
    {
        private IContext context;
        public void onStart(IContext context) throws JFException
        {
            this.context = context;
            this.context.getConsole().getOut().println("السلام عليكم");
        }
        public void onAccount(IAccount account) throws JFException {}
        public void onMessage(IMessage message) throws JFException {}
        public void onStop() throws JFException {}
        public void onTick(Instrument instrument, ITick tick) throws JFException {}
        public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}  
    }
    الكمبلة Compile ---- اضغط حسب ماهو موضح في الصورة -- لاتنسى يكون اسم البرنامج باسم ال class وهو في البرنامج أعلاه SalmanExpert_01


    اضغط على الصورة لعرض أكبر

الاســـم:	4547.png
المشاهدات:	3
الحجـــم:	175.5 كيلوبايت
الرقم:	520927

    تترك المحرر وتذهب للمنصة وتشيك منطقة جدول الرسائل: اذا كان الخبير ناجح ودون أخطاء كمبلية تستطيع استخدامه--يعني لابد تقرأ كلمة successful (سِكْسَااسْفُلْ)

    انظر للصورة:
    اضغط على الصورة لعرض أكبر

الاســـم:	4546.png
المشاهدات:	1
الحجـــم:	222.3 كيلوبايت
الرقم:	520928


    الان كله تمام--تبقى فقط تشغيله لنرى نتيجة الخبير وهي طباعة السلام عليكم في ال "كونسول" -- يعني جدول الرسائل ولكن الخاص بهذا الخبير:

    كيف نشغله؟
    رايت-كلك على الخبير تحت custom كما في الصورة الاخيرة اعلاه, ثم اختر local run----الان شغال.
    كل شيء موضح على الصورة التالية:
    اضغط على الصورة لعرض أكبر

الاســـم:	4545.png
المشاهدات:	1
الحجـــم:	168.4 كيلوبايت
الرقم:	520929
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 4547.png‏  

  12. #12
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    والآن اريدك ان تنقل سطر الطباعة الى دالة OnTick ثم دالة OnBar وهكذا
    كود:
    context.getConsole().getOut.println("السلام عليكم")
    أولا كان في OnStart وبالتالي مرة واحدة فقط طبع عبارة "السلام عليكم"


    مع OnTick نتوقع يعيد طباعتها مع كل تكة

  13. #13
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    انظر للصورة تكات كثيرة ومع كل تكة يطبع "السلام عليكم"
    وهنا هو ليس مثل الميتا حيث ليس له له علاقة بالتشارت نهائيا بل يأخذ تكات جميع الأزواج المفعلة.

    احفظ الكلمة هذه "subscribed instruments" ورجاء كررها كثيراً وكأنك سمعتها كثيراً في حياتك.
    اضغط على الصورة لعرض أكبر

الاســـم:	4545.png
المشاهدات:	2
الحجـــم:	145.3 كيلوبايت
الرقم:	520930

  14. #14
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    OnBar
    هنا التحديث لهذه الدالة يتم مع نشوء شمعة جديدة لكل الأزواج المفعلة "subscribed instruments" التي قلنا كرروها كثيرا في البداية.
    شمعة أي فريم؟

    ج: شمعة فريمات المنصة القياسية بداء من فريم 10 ثواني وانتهاء بفريم الشهري.
    يعني كل 10 ثواني تحدث, ثم كل دقيقة تحديث(فريم الدقيقة) ثم كل 5 دقائق تحديد (فريم الخمس دقائق)

    وبالتالي اول خمس دقائق--نتوقع OnBar تتحدث, 30+5+1 = 36 مرة
    10 ثواني: 30 مرة (الخمس دقائق يوجد فيها 30 مرة 10 ثواني)
    1 دقيقة: 5 مرات (الخمس دقائق فيها عدد دقائق يساوي 5)
    و 1 لفريم الخمس دقائق نفسه.

    انت بنفسك الان استخدم الطباعة تحت OnBar وراقب

    كود:
        public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException 
    {
    this.context.getConsole().getOut().println("onBar");
    }

  15. #15
    تاريخ التسجيل
    Mar 2020
    الإقامة
    السعودية
    المشاركات
    8,531

    افتراضي

    انظر للصورة أسفل على رأس الدقيقة 55 نعلم انه سينشأ شمعة جديدة فريم خمس دقائق (وبناء عليه شمعة جديدة فريم دقيقة ثم من باب أولى شمعة جديدة فريم 10 ثانية)
    اضغط على الصورة لعرض أكبر

الاســـم:	4544.png
المشاهدات:	3
الحجـــم:	137.7 كيلوبايت
الرقم:	520944
    10 ثانية لاتوجد في منصات الميتا تريدر.

    تلاحظ انها تكررت 3 مرات عند الدقيقة 55 (الوقت في الصورة 12:55:00)

    لماذا تكررت ثلاث مرات؟
    ج: لأننا أنا فعلت 3 أزواج

    انظر للصورة:
    اضغط على الصورة لعرض أكبر

الاســـم:	4545.png
المشاهدات:	2
الحجـــم:	156.8 كيلوبايت
الرقم:	520945

صفحة 1 من 26 123456711 ... الأخيرةالأخيرة

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17