السلام عليكم اخي اسامة
هل يمكن ان احدد على شمعة الاربع ساعات او الديلي هاي او للو شمعة الدقيقة ايهما سبق ...
يعني لدي شمعة للاربع ساعات نازلة ويكون السعر صعد اولا ثم نزل كيف اعرف دلك ... اقصد برمجيا
Printable View
السلام عليكم اخي اسامة
هل يمكن ان احدد على شمعة الاربع ساعات او الديلي هاي او للو شمعة الدقيقة ايهما سبق ...
يعني لدي شمعة للاربع ساعات نازلة ويكون السعر صعد اولا ثم نزل كيف اعرف دلك ... اقصد برمجيا
السلام عليكم اخي اسامة
سؤال اخر واعتدر على الزعاج
عندما نشتغل على مؤشر عادة نستعمل اما الهاي او اللو الاغلاق او الافتتاح كيف اجعل المؤشر يمر على جميع التكات
ءاريت يكون السؤال واضح
تحياتي لك اخي الكريم
الخوارزم:
1) تسجل تاريخ بدء الشمعة على الاربع ساعات
2) تسجيل تاريخ نهاية الشمعة (يعني بدء الشمعة بعدها)
فهذا جسد شمعة الاربع ساعات زمنيا
3) تذهب الى فريم 1 دقيقة
4) تحول تاريخ البدء الى رقم البارة
5) تحاول تاريخ النهاية الى رقم بارة
فيصبح لديك رقمين
5) تستخدم دوال اكتشاف الهاي او اللو بين الرقمين
-
6) رقم بارة الهاي و بارة اللو -- تقارن بينهم ومنها تعرف ايهما سبق.
ضعه على اربع ساعات واضغط اي شمعة
ثم غير فريم دقيقة لتتأكد--- مع فريم دقيقة سيلغي مفعول الضغط ولن تتغير القيم.
للشموع البعيدة اتي باانات 1 ديقة غر متاحة ممكن تغير من دقيقة الى ربع ساعة الى نصف ساعة الى ساعة - مع تعديل مايلزم
كود 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_E_N_D);
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);
}
}
}
}
//+------------------------------------------------------------------+
شكرا أستاذ أسامة جزاك الله خيرا
عندى مشكلة أرجوا ان تطلعنى ما الخطأ فى الكود التالى حيث ان (SetIndexBuffer(2,trend_Up وايضا( SetIndexBuffer(3,trend_Dn لا تظهر على الشارت
شكرا لككود:#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
input int PeriodEnve = 14;
input ENUM_MA_METHOD Method = 0;
input int period = 14;
input double deviation = 0.2;
input bool FirstSignalFilter =true;
input bool Enable_Alert =true;
input bool Send_Notifications =false;
input bool Send_Mail =false;
double pvi[];
double bandUp[];
double bandDn[];
double trend_Up [];
double trend_Dn [];
double swing_Up [];
double swing_Dn [];
datetime Timee;
int LastSignal;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
IndicatorDigits(2);
IndicatorBuffers(7);
SetIndexBuffer(0,swing_Up );
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,164);
SetIndexBuffer(1,swing_Dn );
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,164);
SetIndexBuffer(2,trend_Up );
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,221);
SetIndexBuffer(3,trend_Dn );
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,222);
SetIndexBuffer(4,pvi );
SetIndexBuffer(5,bandUp );
SetIndexBuffer(6,bandDn );
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
double iatr = iATR(Symbol(), 0, 50, 1);
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit =Bars-100;
double vol0, vol1;
double PVI=1;
double close0,close1;
for (int i=limit; i>=0; i--)
{
vol1=Volume[i+1];
vol0=Volume[i];
close1=Close[i+1];
close0=Close[i];
if (vol0>vol1) PVI=PVI+((close0-close1)/(close1*PVI));
if (vol0<=vol1) PVI=PVI ;
pvi[i]=PVI;
}
for (int i=limit; i>=0; i--)
{
bandUp[i] = iEnvelopesOnArray(pvi,0,PeriodEnve,Method,0,deviation,MODE_UPPER,i);
bandDn[i] = iEnvelopesOnArray(pvi,0,PeriodEnve,Method,0,deviation,MODE_LOWER,i);
if (pvi [i] > bandUp[i] &&(LastSignal!=1||!FirstSignalFilter))
{
swing_Up[i] = Low[i] - iatr /2.0;
LastSignal=1;
if(Timee!=Time[0]&&i==1)
{
if(Enable_Alert)Alert("swing Arrow Up"+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Mail)SendMail("swing Arrow Up","swing Arrow Up "+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Notifications)SendNotification("swing Arrow Up "+Symbol()+" TF: "+TimeFrame(Period()));
Timee=Time[0];
}
}
if (pvi[i] < bandDn[i]&&(LastSignal!=-1||!FirstSignalFilter))
{
swing_Dn[i] = High[i] + iatr /2.0;
LastSignal=-1;
if(Timee!=Time[0]&&i==1)
{
if(Enable_Alert)Alert("swing Arrow Down"+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Mail)SendMail("swing Arrow Down","swing Arrow Down "+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Notifications)SendNotification("swing Arrow Down "+Symbol()+" TF: "+TimeFrame(Period()));
Timee=Time[0];
}
}
}
//-----------------------------------------------------------------------------------------------------------------
for (int i=limit; i>=0; i--)
{
double mfi1 = iMFI(Symbol(), 0,period,i);
double mfi2 = iMFI(Symbol(), 0,period,i+1);
if ( mfi2 <25 && mfi1 >25 && pvi[i] > bandUp[i] &&(LastSignal!=1||!FirstSignalFilter))
{
trend_Up[i] = Low[i] - iatr /2.0;
LastSignal=1;
if(Timee!=Time[0]&&i==1)
{
if(Enable_Alert)Alert("trend Arrow Up"+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Mail)SendMail("trend Arrow Up","trend Arrow Up "+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Notifications)SendNotification("trend Arrow Up "+Symbol()+" TF: "+TimeFrame(Period()));
Timee=Time[0];
}
}
if ( mfi2 >75 && mfi1 <75&& pvi[i] < bandDn[i]&&(LastSignal!=-1||!FirstSignalFilter))
{
trend_Dn[i] = High[i] + iatr /2.0;
LastSignal=-1;
if(Timee!=Time[0]&&i==1)
{
if(Enable_Alert)Alert("trend Arrow Down"+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Mail)SendMail("trend Arrow Down","trend Arrow Down "+Symbol()+" TF: "+TimeFrame(Period()));
if(Send_Notifications)SendNotification("trend Arrow Down "+Symbol()+" TF: "+TimeFrame(Period()));
Timee=Time[0];
}
}
}
return(rates_total);
}
//------------------------------------------------------------------
string TimeFrame(int TF)
{
if(TF==1)return("M1");
else if(TF==5)return("M5");
else if(TF==15)return("M15");
else if(TF==30)return("M30");
else if(TF==60)return("H1");
else if(TF==240)return("H4");
else if(TF==1440)return("D1");
else if(TF==10080)return("W1");
else if(TF==43200)return("MN");
else return("");
}
تظهر كلها
غيرها الى اربعة الوان بدل لونين لكي تميزها
https://charts.mql5.com/15/762/nzdus...e-of-borse.png
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_E_N_D);
صحح هذا الخطأ الى:
low = iLow (NULL, PERIOD_M1, bar_1M_Frame_Start);
اعتقد استاذ أسامة أنى عرفت أين المشكلة لكن لم استطيع كتابة الكود الخاص بها
وهى أن (SetIndexBuffer(2,trend_Up لكى يتحقق شرطها لا بد ان تكون (SetIndexBuffer(0,swing_Up هى اخر ظهور لها على الشارت وتمثل حالة الشراء
وايضا ( SetIndexBuffer(3,trend_Dn لكى يتحقق شرطها لا بد ان تكون (SetIndexBuffer(1,swing_Dn هى أخر ظهور لها على الشارت وتمثل حالة البيع
بمعنى أوضح أخر أشارة لما تكون شراء يتحقق شرط trend_up , واخر اشارة تكون بيع يتحقق شرط trend_dn
ويسبقهم الشرط الاساسى لمؤشر mfi كما هو موضح بالكود
كود:if ( mfi2 <25 && mfi1 >25 && pvi[i] > bandUp[i] &&(LastSignal!=1||!FirstSignalFilter))
{
trend_Up[i] = Low[i] - iatr /2.0;
LastSignal=1;
وشكرا لك أستاذ أسامةكود:if ( mfi2 >75 && mfi1 <75&& pvi[i] < bandDn[i]&&(LastSignal!=-1||!FirstSignalFilter))
{
trend_Dn[i] = High[i] + iatr /2.0;
LastSignal=-1;
بدلا من إستخدام المتغير LastSignal في شرط المقارنه إستخدم المصفوفه نفسها لمعرفة آخر إشارة كانت بيع أو شراء
مثال
ثم ستكون المقارنهكود PHP:int CheckLastSignal(int shift)
{
for(int i=shift;i<Bars;i++)
{
if( swing_Up[i]!=EMPTY_VALUE)return(1);
if(swing_Dn[i]!=EMPTY_VALUE)return(-1);
}
return(0);
}
كود PHP:if ( mfi2 <25 && mfi1 >25 && pvi[i] > bandUp[i] &&(CheckLastSignal(i)!=1||!FirstSignalFilter))