النتائج 1 إلى 4 من 4
- 17-11-2012, 01:10 PM #1
الاستاذ العزيز مستر دولار رجاءا المساعدة
السلام عليكم ورحمة الله وبركاته
أخي مستر دولار في المرفقات مؤشر التايمنج المعروف لمصطفى بالخياط (نسخة الشموع)
مشكلة المؤشر عند وضعه على الشارت فان عمل المنصة يتباطأ بشكل كبير ورغم محاولاتي لمعرفة السبب إلا انني لم افلح فالرجاء الشديد أخي العزيز ان تنظر لهذا المؤشر وحل هذه المشكلة
- 17-11-2012, 10:18 PM #2
يوجد أكثر من كود في المؤشر يمكن تعديله لزيادة سرعته
الجزء الأول هو الحلقه المسئوله عن العمليه الحسابيه
فيمكن بدلا من إستخدام حلقتين for نجعل العمليه الحسابيه في حلقه واحده لكن سنحتاج إلى متغير إضافيكود PHP:for (int l_index_36 = l_index_40; l_index_36 < NumBars + l_index_40; l_index_36++) ld_12 += (High[l_index_36] + Low[l_index_36]) / 2.0;
ld_20 = ld_12 / NumBars;
ld_12 = 0;
for (l_index_36 = l_index_40; l_index_36 < NumBars + l_index_40; l_index_36++) ld_12 += High[l_index_36] - Low[l_index_36];
ld_28 = 0.2 * (ld_12 / NumBars);
بدلا من ld_12
فيصبح الكود
الجزء الثانيه الكود المسئول عن رسم الخطوط على الشارتكود PHP:for (int l_index_36 = l_index_40; l_index_36 < NumBars + l_index_40; l_index_36++)
{
ld_12 += (High[l_index_36] + Low[l_index_36]) / 2.0;
ld_13 += High[l_index_36] - Low[l_index_36];
}
ld_20 = ld_12 / NumBars;
ld_28 = 0.2 * (ld_13 / NumBars);
فبدلا من إستخدام حلقه for أخرى للبحث في المصفوفه ورسم الخطوط يمكن مباشرة رسم الخطوط بعد إخراج النتيجه في الحلقة الأولىكود PHP:for (l_index_36 = 0; l_index_36 <= Bars; l_index_36++) {
l_name_44 = "TimingHL" + l_index_36;
ObjectCreate(l_name_44, OBJ_TREND, li_8, Time[l_index_36], g_ibuf_80[l_index_36], Time[l_index_36], g_ibuf_92[l_index_36]);
ObjectSet(l_name_44, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(l_name_44, OBJPROP_RAY, FALSE);
ObjectSet(l_name_44, OBJPROP_WIDTH, 1);
l_name_52 = "TimingOC" + l_index_36;
ObjectCreate(l_name_52, OBJ_TREND, li_8, Time[l_index_36], g_ibuf_84[l_index_36], Time[l_index_36], g_ibuf_88[l_index_36]);
ObjectSet(l_name_52, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(l_name_52, OBJPROP_RAY, FALSE);
ObjectSet(l_name_52, OBJPROP_WIDTH, 3);
if (Open[l_index_36] <= Close[l_index_36]) {
ObjectSet(l_name_44, OBJPROP_COLOR, Green);
ObjectSet(l_name_52, OBJPROP_COLOR, Green);
} else {
ObjectSet(l_name_44, OBJPROP_COLOR, Red);
ObjectSet(l_name_52, OBJPROP_COLOR, Red);
}
}
كود PHP:for (int l_index_40 = 0; l_index_40 < Bars; l_index_40++) {
ld_12 = 0; ld_13 = 0;
for (int l_index_36 = l_index_40; l_index_36 < NumBars + l_index_40; l_index_36++)
{
ld_12 += (High[l_index_36] + Low[l_index_36]) / 2.0;
ld_13 += High[l_index_36] - Low[l_index_36];
}
ld_20 = ld_12 / NumBars;
ld_28 = 0.2 * (ld_13 / NumBars);
g_ibuf_80[l_index_40] = (High[l_index_40] - ld_20) / ld_28;
g_ibuf_92[l_index_40] = (Low[l_index_40] - ld_20) / ld_28;
g_ibuf_84[l_index_40] = (Open[l_index_40] - ld_20) / ld_28;
g_ibuf_88[l_index_40] = (Close[l_index_40] - ld_20) / ld_28;
l_name_44 = "TimingHL" + l_index_40;
ObjectCreate(l_name_44, OBJ_TREND, li_8, Time[l_index_40], g_ibuf_80[l_index_40], Time[l_index_40], g_ibuf_92[l_index_40]);
ObjectSet(l_name_44, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(l_name_44, OBJPROP_RAY, FALSE);
ObjectSet(l_name_44, OBJPROP_WIDTH, 1);
l_name_52 = "TimingOC" + l_index_40;
ObjectCreate(l_name_52, OBJ_TREND, li_8, Time[l_index_40], g_ibuf_84[l_index_40], Time[l_index_40], g_ibuf_88[l_index_40]);
ObjectSet(l_name_52, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(l_name_52, OBJPROP_RAY, FALSE);
ObjectSet(l_name_52, OBJPROP_WIDTH, 3);
if (Open[l_index_36] <= Close[l_index_40]) {
ObjectSet(l_name_44, OBJPROP_COLOR, Green);
ObjectSet(l_name_52, OBJPROP_COLOR, Green);
} else {
ObjectSet(l_name_44, OBJPROP_COLOR, Red);
ObjectSet(l_name_52, OBJPROP_COLOR, Red);
}
}
ولا يوجد داعي لإستخدام الداله sleep والداله الخاصة بحذف جميع الخطوط في كل مره وإعادة وضعها من جديد
في الكود المسئول عن رسم خطوط actual_VCharteكود PHP:Sleep(1000);
ObjectsDeleteAll(li_8);
سوف تضع شرط لرسم الخط عندما تكون القيمه للخط المرسوم مختلفه عن المعطيات الحاليه فقط
آخر جزء وهو الحلقه الرئيسيهكود PHP:if(ObjectGet("actual_VCharte",OBJPROP_PRICE1)!=g_ibuf_88[0]){
ObjectDelete("actual_VCharte");
ObjectCreate("actual_VCharte", OBJ_HLINE, li_8, 0, g_ibuf_88[0]);
ObjectSet("actual_Vcharte", OBJPROP_COLOR, Blue);
}
فبدلا من البحث في كل مره عن جميع الشموع على الشارت فيكفي أن تبحث عن الشموع الجديده فقط التي تكونت والشمعه الحاليه أما الشموع السابقه فطبيعي أن قيمتها لن تتغير لأنها أغلقتكود PHP:for (int l_index_40 = 0; l_index_40 < Bars; l_index_40++) {
المؤشر في المرفقات بعد التعديلكود PHP:int limit=Bars-IndicatorCounted();
for (int l_index_40 = 0; l_index_40 < limit; l_index_40++) {
- 17-11-2012, 10:31 PM #3
- 17-11-2012, 10:32 PM #4
الأكثر زيارة
رد مع اقتباس