لاحظ وفي تشارت مستقل لأن إعداد الدالة setOverChart قيمتها false
الملف المرفق 521171
بعد التطبيق على التشارت:
الملف المرفق 521170
لو كانت true سيضعه فوق التشارت.
لاحظ وفي تشارت مستقل لأن إعداد الدالة setOverChart قيمتها false
الملف المرفق 521171
بعد التطبيق على التشارت:
الملف المرفق 521170
لو كانت true سيضعه فوق التشارت.
لن يكون هناك مشاكل مع IndicatorInfo نفسهااقتباس:
لو كانت true سيضعه فوق التشارت.
ولكن سينشأ مشكلة من كلاس آخر بسبب ان رسم الماكد بعضه ليس خطي--يعني فيه هيستوغرام -- وهو لايتوافق مع التشارت الاصلي not-compatible
وبالتالي غيرها من الهيستوغرام الى خطي
الملف المرفق 521172
من الكود الأصلي تحت متغيرات اعداد الـ output تجد الاسطر التالية:
الملف المرفق 521173
نغير الأسطر الى LINE
الملف المرفق 521174
أو حتى DASH_LINE
ولأن قيمها صغيرة جداً, أقل من 0.01 اذا طارت في السماء لن تراها بوضوح حتى تسوي كومبرس لمحور الصادات!!
لذا تعتبر من مؤشرات الشاشة المستقلة وليست مثلا مثل المتوسطات التي المكان الافضل لها على التشارت!!
الملف المرفق 521175
في الصورة الماكد يوجد على التشارت ولكنه في الأسفل حول محور الصفر! لاتنسى بعض قيمه بالسالب
نعيد الوضع كما كان, ثم نتحدث عن الدوال الأخرى لـ IndicatorInfo
سواء من خلال مثال الماكد او من خلال مثالنا الأول, فأنت الآن كمبتدئ لايهمك نوع المؤشر أو هدفه بقدر مايهمك القدرة البرمجية لتصميم اي مؤشر, وبناء عليه لابد من سعة الإطلاع ويستحسن الإحاطة بكل شيء علما حول هذا الأمر.
عرفنا 18 دالة!! 9 و 9!!
كم عدد الدوال الكلي؟
كنت قد صممت سابقا خبيرا يطرح لك دوال اي كلاس او اي انترفيس في الكونسول مرقمة على 3 ابواب:
1) يطرح الفليدز مرقمة Fields
2) يطرح الكوسنتركتور مرقمة Constructors
3) يطرح الدوال مرقمة Methods
انسخه من فضلك واحفظه تحت Strategy فولدر ثم كمبلة: (برنامج خطير :) ) ويغنيك عن الذهاب الى API كل شوي! الا بحثا عن التفاصيل,
كود:package jforex;
import java.lang.reflect.*;
import java.lang.Class;
import com.dukascopy.api.*;
public class DUKA_REFLECTION_anyClass implements IStrategy
{
private IContext context;
public void onStart(IContext context) throws JFException
{
this.context = context;
try
{
Class c=Class.forName("com.dukascopy.api.indicators.IndicatorInfo");
Method m[]=c.getDeclaredMethods();
for(int i=m.length-1;i>=0;i--)context.getConsole().getOut().println((i+1)+"-----"+m[i]);
context.getConsole().getOut().println("Methods........");
Constructor con[]=c.getDeclaredConstructors();
for(int i=con.length-1;i>=0;i--)context.getConsole().getOut().println((i+1)+"-----"+con[i]);
context.getConsole().getOut().println("Constructors........");
Field f[]=c.getDeclaredFields();
for(int i=f.length-1;i>=0;i--)context.getConsole().getOut().println((i+1)+"-----"+f[i]);
context.getConsole().getOut().println("Fields........");
}
catch (Throwable e)
{
context.getConsole().getOut().println(e);
}
}
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 {}
}
لـ IndicatorInfo Class يوجد 35 دالة و 3 كونستكتورات و 15 فيلدز
الدوال المحوطة بالأحمر -- انت already فاهمها وخالص
الملف المرفق 521176
والمثودز:
الملف المرفق 521177
درجتك الان 18 من 35--يعني انت تعرف 18 دالة من 35 دالة! لاتنسى بعضها deprecated وبالتالي درجتك اعلى من 18 على وجه اليقين.
لاحظ الكونستركتور تحت الترحيل يزيد عن التفصيلي بـ 1 بوووولين!!
الملف المرفق 521178
مارأيكم بالتطرق الى الدالة:
setDefaultLevelsInfo
الملف المرفق 521179
الجميل فيها هو التعقيد وهو ان نوع البيانات List --- يعني من عائلة الـ Collection
وهي خاصة برسم المستويات الافقية -- على النحو في الصورة:
الملف المرفق 521180
والمستويات في الصورة الاخيرة في اخر رد رسمتها انا يدوي,
كيف نرسمها برمجيا؟؟
يدوي:
وضعت الماوس على خط المؤشر ثم ضغطة واحدة ثم رايت كلك ثم اختيار edit indicator---لاحظ عنوان الشاشة في الصورة التي فيها إضافة ال levels
ثم بعلامة الزايد الخضراء اعلى اقصى اليمين اضفت الخطوط وغيرت القيم الى 0.002 سالب وموجب, مع تغيير نوع الخط ولونه الخ
لاحظ في الصورة الاولى في الرد قبل الاخير:
لِستة نوع بياناتها من نوع جديد لم يمر عليك سابقا وهو levelsInfo وبالتالي نتحدث عن كلاس إضافي في دوكاسكوبي APIكود:java.util.List<LevelInfo> levelsInfo
لستة يعني من نوع List
تحتاج 20 دقيقة صافية مركزة تقرأ في أي موقع تعليمي للمبتدئين جافا حول List
دعنا نحدد هدفنا الآن وهو رسم 4 خطوط لفل, عند 0.001 و 0.002 و سالب 0.001 و سالب 0.002 برمجياً على مؤشر الماكد أعلاه اللي شغالين عليه
يعني لِستة من اربع عناصر
اذا ترجع لموقع API للكلاس levelsInfo تجد له عدة كونستركتورات ومن ضمنها كونستركتور ببرامترز من نوع double وهو مانريده نحن لأن محور الصادات للماكد أعداد عشرية.
انظر للصورة:
الملف المرفق 521181
كلاس!! class !!
اذن نستطيع خلق كائنات من خلاله -- هو نوع!
نريد اربع كائنات, لأننا نريد رسم اربع مستويات؟ داخل الكوسنتركتور نضع قيمة من نوع دبل ونعرف قيمنا الاربع من نوع double وهي
0.001
0.002
-0.002
-0.002
سنسمي هذه الكائنات L1 و L2 و L3 و L4
الكود اسفل ينشئ اربع كائنات من نوع levelsInfo :
ايش نسوي بعد كذا؟؟كود:
LevelInfo L1=new LevelInfo(+0.001);
LevelInfo L2=new LevelInfo(-0.001);
LevelInfo L3=new LevelInfo(+0.002);
LevelInfo L4=new LevelInfo(-0.002);
نضيفها الى اللستة؟
ليش؟
لأن الدالة الخاصة بالمستويات, المتغيرات داخل اقوسها من نوع List وقيم عناصر هذه اللستة من نوع LevelInfo
نحن الان تخلصنا من قيم العناصر--يعني انشأناها ومنحناها قيم حسب الكوسنتركتور المناسب.
لستة!! يعني نحتاج انشاء متغير جديد؟
ولكن List عبارة عن Interface وليس class وبالتالي يستخدم للتعريف فقط ولكن لايمكن ان يستخدم للانشاء باستخدام new ??
؟؟؟
مالحل؟؟
الحل نستخدم احد الكلاسات التي تنفذ هذا الانترفيس ونعني تحديدا الكلاس الشهير ArrayList ؟؟
اذن التعريف من خلال List بينما الانشاء او خلق الكائن الجديد من خلال ArrayList لأن الأخيرة class وليست interface
انظر للصورة, فنحن محكومين او مجبورين على ان تكون لستة List قيم من نوع LevelInfo
الملف المرفق 521182