النتائج 1 إلى 9 من 9
الموضوع: كيف اعدل هذا الكود
- 16-08-2015, 03:15 AM #1
كيف اعدل هذا الكود
السلام عليكم
هذا المؤشر للدايقرنجيس مع الار اس اي
المطلوب منه :
1 - زيادة القمم والقيعان
لأنه الآن يظهر اقرب قمة وقاع فقط
2 - وضع خط افقى لأعلى قمة بين قاعين دقرانجيس
او ادنى قاع بين قمتين
كمستهدف
فكيف اهدل الكود التالي ليقوم بالمطلوب
لم اعرف اين الجزئية المسؤولة عن اختيار القمم والقيعان
وهل سأحتاج ( لوبينج ) للبحث عن اعلى قمة بين قاعي دايفرنجيس
جزاكم الله خيرا


كود PHP:if(IsIndicatorTrough(shift) == false)
return;
int currentTrough = shift;
int lastTrough = GetIndicatorLastTrough(shift);
//--CLASSIC DIVERGENCE--//
if (DisplayClassicalDivergences)
{
if(rsi[currentTrough] > rsi[lastTrough] && Low[currentTrough] < Low[lastTrough])
{
bullishDivergence[currentTrough] = rsi[currentTrough] - arrowsDisplacement;
divergencesType[currentTrough] = 1; //"Classic Bullish";
divergencesRSIDiff[currentTrough] = MathAbs(rsi[currentTrough] - rsi[lastTrough]);
divergencesPriceDiff[currentTrough] = MathAbs(Low[currentTrough] - Low[lastTrough]);
if (DrawPriceTrendLines) {h1=Time[currentTrough]; h2=Time[lastTrough]; s7=StringConcatenate(PriceLine,h1," ",h2); t4=0;
DrawTrendLine(s7,t4,h1,Low[currentTrough],h2,Low[lastTrough],LongColour,STYLE_SOLID,1);}
if (DrawIndicatorTrendLines) {h1=Time[currentTrough]; h2=Time[lastTrough]; s7=StringConcatenate(RSILine,h1," ",h2); t4=ChartWindowFind(0,indicatorName);
DrawTrendLine(s7,t4,h1,rsi[currentTrough],h2,rsi[lastTrough],LongColour,STYLE_SOLID,1);}
if(DisplayAlert)
DisplayAlert("Classical RSI bullish divergence on: ", currentTrough);
}
}
- 16-08-2015, 07:14 AM #2
يبدو ان مبتغاي في هذه الأسطر
وهو من التعقيد بمكان فيحتاج اكثر من (لوبينج)
اعتذر منكم
ماذا يقصد بـ j++
+++++++++ ما اجملك يا (vb.net) لكن mq4 لا يقبل غير C++ ++++++++++++
كود PHP:int GetIndicatorLastPeak(int shift)
{
for(int j = shift + 500; [COLOR="#FF0000"]j < Bars; j++[/COLOR])
{
if(rsi[j] >= rsi[j+1] && rsi[j] > rsi[j+2] &&
rsi[j] >= rsi[j-1] && rsi[j] > rsi[j-2])
return(j);
}
return(-1);
}
int GetIndicatorLastTrough(int shift)
{
for(int j = shift + 500; j < Bars; j++)
{
if(rsi[j] <= rsi[j+1] && rsi[j] < rsi[j+2] &&
rsi[j] <= rsi[j-1] && rsi[j] < rsi[j-2])
return(j);
}
return(-1);
}
- 16-08-2015, 10:19 AM #3
في هذا الكود فهو يبحث عن قمة أو القاع التي تبعد عن آخر قمة أو قاع تم تحديدها بعدد 5 شموع
مثلا لو وجد قمة عند الشمعه رقم 12 فسوف يبدأ بالبحث من الشمعه رقم 17 ثم 18 ثم 19 وهكذا هذا المقصود ب ++jكود PHP:for(int j = shift + 5; j < Bars; j++)
حتى يجد أقرب قمه ثم يتوقف بالبحث عندها ونفس الطريقه بالنسبه للقاع
الآن أنت تريد معرفة أكبر قمة بين قاعين ديفرجنس
في دالة
سوف تجد أنه يستخرج قيمة القاعين في الكودكود PHP:void CatchBullishDivergence(int shift)
ويكفي أنت أن تبحث عن أعلى قمة بين هذين المستويينكود PHP:int currentTrough = shift;
int lastTrough = GetIndicatorLastTrough(shift);
مثال
وستطبق نفس الفكره لإيجاد أقل قاع بين قمتين ديفرجنسكود PHP:double MaxRSI;
for(int i=currentTrough;i<=lastTrough;i++)
{
if(CalculateRSI(i)>MaxRSI)MaxRSI=CalculateRSI(i);
}
- 16-08-2015, 12:13 PM #4
شاكرا لك افضالك استاذي الكريم
يبدو اني سأحتاج الى تعلم دوال هذه اللغة من البداية ثم اعادة بناءه من الصفر
بخصوص الخمس شموع
في الاقتباس اعلاه انا رفعته الى 500 شمعة
for(int j = shift + 500; j < Bars; j++)
لكن بدون نتيجة
فهو يبحث عن اقرب قاع او قمة ثم يتوقف
---
جزئية القمة بين القاعين
ارى انك كتبت MaxRSI وانا اريد قمة في السعر وليس المؤشر
ساجربها باذن الله
- 18-08-2015, 12:11 AM #5
- 18-08-2015, 09:05 AM #6
الله يجزاك خير ويرحم والديك
لازلت اعاني من بناء الاكواد وصيغها
ويبدو اني سأبدأ المؤشر من جديد (اردت ان اعدل عليه اختصارا للوقت والجهد)
فان سمح لك وقتك اكون لك من الشاكرين
استاذي الفاضل
لماذا يقبل بهذا
ولا يقبلكود PHP:if(High[shift]<=High[shift-1](
كود PHP:if(High[shift]=High[shift-1]
كيف يصاغ امر
كود PHP:Select Case
Case Is
End Select
كود PHP:High[shift]<>Nothing&&High[shift]<>0
كود PHP:Try
Catch
End Try
- 18-08-2015, 07:46 PM #7
- 18-08-2015, 08:12 PM #8
https://forum.arabictrader.com/t93679.html#post1662296
شكرا استاذ اسامة
الاجابة وجدتها اعلاه
- 19-08-2015, 09:00 AM #9
بفضل الله
تم ضبط الخط الأفقي
وبقي زيادة القمم والقيعان
شكرا استاذ اسامة

تعمدت مد الخط مسافة محددة الى اليسار
اخترت 50 شمعة
وواجهتني اشكالية الخط في اقصى اليمين حبث تقل شموعة عن 50 (فيتغير الخط مع الزوم للشارت وينعكس )
اما لو استخدمت (شيفت) فانه سيمد جميع الخطوط الى اول شمعة
استخدمت الكود التالي للحل
كود PHP:int gg=GetMin(shift,50) ;
if (DrawPriceTrendLines) {h1=Time[currentTrough-gg]; h2=Time[lastTrough]; s7=StringConcatenate(PriceLine,h1," ",h2); t4=0;
DrawTrendLine(s7,t4,h1,MaxHigh,h2,MaxHigh,LongColour,STYLE_SOLID,1);}
كود PHP:int GetMax(int a , int b){
if(a>b && a>0 && b>0){
return(a);}
else{
return(b); } }
int GetMin(int a , int b){
if(a<b && a>0 && b>0){
return(a);}
else{
return(b); } }
الأكثر زيارة
رد مع اقتباس