• 7:41 صباحاً




استفسار عن كيفية برمجة التريند في mql4

إضافة رد
Like Tree11Likes

أدوات الموضوع
الصورة الرمزية AHMAD.ABDULLATEF
عضو فـعّـال
تاريخ التسجيل: Jun 2013
المشاركات: 1,578
خبرة السوق : اكثر من 10 سنوات
الدولة: EGYPT
العمر: 44
معدل تقييم المستوى: 15
AHMAD.ABDULLATEF is on a distinguished road
20 - 06 - 2023, 08:58 PM
  #1
AHMAD.ABDULLATEF غير متواجد حالياً  
افتراضي استفسار عن كيفية برمجة التريند في mql4
السلام عليكم
رجاء من الاخوة المبرمجين

ماهي افضل طريقة لحساب التريند برمجيا .. واقصد هنا التريند قصير المدي the last 2 swings highs and the last 2 swings low

انا كتبت الكود ده .. فايه رأيكم هل يصلح ؟.

كود:
// Input parameters
extern int lookbackBars = 20;  // Number of bars to consider for trend determination

// Trend determination function
int DetermineTrend()
{
    int trend = 0;
    int higherHighs = 0;
    int higherLows = 0;
    int lowerHighs = 0;
    int lowerLows = 0;
    
    for (int i = 1; i <= lookbackBars; i++)
    {
        if (High[i] > High[i - 1])
            higherHighs++;
        else if (Low[i] < Low[i - 1])
            higherLows++;
        else if (High[i] < High[i - 1])
            lowerHighs++;
        else if (Low[i] > Low[i - 1])
            lowerLows++;
    }
    
    if (higherHighs >= 2 && higherLows >= 2)
        trend = 1;  // Uptrend
    else if (lowerHighs >= 2 && lowerLows >= 2)
        trend = -1;  // Downtrend
    
    return trend;
}

// Entry point of the Expert Advisor
int start()
{
    int currentTrend = DetermineTrend();
    
    // Perform trading operations based on the determined trend
    
    return 0;
}
بورصجي 99 likes this.

التوقيع

رد مع اقتباس

عضو نشيط جدا
 
تاريخ التسجيل: Sep 2014
المشاركات: 526
معدل تقييم المستوى: 0
بورصجي 99 is an unknown quantity at this point
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
2#
23 - 06 - 2023, 08:30 PM
اين تعلمت البرمجه
بورصجي 99 غير متواجد حالياً  
رد مع اقتباس
الصورة الرمزية AHMAD.ABDULLATEF
عضو فـعّـال
الصورة الرمزية AHMAD.ABDULLATEF
 
تاريخ التسجيل: Jun 2013
الدولة: EGYPT
العمر: 44
المشاركات: 1,578
خبرة السوق: اكثر من 10 سنوات
معدل تقييم المستوى: 15
AHMAD.ABDULLATEF is on a distinguished road
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
3#
24 - 06 - 2023, 09:54 PM
اقتباس:
المشاركة الأصلية كتبت بواسطة بورصجي 99 مشاهدة المشاركة
اين تعلمت البرمجه
التعلم الذاتي
من اليوتيوب
بعض الكتب على الانترنت
كورس برمجة بلغة C++

التوقيع

AHMAD.ABDULLATEF غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
4#
04 - 07 - 2023, 03:44 AM
استخدم طريقتي اخي في تحديد نقاط الارتكاز .. هي افضل ما اعلم . .
ولو عززتها بنظريتي "العمود الساقط" التي سحرت الخواجات ... سترسم الترند كما يرمسه البشر .. نعلم ان الترند تحديدا برمجيا صعب شوي . . اذا لا نريده ان يقطع اي سعر سوى نقطتي الارتكاز . .

أولا: طريقتي في تحديد نقاط الارتكاز .

