كود تحديد حركة السعر داخل شموع الفريمات الأكبر
السلام عليكم اخي اسامة
هل يمكن ان احدد على شمعة الاربع ساعات او الديلي هاي او للو شمعة الدقيقة ايهما سبق ...
يعني لدي شمعة للاربع ساعات نازلة ويكون السعر صعد اولا ثم نزل كيف اعرف دلك ... اقصد برمجيا
-------
نحتاج هذا الكود كثيرا في الباكتستر الفوري اذا لزم الأمر, خصوصا لأوامر محددة الأهداف والتي دخولها وةالخورج منها على نفس شمعة الديلي مثلاً,
لذا نعزله في موضوع مستقل,
سيكون اسمه كبرنامج quasi_search.mq4
الخوارزم كتابة:
1) تسجل تاريخ بدء الشمعة على الاربع ساعات
2) تسجيل تاريخ نهاية الشمعة (يعني بدء الشمعة بعدها)
فهذا جسد شمعة الاربع ساعات زمنيا
3) تذهب الى فريم 1 دقيقة
4) تحول تاريخ البدء الى رقم البارة
5) تحاول تاريخ النهاية الى رقم بارة
فيصبح لديك رقمين
5) تستخدم دوال اكتشاف الهاي او اللو بين الرقمين
-
6) رقم بارة الهاي و بارة اللو -- تقارن بينهم ومنها تعرف ايهما سبق.
------------
الكود (دون اخطاء)
كود PHP:
int OnInit()
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
double high;
double low;;
void OnTimer()
{
int j = bar_1M_Frame_Start;
int k = bar_1M_Frame_E_N_D;
high = iHigh(NULL, PERIOD_M1, bar_1M_Frame_Start);
low = iLow (NULL, PERIOD_M1, bar_1M_Frame_Start);
int iH=bar_1M_Frame_Start;
int iL=bar_1M_Frame_Start;
for(int i=j;i>k;i--)
{
if(high<iHigh(NULL, PERIOD_M1, i))
{
high=iHigh(NULL, PERIOD_M1, i);
iH=i;
}
if(low>iLow (NULL, PERIOD_M1, i))
{
low=iHigh(NULL, PERIOD_M1, i);
iL=i;
}
}
if(iH>iL) string aa="HighFirst";
else if(iH<iL) aa="LowxFirst";
else if(iH==iL) aa="@sameCandle";
else aa="ambiguous";
ObjectCreate( "aa",OBJ_LABEL,0,0,0);
ObjectSet( "aa",OBJPROP_CORNER,0);
ObjectSet( "aa",OBJPROP_XDISTANCE,0);
ObjectSet( "aa",OBJPROP_YDISTANCE,60);
ObjectSetText("aa",aa,13,"TAHOMA",clrLime);
ObjectCreate( "high",OBJ_LABEL,0,0,0);
ObjectSet( "high",OBJPROP_CORNER,0);
ObjectSet( "high",OBJPROP_XDISTANCE,0);
ObjectSet( "high",OBJPROP_YDISTANCE,20);
ObjectSetText("high","H: "+DoubleToStr(high,MarketInfo(NULL,MODE_DIGITS))+"@"+TimeToStr(iTime(NULL,PERIOD_M1,iH),TIME_DATE|TIME_MINUTES),13,"TAHOMA",clrLime);
ObjectCreate( "low",OBJ_LABEL,0,0,0);
ObjectSet( "low",OBJPROP_CORNER,0);
ObjectSet( "low",OBJPROP_XDISTANCE,0);
ObjectSet( "low",OBJPROP_YDISTANCE,40);
ObjectSetText("low","L: "+DoubleToStr(low,MarketInfo(NULL,MODE_DIGITS))+"@"+TimeToStr(iTime(NULL,PERIOD_M1,iL),TIME_DATE|TIME_MINUTES),13,"TAHOMA",clrOrange);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
///////////////////////////////////////////////////////////////////
int bar_1M_Frame_Start;
int barThisFrame_Start;
int bar_1M_Frame_E_N_D;
int barThisFrame_E_N_D;
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_CLICK)
{
//--- Prepare variables
if(Period()>PERIOD_M1)
{
int x =(int)lparam;
int y =(int)dparam;
datetime dt =0;
double price =0;
int window=0;
//--- Convert the X and Y coordinates in terms of date/time
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
bar_1M_Frame_Start=iBarShift(NULL,PERIOD_M1,dt);
barThisFrame_Start=iBarShift(NULL,0,dt);
barThisFrame_E_N_D=iBarShift(NULL,0,dt)-1;
dt=iTime(NULL,0,barThisFrame_E_N_D);
bar_1M_Frame_E_N_D=iBarShift(NULL,PERIOD_M1,dt);
}
}
}
}
//+------------------------------------------------------------------+