

// 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;
} 




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];

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);
}
المواضيع المتشابهه | ||||
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
| كيفية تحويل من صيغة 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 |