كود:
int SR()
{
   for(int j=0;j<ArraySize(TRC);j++) 
   {
      TSV[j]=0;
      TRV[j]=0;
      TSC[j]=0;
      TRC[j]=0;
      TSM[j]="\n";
      TRM[j]="\n";
   }
   int mR=-1;
   int mS=-1;
   int bar=99999;
   int barT=iBars(Symbol(),0);
   if(bar>barT-CRITERION_CANDLES-2)bar=barT-CRITERION_CANDLES-2;
   if(bar>2*CRITERION_CANDLES-1)
   {
      for(j=0;j<bar;j++) 
      {
         if(mR>250) break;
         if(TAIL_CLOSE=="TAIL")
         {
            int highN1=iHighest(Symbol(),0,MODE_HIGH,CRITERION_CANDLES,j);
            int highN2=iHighest(Symbol(),0,MODE_HIGH,CRITERION_CANDLES,CRITERION_CANDLES+j-1);
         }
         else
         {
            highN1=iHighest(Symbol(),0,MODE_CLOSE,CRITERION_CANDLES,j);
            highN2=iHighest(Symbol(),0,MODE_CLOSE,CRITERION_CANDLES,CRITERION_CANDLES+j-1);
         }
         if(highN1==highN2 && highN1>1)
         {
            mR++;
            TRC[mR]=highN2;
            if(TAIL_CLOSE=="TAIL")
            {
               TRV[mR]=High[highN2];
            }
            else
            {
               TRV[mR]=Close[highN2];
            }
            TRM[mR]="HRT\n"+Symbol()+"\n"+TRV[mR]+"("+TRC[mR]+")\n"+TimeToString(Time[TRC[mR]],TIME_DATE|TIME_MINUTES);
         }
      }
      if(TAIL_CLOSE=="TAIL")
      {
         TSC[0]=iLowest(Symbol(),0,MODE_LOW,TRC[0],0);
         TSV[0]=Low[TSC[0]];
         TSM[0]="HST\n"+Symbol()+"\n"+TSV[0]+"("+TSC[0]+")\n"+TimeToString(Time[TSC[0]],TIME_DATE|TIME_MINUTES);
      }
      else
      {
         TSC[0]=iLowest(Symbol(),0,MODE_CLOSE,TRC[0],0);
         TSV[0]=Close[TSC[0]];
         TSM[0]="HST\n"+Symbol()+"\n"+TSV[0]+"("+TSC[0]+")\n"+TimeToString(Time[TSC[0]],TIME_DATE|TIME_MINUTES);
      }
      int r;
      for(j=0;j<mR;j++) 
      {
         r++;
         if(TAIL_CLOSE=="TAIL")
         {
            TSC[r]=iLowest(Symbol(),0,MODE_LOW,TRC[j+1]-TRC[j]-1,TRC[j]+1);
            TSV[r]=Low[TSC[r]];
         }
         else
         {
            TSC[r]=iLowest(Symbol(),0,MODE_CLOSE,TRC[j+1]-TRC[j]-1,TRC[j]+1);
            TSV[r]=Close[TSC[r]];
         }
         TSM[r]="HST\n"+Symbol()+"\n"+TSV[r]+"("+TSC[r]+")\n"+TimeToString(Time[TSC[r]],TIME_DATE|TIME_MINUTES);
      }
   }
   return mR;
}

int candles=0;
double TSV[255];
int TSC[255];
string TSM[255];
double TRV[255];
int TRC[255];
string TRM[255];
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
5#
04 - 07 - 2023, 03:45 AM
فالكود أعلاه اخي اذا مهتم بالتعلم والبرمجة .,. هي أذكى شيء تتصوره .. عندما تدرسه .. ستدرك لماذا . .
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي اختر 1 بدلا من 250
6#
04 - 07 - 2023, 03:47 AM
في الكود اذا تبي اقرب نقطتين فقط غير 250 الى 1 ----- وبالتالي يحسب نقطة 0 ونقطة 1 (نقطتين لرسم الترند)
واستخدم قيم TRV[0] , و TRV[1] لرسم الترند العلوي
واستخدم قيم TSV[0] , و TSV[1] لرسم الترند العلوي
S: support
R: resistance
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي ObjectGetValueByShift أو الميل
7#
04 - 07 - 2023, 03:51 AM
وبعد رسم الترند ... ولحسابه برمجيا ..
..
هناك طريقتان . . .
. . .
1) اما تأخذ القيمة من الترند الموجود (وبالتالي لابد من رسم الترند) مستخدما دالة . . ObjectGetValueByShift
أو
2) اذا ضليع في الرياضيات(وهذا ما اتوقعه لأنه لا برمجة دون تمكن رياضي) لاحاجة لرسم الترند . . .اذا تذكر دروس المماس او الميل في الرياضيات . .
..
فأنت اذا عرفت نقطتي الارتكاز ... ومحورها زوج مرتب (زمن و سعر)
قانون الميل سهل جدا.... فرق الصادات على فرق السينات . .

اذا عرفنا الميل سنعرف اي قيمة للترند عند اي شمعة تريد حتى لو كانت في المستقبل . . .
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
8#
04 - 07 - 2023, 03:53 AM
الكود في ردك . .. طبعا بكل وضوح وبنظرة واحدة عليه هو طريقة الزقزاق . . . بدائي جدا وبالغ البلادة ..
تخلص منه . .

وعنوان موضوعك لفت نظري ... بسبب تركيزي هذين اليومين على النماذج السعرية سواء الهارمونية او الكلاسيكية او ابلدها واسهلها ونعني موجات اليوت . . .فالترند جزء من عملية تصميمها !! عندما نتحدث عن اذكى التصاميم من جهة برمجية . .
فمثل ابرمجيا عندما ترسم لنموذج القرش مثلا خط من نقطة x الى d ... في الحقيقة برمجيا تستخدم دالة الترند

