النتائج 1 إلى 14 من 14
الموضوع: عرض خصائص الـ Moving AverageS
- 19-02-2008, 09:56 PM #1
عرض خصائص الـ Moving AverageS
السلام عليكم ..
هذا هو الكود من برنامج الميتا .. مع اضافة صغيرة محددة باللون الاحمر ..
احاول عرض خصائص المتوسطات الحسابية Moving Averages.. من نوع و قيمة و سعر التطبيق ..
ولكن .. واجهتني عدة امور:
1- نجحت في ابراز خصائص المتوسط .. و لكنها تظهر مع السعر بفارق عدد معين من النقاط ..
فكيف استطيع لصقها مع المتوسط لا مع السعر .
2- يظهر سعر التطبيق كرقم .. فالرقم 0 يمثل سعر الاغلاق .. و الرقم 3 يمثل ادنى قيمة .. و احببت ان ارى كلمة Close او high او Low بدلا من الارقام.
3- عند اضافة متوسط اخر .. تختفى خصائص المتوسط الاول .. بحكم انني استخدم المتغيير نفسه ,... فما هي الطرق الاخرى لعرض خصائص متوسط اخر بدون التاثير على المتوسط الاول.
و دمــــــتـــــم ســـــــــــــــــالـــــــمـــيـــن
كود://+------------------------------------------------------------------+ //| Custom Moving Average.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int MA_Period=50; extern int MA_Shift=0; extern int MA_Method=0; //---- indicator buffers double ExtMapBuffer[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int draw_begin; string short_name; //---- drawing settings SetIndexStyle(0,DRAW_LINE); SetIndexShift(0,MA_Shift); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); if(MA_Period<2) MA_Period=13; draw_begin=MA_Period-1; //---- indicator short name switch(MA_Method) { case 1 : short_name="EMA("; draw_begin=0; break; case 2 : short_name="SMMA("; break; case 3 : short_name="LWMA("; break; default : MA_Method=0; short_name="SMA("; } IndicatorShortName(short_name+MA_Period+")"); SetIndexDrawBegin(0,draw_begin); //---- indicator buffers mapping SetIndexBuffer(0,ExtMapBuffer); //---- initialization done ObjectDelete("MA"); ObjectCreate( "MA" ,OBJ_TEXT, 0, Time[0], Close[0]+ 0.0020); ObjectSetText( "MA",short_name+ MA_Period+") "+MA_Method ,12, "Arial", Gold); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { if(Bars<=MA_Period) return(0); ExtCountedBars=IndicatorCounted(); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; //---- switch(MA_Method) { case 0 : sma(); break; case 1 : ema(); break; case 2 : smma(); break; case 3 : lwma(); } //---- done return(0); } //+------------------------------------------------------------------+ //| Simple Moving Average | //+------------------------------------------------------------------+ void sma() { double sum=0; int i,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<MA_Period;i++,pos--) sum+=Close[pos]; //---- main calculation loop while(pos>=0) { sum+=Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; sum-=Close[pos+MA_Period-1]; pos--; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+ //| Exponential Moving Average | //+------------------------------------------------------------------+ void ema() { double pr=2.0/(MA_Period+1); int pos=Bars-2; if(ExtCountedBars>2) pos=Bars-ExtCountedBars-1; //---- main calculation loop while(pos>=0) { if(pos==Bars-2) ExtMapBuffer[pos+1]=Close[pos+1]; ExtMapBuffer[pos]=Close[pos]*pr+ExtMapBuffer[pos+1]*(1-pr); pos--; } } //+------------------------------------------------------------------+ //| Smoothed Moving Average | //+------------------------------------------------------------------+ void smma() { double sum=0; int i,k,pos=Bars-ExtCountedBars+1; //---- main calculation loop pos=Bars-MA_Period; if(pos>Bars-ExtCountedBars) pos=Bars-ExtCountedBars; while(pos>=0) { if(pos==Bars-MA_Period) { //---- initial accumulation for(i=0,k=pos;i<MA_Period;i++,k++) { sum+=Close[k]; //---- zero initial bars ExtMapBuffer[k]=0; } } else sum=ExtMapBuffer[pos+1]*(MA_Period-1)+Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; pos--; } } //+------------------------------------------------------------------+ //| Linear Weighted Moving Average | //+------------------------------------------------------------------+ void lwma() { double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<=MA_Period;i++,pos--) { price=Close[pos]; sum+=price*i; lsum+=price; weight+=i; } //---- main calculation loop pos++; i=pos+MA_Period; while(pos>=0) { ExtMapBuffer[pos]=sum/weight; if(pos==0) break; pos--; i--; price=Close[pos]; sum=sum-lsum+price*MA_Period; lsum-=Close[i]; lsum+=price; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+
- 19-02-2008, 10:23 PM #2
رد: عرض خصائص الـ Moving AverageS
وعليكم السلام
المشكلة الأولى ليس لها حل مباشر إلا بإضافة نقاط معينة لنقطة التموضع حتى يظهر النص بالشكل المطلوب .
لحل المشكلة الثانية يمكن عمل وظيفة خاصة لإظهار النص بدل الرقم وهي تكون مشابهة لما يلي :
كود PHP:string GetMethodText(int per)
{
switch(per) { case 0: return("Close"); break; case 1: return("High"); break; case 2: return("Low"); break; }}
بعد ذلك يمكنك استدعاء هذه الوظيفة كالتالي :
كود PHP:ObjectSetText( "MA",short_name+ MA_Period+") "+GetMethodText(MA_Method) ,12, "Arial", Gold);
لحل المشكلة الأخيرة يجب تسمية الكائن النصي باسم نصي مضافا إليه الفترة وبهذه الحالة يتم إنشاء مربع نصي خاص بكل متوسط .
كود PHP:ObjectCreate( "MA"+MA_Period ,OBJ_TEXT, 0, Time[0], Close[0]+ 0.0020);
- 22-02-2008, 08:55 PM #3
رد: عرض خصائص الـ Moving AverageS
مشكور عزيزي على هذه الحلول ..
بالنسبة للكود نفسه.. اي الذي ادرجته ..
لا يوجد به خيار "تطبيق السعر" ..
صحيح ان فكرة GetMethodText تعمل بالشكل المراد لها .. ولكن سعر التطبيق غائب من اساسه ... ولا املك الكود لل moving average كاملا ( القيمة و نوع و التطبيق على )
و ان شاء الله ساواصل في هذا الموضوع متى توفر الكود كاملا.
شكرا لك .
- 27-02-2008, 07:34 PM #4
رد: عرض خصائص الـ Moving AverageS
ساقوم بادراج هذا الكود ... و على الله التوفيق ..
كود://| | //+------------------------------------------------------------------+ double GetAppliedPrice(int nAppliedPrice, int nIndex) { double dPrice; //---- switch(nAppliedPrice) { case 0: dPrice=Close[nIndex]; break; case 1: dPrice=Open[nIndex]; break; case 2: dPrice=High[nIndex]; break; case 3: dPrice=Low[nIndex]; break; case 4: dPrice=(High[nIndex]+Low[nIndex])/2.0; break; case 5: dPrice=(High[nIndex]+Low[nIndex]+Close[nIndex])/3.0; break; case 6: dPrice=(High[nIndex]+Low[nIndex]+2*Close[nIndex])/4.0; break; default: dPrice=0.0; } //---- return(dPrice); }
يظهر الرقم (سعر ال moving average ) ب 8 ارقام بعد الفاصلة ..
كيف اقوم بتصغيرها الى 4 ..آخر تعديل بواسطة t4fast ، 27-02-2008 الساعة 07:37 PM
- 27-02-2008, 10:46 PM #5
رد: عرض خصائص الـ Moving AverageS
استخدم الوظيفة التالية :
كود PHP:string DoubleToStr(double value, int digits)
كود PHP:Print(DoubleToStr(a,4));
يمكنك استخدام المتحول الجاهز Digits بدل الرقم الصحيح 4
وبذلك تضمن أن يظهر الرقم بالخانات الصحيحة حسب الزوج المستخدم .
لأنه أحيانا يكون 4 وأحيانا 2 حسب الزوج المستخدم .
ويصبح المثال كالتالي :
كود PHP:Print(DoubleToStr(a,Digits));
- 28-02-2008, 10:18 AM #6
رد: عرض خصائص الـ Moving AverageS
كود://+------------------------------------------------------------------+ //| Custom Moving Average.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int MA_Period=50; //extern int MA_Shift=0; extern int MA_Method=0; extern int AppliedPrice=0; //---- indicator buffers double ExtMapBuffer[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int draw_begin; string short_name; //---- drawing settings SetIndexStyle(0,DRAW_LINE); //SetIndexShift(0,MA_Shift); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); if(MA_Period<2) MA_Period=13; draw_begin=MA_Period-1; //---- indicator short name switch(MA_Method) { case 1 : short_name="EMA("; draw_begin=0; break; case 2 : short_name="SMMA("; break; case 3 : short_name="LWMA("; break; default : MA_Method=0; short_name="SMA("; } IndicatorShortName(short_name+MA_Period+")"); SetIndexDrawBegin(0,draw_begin); //---- indicator buffers mapping SetIndexBuffer(0,ExtMapBuffer); //---- initialization done //GetAppliedPrice(AppliedPrice); double ma_1; ma_1=iMA(0,0,MA_Period,0,MA_Method,AppliedPrice,0); // used to print the ma value ObjectDelete("MA"+MA_Period); ObjectCreate("MA"+MA_Period ,OBJ_TEXT, 0, Time[0], ma_1+ 0.0020); ObjectSetText("MA"+MA_Period,short_name+ MA_Period+") "+GetMethodText(AppliedPrice)+" "+ (DoubleToStr(ma_1,Digits)) ,12, "Arial", indicator_color1); return(0); } //+------------------------------------------------------------------+ string GetMethodText(int AppliedPrice) { switch(AppliedPrice) {case 0: return("C");break; case 2:return("H");break; case 3:return("L");break;} } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ double GetAppliedPrice(int nAppliedPrice,int nIndex) { switch(nAppliedPrice) { case 0: return(Close[nIndex]); break; case 2: return(High[nIndex]); break; case 3: return(Low[nIndex]); break; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { if(Bars<=MA_Period) return(0); ExtCountedBars=IndicatorCounted(); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; //---- switch(MA_Method) { case 0 : sma(); break; case 1 : ema(); break; case 2 : smma(); break; case 3 : lwma(); } //---- done return(0); } //+------------------------------------------------------------------+ //| Simple Moving Average | //+------------------------------------------------------------------+ void sma() { double sum=0; int i,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<MA_Period;i++,pos--) sum+= GetAppliedPrice(AppliedPrice) //sum+ = Close[pos]; //---- main calculation loop while(pos>=0) { sum+=Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; sum-=Close[pos+MA_Period-1]; pos--; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+ //| Exponential Moving Average | //+------------------------------------------------------------------+ void ema() { double pr=2.0/(MA_Period+1); int pos=Bars-2; if(ExtCountedBars>2) pos=Bars-ExtCountedBars-1; //---- main calculation loop while(pos>=0) { if(pos==Bars-2) ExtMapBuffer[pos+1]=Close[pos+1]; ExtMapBuffer[pos]=Close[pos]*pr+ExtMapBuffer[pos+1]*(1-pr); pos--; } } //+------------------------------------------------------------------+ //| Smoothed Moving Average | //+------------------------------------------------------------------+ void smma() { double sum=0; int i,k,pos=Bars-ExtCountedBars+1; //---- main calculation loop pos=Bars-MA_Period; if(pos>Bars-ExtCountedBars) pos=Bars-ExtCountedBars; while(pos>=0) { if(pos==Bars-MA_Period) { //---- initial accumulation for(i=0,k=pos;i<MA_Period;i++,k++) { sum+=Close[k]; //---- zero initial bars ExtMapBuffer[k]=0; } } else sum=ExtMapBuffer[pos+1]*(MA_Period-1)+Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; pos--; } } //+------------------------------------------------------------------+ //| Linear Weighted Moving Average | //+------------------------------------------------------------------+ void lwma() { double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<=MA_Period;i++,pos--) { price=Close[pos]; sum+=price*i; lsum+=price; weight+=i; } //---- main calculation loop pos++; i=pos+MA_Period; while(pos>=0) { ExtMapBuffer[pos]=sum/weight; if(pos==0) break; pos--; i--; price=Close[pos]; sum=sum-lsum+price*MA_Period; lsum-=Close[i]; lsum+=price; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+
المعضلة الاخيرة الان .. ادراج سعر التطبيق في المعادلة ..
بعد عدة محاولات وصلت الى هذا الكود .. وبه بعض الاخطاء التي تمنع استخدامه ..
اعتقد ان الفكرة هي تغيير الـ Close [Pos] الى شي اخر بحسب الطلب .
راجي منكم التصحيح ..
- 28-02-2008, 10:37 PM #7
رد: عرض خصائص الـ Moving AverageS
بالنسبة للالوان ..
عند اضافة متوسط اخر بلون مختلف (غير الاحمر ) تظهر الكتابة بالاحمر .. وكانه لا يقرا اللون الجديد على المؤشر ..
فما هي طريقة تحديث اللون ..
- 28-02-2008, 10:52 PM #8
رد: عرض خصائص الـ Moving AverageS
من الاخطاء القوية .. ان الكود لا يقع تحت int start() ..
نقلته الى اسفل من int start() .. و ظهرت مشكلة عدم التعرف على shortname
- 04-03-2008, 04:32 PM #9
رد: عرض خصائص الـ Moving AverageS
و الحمد لله ..
قمت بتعريف ال shortname من جديد اسفل من int start() ..
و المؤشر يعمل الان بالشكل المطلوب ..
اما موضوع الالوان .. فمازال البحث جاري ..
- 04-03-2008, 08:03 PM #10
رد: عرض خصائص الـ Moving AverageS
والحمد لله .. تم حل موضوع الالوان .. بتعريف اللون كمتغيير وليس كخاصية .
- 07-03-2008, 10:07 AM #11
رد: عرض خصائص الـ Moving AverageS
الى الان .. وصلت الى هذه النقطة.
- 07-03-2008, 08:51 PM #12
رد: عرض خصائص الـ Moving AverageS
الان تم اظهار كل البيانات المتعلقة بالمتوسط .. مع تفعيل جميع الخصائص ..
- 13-11-2008, 11:21 PM #13
رد: عرض خصائص الـ Moving AverageS
ماشاء الله تبارك الله أتمنى لك المزيد من التوفيق
ولكن لوتكرمت أخي الكريم أن تقوم باضافة اظهار السعر على مستويات المتوسط لا المتوسط فقط
وتقبل شكري وامتناني
https://forum.arabictrader.com/912409-1-post.html
- 16-11-2008, 06:36 PM #14
رد: عرض خصائص الـ Moving AverageS
الله يفتحها عليك...
المواضيع المتشابهه
-
استفسار عن خصائص اكسبرتى وبرمجتةعلى المضاعفات
By khfa in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 2آخر مشاركة: 12-01-2010, 09:34 PM -
سؤال عن خصائص الميتاتريد؟ (للخبراء)
By SuccessTeam in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 16آخر مشاركة: 02-06-2009, 07:33 PM -
أسئلة عن بعض خصائص برنامج الميتاتريدر
By ساق الجواء in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 4آخر مشاركة: 13-01-2009, 10:39 AM -
خصائص حسابات الميكرو فى افكسول؟؟؟؟؟؟؟؟
By cramelxash in forum استفسارات وأسئلة المبتدئينمشاركات: 4آخر مشاركة: 04-01-2008, 11:53 AM