النتائج 16 إلى 30 من 378
- 04-03-2020, 04:58 PM #16
جزاك الله خير من أكثر المواضيع إفادة
- 04-03-2020, 05:04 PM #17
كيفية تفعيل الأزواج:
1) اما يدوي من خلال المنصة وسيتم توضيحه بصورة--نريد تفعيل زوج GBPJPY -- على المنصة الآن زوجان مفعلان والثالث سيكون GBPJPY
2) أو برمجياً من خلال الدالة الخاصة بتفعيل زوج أو أكثر مثل وهي: setSubscribedInstruments
وهي دالة من نوع void يعني لاتعيد قيمة فقط تغير وضع الزوج الى مفعل.
وهي أيضا مثل getConsole التي تحدثنا عنها--يعني احد الدوال تحت الانترفيس IContext
يعني يتم استدعاءها من خلال context ثم نقطة "." ثم اسم هذه الدالة وبين قوسيها الأزواج التي نريد تفعيلها وسيتم شرحها بمثال.
انت الآن اصبحت تعرف دالتين مهمتين تحت IContext Interface
واصبحت تعرف متى تحدث الدوال الست الرئيسية في IStrategy Interface
واصبحت تعرف كيف تحرر برنامجا بسيطا وكيف تشغله في المنصة
للمذاكرة ابحث وادرس السؤالين التاليين:
1 - ادرس foreach في الجافا (تكتب for' فقط) --- ماذا تفرق عن for العادية؟
2 - ادرس من خلال البحث الـ Set Interface و HashSet Class
في الجافا - ماهي أهميتها ومتى تتذكر استخدامها؟
عن\ البحث والدراسة ابعد عن هذنك مفهوم الفوركس والمنصة--ادرسها بشكل مجرد كلغة جافا.
- 04-03-2020, 05:06 PM #18
ثم بعد ذلك ولكن رجاء دون تعمق حتى هذه اللحظة ا قرأ بشكل عام هنا: --يعني قراءة سطحية عابرة في هذه المرحلة
getSubscribedInstruments
https://www.dukascopy.com/client/javadoc3/com/dukascopy/api/IContext.html#setSubscribedFinancialInstruments-java.util.Set-boolean-
- 04-03-2020, 05:58 PM #19
جافا بحتة:
Set Interface
الصورة أسفل قد دققتها عدة مرات وهي دقيقة جدا وأصح صورة عن Set عن أي صورة أخرى قد تجدها في أي موقع--اعتقد صور كثيرة جدا
المربع الذي خلفيته بيضاء يعني Interface بينما اي لون اخر يعني class
ونعلم ان الـ class implements interface ----- يعني الكلاس تنفذ دوال الانترفيس.
وعن foreach ارجو ان تقرأ هنا شرح بشيط بمثال بسيط.
https://www.w3schools.com/java/java_for_loop.asp
في السي شارب C# تكتب foreach ومع الجافا تفهم من السياق انها هكذا ولكن تكتب for
يسمونها for المطورة. وهي مطورة فعلا, ولكن مخصصة للمصفوفات 1) معلومة العناصر سلفاً, 2) ويبدأ الاندكس الخاص بها من 0 ----3) ومقدار الزيادة 1
السطرين أسفل زي بعض 100% لمصفوفة من خمسة عناصر
int[] ar={1,2,3,4,5}
كود:for( int i=0 ; i<5 ; i++ ) print(arr[i]) ;
كود:for( int j : arr ) print(j) ;
- 04-03-2020, 06:50 PM #20
ويوجد في الجاقا فصل كبير عن ما يسمى Collection Framework
وتحته interface Collection و Interface Map
وتحت Collection Interface يوجد ث انترفيسات فرعية شهيرة وهي:
List
Set
Queue
هذه كلها تستخدم في بناء المعلومات المجدولة data structure
نحن هنا نريد تفعيل زوج أو أكثر, لذا هل نختار Set أم List أم Queue ؟؟
الإنسان الذكي الفاهم يختار ايش؟؟
اذا فهمت ايش تعني كل واحدة, حتماً ستختار Set لسببين:
1) عدم التكرار -- - Set تلغي العناصر المكررة بينما List تقبل التكرار (هل منصتك يوجد فيها زوجين بنفس الاسم؟؟؟ )
2) لايهم الترتيب
هذه ابرز خاصيتين تميز Set عن النوعين الاخرين--والتطبيق هو الذي يحدد الخيار الأذكى (عدم التكرار --- عدم اهمية الترتيب سواء ابجديا او غير ذلك)
اضف الى ذلك انهم في دوكاسكوبي مشوا مع الخيار الأذكى وحددوا Set في عملية تفعيل تفعيل الازواج "subscribtion"
يعني نحن نريد تفعيل عدة أزواج, ونعلم ان الازواج unique--يعني لاتوجد زوجين بنفس الاسم في المنصة, والترتيب هنا لايهمنا--ممكن انا حاب افعل المجنون والاوسي مثلا!-- الحديث عن ترتيبها ابجديا عبث وترف ولايجب اساسا ان يخطر على البال
نحن نحوم حول كيف برمجيا نفعل زوج أو أكثر بعد ان عرفنا ومن خلال امثلة مصورة كيلفية التفعيل اليديوي من خلال ادوات المنصة.
وهنا نفترض انكم كمبرمج جافا أو C++ الخ أنك ملم باساسيات ال data structure ويهمنا هنا ابسط هذه الاساسيات, وهو كيفية انشاء كائن لتفعيل مجموعة من الأزواج
وكلمة مجموعة هي نفسها كلمة Set
يتبع . . .
- 04-03-2020, 07:44 PM #21وهنا نفترض انكم كمبرمج جافا أو C++ الخ أنك ملم باساسيات ال data structure ويهمنا هنا ابسط هذه الاساسيات, وهو كيفية انشاء كائن لتفعيل مجموعة من الأزواج
وكلمة مجموعة هي نفسها كلمة Set
لابد أولا نعرف متغير وليكن باسم symbols ويجب ان يكون من نوع Set -- وSet هنا مجموعة بيانات--نوع هذه البيانات حسب حاجتنا هو Instrument وهو نوع صنعته دوكاسكوبي لتعريف الأزواج.
ولأن Set يعتبر Interface فإنه لايمكن جافويا خلق او انشاء كائنات من خلاله--بل لابد ان يتم الامر من خلال احد الكلاسات المنفذة له مثل HashSet
لأن HashSet عبارة عن class اذن تستخدم لانشاء الكائنات واخترنا اسم الكائن هنا symbols --راجع مبادئ الجافا.
وتستخدم كلمة new دائما في الجافا لانشاء الكائن متبوعة بكونتستركتور الكلاس - يعني اسم الكلاس بقوسين وهو هنا HasSet()
كل هذا نعبر عنه بالسطر التالي:
كود:Set<Instrument> symbols = new HashSet<Instrument>();
ولكن لم نمنح قيم.
دائما ردد الثلاث كلمات: 1) تعريف الكائن "المتغير بمفاهيم OOP" ---- ثم 2) انشائه ثم 3) منحه قيم initializtion
السطر السابق خلق مجموعة ولكن فارغة "فاي" -- مجموعة دون عناصر ونريد الإضافة لها:
يوجد مايسمونه algorithms وهي دوال خاصة من نوع static وعند المتخصصين جدا لايستخدمونها كمرادف لكلمة method
ومنها مع Set دالة add ووظيفتها إضافة العناصر للمجموعة --
من خلال اسم الكائن "المتغير symbols" يتم المرور لهذه الدالة الخاصة ومن خلال أداة المرور نقطة "."
نضيف أولا المجنون gbpjpy--لابد ان تكون الكتابة صحيحة مثل ماهو موجود في المنصة:
يتم الأمر على النحو التالي:
كود:symbols.add(Instrument.GBPJPY); symbols.add(Instrument.AUDUSD);
هل تم تفعيلها؟؟؟ ج: لا---حتى الان نحن خارج Jforex ونتحدث جافا عامة.
لتفعيلها نستخدم الدالة المصصممة لهذا الغرض وهي setSubscribedInstruments وتتكون من متغيرين:
الأول المجموعة وهي هنا symbols
والثاني من نوع boolean ونختاره true للتفعيل و false لالغاء التفعيل وحذذفها من القائمة المرئية في المنصة.
يتم الامر على النحو التالي:
كود:context.setSubscribedInstruments(symbols , true);
ج: راجع الردود السابقة فقد تم شرحها بالتفصيل الممل.
قبل تطبيق الخبير اسفل--اولا الخ تفعيل كل العملات او اترك واحدا على الاقل: ثم طبق الخبير--هل تلاحظ ظهور هذين الزوجين اذا لم يكونا موجودين؟؟
جوابك يجب ان يكون نعم.
س: اين يجب ان نضع الاكواد اعلاه.
ج: الافضل تحت دالة OnStart لأن التفعيل يتم مرة واحدة ويصبح من البلاهة وضعها تحت OnTick او غيرها--تفعيل المفعل؟؟؟ !! واثقال البرنامج!!
انسخ الكود اعلاه ثم حفظ ثم كمبلة ثم تطبيق مع مراقبة ---لاتنسى رؤية الازواج في المنصة قبل التطبيق لتلاحظ الفرق وترى اضافة هذين الزوجين للقائمة اذا كانت اساسا غي.
كود:package jforex; import java.util.*; import com.dukascopy.api.*; public class SalmanExpert_03 implements IStrategy { private IContext context; public void onStart(IContext context) throws JFException { Set<Instrument> symbols= new HashSet<Instrument>(); symbols.add(Instrument.AUDUSD); symbols.add(Instrument.GBPJPY); context.setSubscribedInstruments(symbols, true); } 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 {} }
والخبير شغال--اضغط رايت كلك على نافذة العملات المفعلة--نافذة instruments
ثم اختر remove all --- هل سيزيلها كلها؟؟
اوقف الخبير
هل سيلغي كل شيء؟
سيلغي كل شيء الا الازواج الاجبارية وهي الازواج التي يوجد عليها 1) صفقات مفتوحة او 2) انتظار او 3) لديها تشارت مفتوح.
- 04-03-2020, 07:47 PM #22
- 04-03-2020, 08:32 PM #23
ذكرنا انك لو وضعت false سيلغي التفعيل
تصحيح:
لايتم الالغاء الا من خلال دالة أخرى معاكسة اسمها unsubscribeInstruments(java.util.Set<Instrument> symbols) وتوجد تحت IConsole أيضا
وكما تلاحظ المتغيرات داخل اقواسها من نوع Set أيضا.
ضع هذا السطر مكان السطر المعاكس له في البرنامج-
context.unsubscribeInstruments(symbols);
-وسيلغي برمجيا تفعيل الأزواج التي حددتها في الكود, احرص على اختيار ازواج مفعلة أساسا لترى الإلغاء مع التنبيه ان 1) أي زوج عليه صفقة او 2) له تشارت مفتوح او 3) تحت سيطرة خبير اخر يفرض تفعيله لن يلغى حتى زوال هذه الأمور مثل اغلاق التشارت واغلاق الصفقات و تعطيل الخبير الاخر.
الان أصبحت تعرف 3 دوال من دوال IConsole -- وهو أداة الربط أو المرور مع سستم المنصة.
- 04-03-2020, 09:13 PM #24الان أصبحت تعرف 3 دوال من دوال IConsole -- وهو أداة الربط أو المرور مع سستم المنصة.
الآن لدينا أزواج مفعلة في المنصة -- هل يوجد دالة تكشتف الأزواج المفعلة برمجياً؟
بالعين المجردة نحن نعرفها ولكن الخبير يريد ان يبني صفقاته على الأزواج المفعلة ولتكن ال 28 زوج؟
كيف للخبير ان يعرفها؟؟
ج: من خلال دالة: getSubscribedInstruments
اضف السطر التالي اخر دالة OnStart
كود:context.getConsole().getOut().println(this.context.getSubscribedInstruments());
انظر للصورة, وراجع دروس الجاف الخاصة ب Set وتبيعاتها مثل HashSet او HashLinkedSet لتعرف كيف تحدد عنصر معين حسب مكانها في المصفوفة او تحذف الخ دوالها
- 05-03-2020, 07:22 AM #25
وبمناسبة الحديث عن انواع ال Collections---لو جربت List وتبيعتها ArrayList مكان Set وتبيعتها HashSet---هل سيقبلها البرنامج؟
؟
لن يقبلها لان بارامترز setSubscribedInstruments أو getSubscribedInstruments أو unsubscribeInstruments يتم انشائها من خلال HashSet (الكلاس المنفذ لدوال Set) فقطعت علينا دوكاسكوبي طريق الاجتهاد وأصبحت الأمور صارمة ومحددة وواضحة وليس لها الا جواب واحد ولاتقبل التخبط
.
اريدك ان تتصور الأوامر Orders -- هل تتوقع نستخدم Set او List ؟؟؟
الأوامر بعض قيم أعمدة جداولها قد تتكرر--مثلا انت قد يكون لديك 100 صفقة على eurusd------ يعني هذا الزوج تكرر 100 مرة!!!
وأيضا سعر الدخول قد يتكرر وقد لايتكرر---مجرد وجود احتمال التكرار يجعلك تختار List
وإاياكم اخي أسامة و بالتأكيد اعتز بمعرفتك واعتز بشهادتك
لايتم الالغاء الا من خلال دالة أخرى معاكسة اسمها unsubscribeInstruments(java.util.Set<Instrument> symbols) وتوجد تحت IConsole أيضاآخر تعديل بواسطة سلمان_العتيبي ، 05-03-2020 الساعة 07:28 AM
- 05-03-2020, 07:34 AM #26
مجهود تشكر عليه , شكلها ستكون دورة قوية، هل من بعد هذة الدورة ممكن صنع اي مؤشر او اكسبيرت وهل تغني عن ال mql ؟
آخر تعديل بواسطة سميرعلي ، 05-03-2020 الساعة 07:43 AM
- 05-03-2020, 07:45 AM #27
اؤمن بالأمثلة المكثفة واؤمن أكثر بالتكرار الملل في بدايات اي علم
مثال على OnBar
كود:public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar)
البارامترز التي تراها period و askBar و bidBar و instrument
للأهمية اريدك ان تطبعها في الكونسول وتراقب لمدة خمس دقائق-يعني تطبع أولا أي واحد من الثلاثة مع instrument -- واحرص ان لايكون عدد الأزواج المععلة اكثر من 2 او ثلاثة. اثنين يكفي
كود:package jforex; import java.util.*; import com.dukascopy.api.*; public class SalmanExpert_04 implements IStrategy { private IContext context; public void onStart(IContext context) throws JFException { this.context=context; } 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 { context.getConsole().getOut().println("OnBar: "+instrument+" "+period); } }
الكود أعلاه يطبع مسمى الدالة كلمة OnBar ثم الزوج اسم الزوج الذي صار عليه تغير تسبب بإاثرة أو عمل OnBar ثم الفريم الذي حدث--يعني اللي صار عليه شمعة جديدة او بار جديد---لاتنسى مسمى الدالة OnBar
الناتج مصور:: ليش يوجد زوجين اخرين على فريم الدقيقة باسم SAN.FR/EUR و IMT.GB/GBX
- 05-03-2020, 07:56 AM #28
الآن وهو الأهم ننتقل للمتغير الأخر bidBar نفس الكود السابق ولكن نضع المتغير birBar مكان الفريم period
كود:context.getConsole().getOut().println("OnBar: "+instrument+" "+bidBar);
فهذا المثال مدخل لما سنتحدث عنه اليوم, استدعاء احد قيم الكائن مع الرجوع المتكرر لـ API دوكاسكوبي.
انظر للصورة أي متغير من نوع IBar عبارة عن كبسولة لست متغيرات او قيم. (تم كبسلتها تحت bidBar وهو متغير انت اخترت اسمه هكذا وممكن تغيره)
ترى:
1-وقت البارة --- بالملي سكند منذ سنة 1970--يعني مثل الميتا تريدر
2-الافتتاح O
3- الاغلاق C
4-الهاي H
5-اللو L
6-الفوليوم V
وهي بيانات الشمع المنتهية --يعني اخر شمعة انتهت--يعني الشمعة رقم 1
وهذه الاسعار مبنية على Bid ولكن اذا تريدها مبنية على Ask اختر طباعة askBar بدلا من bidBar
- 05-03-2020, 08:00 AM #29
كيف تستخلص قيمة واحدة من هذه القيم ذات العلاقة بالمتغيرين من نوع IBar؟
عم عدد المتغيرات او الدوال تحت IBar مع دوكاسكوبي؟
استخلاص قيمة واحدة مر علينا كثيرا ويحدت باستخدم النقطة "." --- النقطة تسمى access modifier
مثلا جملة الطباعة فيها 3 نقاط وجملة استدعاء تفعيل الازواج نرى هذه النقطة وهدفها استخلاص دالة او قيمة من الكلاس ذي العلاقة.
IContext مثلا تحتها عشرات الدوال--ولكن اذا اردنا احد هذه العشرات نستخدم النقطة ونحدد هذه الدالة بالاسم ولاعلاقة لنا بالبقية.
- 05-03-2020, 08:21 AM #30
في البرنامج ضع نقطة "." بعد bidBar في الصورة--ستلاحظ الاعضاء ذات العلاقة بهذا المتغير من نوع IBar --
1) بعضها مباشر -- يعني ترى اخر السطر IBar بالرمادي
2) بعضها موروث inherited غير مباشر لاباء IBar مثل Object و ITimeData
ارجع لموقع دوكاسكوبي API:
ستجد 5 دوال مباشرة وهي الهاي واللو والاوبن والاغلاق و الفوليوم
ودالة غير مباشرة وهي الوقت getTime للبارة -- موروثة من أعلى
نريد الان ان تطبع فقط قيمة واحدة (فيما بعد سنقول اختيار قيمة واحدة حكمت استارتيجيتك باستخدامها)
دعنا نختار الاغلاق getClose()
كود:context.getConsole().getOut().println("OnBar: "+instrument+" "+bidBar.getClose());
من غير النقطة طبع الكل
بالنقطة طبع عنصر واحد من الكل
جافا: Fields+Methods = Members