واي سؤال لا تتردد .. نحب ان نعلم من يرغب حقيقة في التعلم . .
. .
مثال: ترى خمس خطوط بيضاء موصلة مع بعض!! كلها ولايوجد خيار اخر باستخدام دالة TREND
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي الطريقتين اعطت نفس النتيجة . . تأمل الصورة المرفقة:
9#
04 - 07 - 2023, 04:48 AM
كود توي مبرمجه للطريقتين لعله ينفع . . ويساعدك أكثر في تبحرك في البرمجة!!
لاحظ الصورة . .
الاصفر محسوب بالمعادلة دون الحاجة لرسم الترند
والابيض مأخوذ من الترند . .
نفس النتيجة وهو متوقع دون تجارب . . لانها كلها في الحقيقة رياضيات .. والرياضيات يقين دون ظن .. اذا اتت للعمليات الحسابية البسيطة التي تستخدم عملية المساواة . . خصوصا المعادلات الخطية . .
. .


كود:
   string name1="name";
   
   
   int OnInit()
{


   EventSetTimer(1);
      ObjectDelete(name1);
   ObjectCreate(0,name1,OBJ_TREND,0,Time[33],High[33],Time[0],High[0]);
   ObjectSetInteger(0,name1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,name1,OBJPROP_COLOR,clrYellow);

   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0);
   EventKillTimer();
}


double rad=180/M_PI;
void ObjText(string name,int C,double price, string value,color clr, double angle)
{
   ObjectCreate(0,name,OBJ_TEXT,0,Time[C],price);
   ObjectSetString(0,name,OBJPROP_TEXT,value); 
   ObjectSetString(0,name,OBJPROP_FONT,0); 
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,11);
   ObjectSetDouble(0,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(0,name,OBJPROP_BACK,FALSE); 
               ObjectSetInteger(0,name,OBJPROP_HIDDEN,TRUE);
}




void OnTimer()
{
   double heightW=(WindowPriceMax()-WindowPriceMin());
   double widthW=WindowBarsPerChart();
   double heightC=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);
   double widthC=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
   double resolution=1;
   if((widthC*heightW)>0.00000001)
   resolution=(widthW/heightW)*(heightC/widthC);
   double pr=heightW/100;
   int i=0;
   double y2=ObjectGet(name1,OBJPROP_PRICE1);
   double y1=ObjectGet(name1,OBJPROP_PRICE2);
   int  x2=iBarShift(NULL,0,ObjectGet(name1,OBJPROP_TIME1));
   int  x1=iBarShift(NULL,0,ObjectGet(name1,OBJPROP_TIME2));
   
   
   double trend_at_candle_0=ObjectGetValueByShift(name1,0);
   if(x1!=x2)
   {
   double slope=(y1-y2)/(x1-x2);
   
      double angle=MathArctan(-slope*resolution)*(180/M_PI);
    ObjText( "nameText", 0, trend_at_candle_0+3*pr,DoubleToString(trend_at_candle_0,_Digits)+"@ "+i,clrWhite,angle);
   }
   
//////////
/// الطريقة الثانية لحساب قيمة الترند دون الحاجة لرسمه على فرض معرفتك بنقاط الارتكاز
// افترض Y1, Y2 اعلاه هي نقاط الارتكاز
//x1, x2 هي محور السينات


   double slope_t=(y2-y1)/(x2-x1);
   // then using linear equation y=mx+b ///////// m = slope_t

//y1-y2=m(x1-x2) ....> then at x2=0 = current candle, y1=y2+m(x1)

double y = y2-slope_t*(x2);
    ObjText( "nameText0", 0, trend_at_candle_0+6*pr,DoubleToString(y,_Digits)+"@ "+i,clrYellow,angle);
}
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس
عضو برونزي
 
تاريخ التسجيل: Sep 2019
المشاركات: 2,464
معدل تقييم المستوى: 0
سوق أخضر is on a distinguished road
افتراضي رد: استفسار عن كيفية برمجة التريند في mql4
10#
04 - 07 - 2023, 04:51 AM
ايضا الكود اعلاه فيه فائدة نادرة .. النصوص المائلة المصاحبة للترند . . .قلة قليلة جدا ان لم تكن معدومة يعرفونها . .
شرحتها بالتفاصيل في منتديات الاجانب

يعني تظهر قيمة الترند نصا . . عند اي شمعة تحددها وبزاوية الترند نفسه . .
AHMAD.ABDULLATEF likes this.
سوق أخضر غير متواجد حالياً  
رد مع اقتباس


إضافة رد



جديد مواضيع منتدى المؤشرات و الاكسبرتات

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
كيفية تحويل من صيغة ex4 الى mql4 nevaz منتدى المؤشرات و الاكسبرتات 0 01 - 09 - 2019 12:07 PM
استفسار عن كود برمجة فقط ’FXT2030 منتدى المؤشرات و الاكسبرتات 1 18 - 05 - 2019 08:28 PM
الجديد فى برمجة الميتاتريدر MQL4=MQL5 (تعليم- القوائم Enumerations ) IAEBusiness منتدى المؤشرات و الاكسبرتات 4 19 - 04 - 2015 10:34 AM
كيفية برمجة تنبيه صوتي لمؤشر طالبة1 منتدى المؤشرات و الاكسبرتات 3 23 - 06 - 2012 12:47 AM


07:41 AM