حول الvolume إلى double
مثال
كود PHP:
double buffer_1=double(Volume[0]);
Printable View
طيب دقايق وأجهزلك المطلوب أخي أسامة
المشكلة أخي أسامة كالتالي :
الملف المرفق 485953
الملف المرفق 485950
الكود :
عندي وظيفة خارجية بترسم الأعمدة بالشكل التالي :
باستدعيها مع كل تكة وقبل إستدعائها بصفر البفرات كلها :كود PHP:
void Volume_Bars_Creator()
{
int shift=2;
long VA1;
long VA2;
for(int i=1;i<Number_Of_Bars;i++)
{
VA1=0;
VA2=0;
for(int n=i;n<i+VAPeriod;n++)
{
VA1=Volume[n]+VA1;
}
VA1=VA1/VAPeriod;
VA2=Volume[i];
if(VA2<VA1*0.8) Buff1[shift]=Volume[i];
if(VA2>=VA1*0.8 && VA2<VA1*1.2)Buff2[shift]=Volume[i];
if(VA2>=VA1*1.2 && VA2<VA1*1.5)Buff3[shift]=Volume[i];
if(VA2>=VA1*1.5 && VA2<VA1*2.5)Buff4[shift]=Volume[i];
if(VA2>VA1*2.5) Buff5[shift]=Volume[i];
shift=shift+2;
}
}
كود PHP:
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[])
{
int shift1=3;
for(int i=1;i<Number_Of_Bars;i++)
{
Buff1[shift1]=0;
Buff2[shift1]=0;
Buff3[shift1]=0;
Buff4[shift1]=0;
Buff5[shift1]=0;
shift1=shift1+2;
}
Volume_Bars_Creator();
}
بالطريقة دي زي الشارتات فوق لما بقفل المنصة وفتحها تاني لو كنت على فريم الدقيقة مثلا هلاقي أعمدة قديمة لان حلقة التصفير بتصفر بس على قد العدد الموجود في الـ Number_Of_Bars
جربت أصفر كل الأعمدة باستخدام Bars :
كل حاجة إختفت من على الشارت وكتبلي في المنصة تبويب Experts :كود PHP:
for(int i=1;i<Bars;i++)
{
Buff1[shift1]=0;
Buff2[shift1]=0;
Buff3[shift1]=0;
Buff4[shift1]=0;
Buff5[shift1]=0;
shift1=shift1+2;
}
arry out of range
مش عارف ليه
فالمشكلة إني عايز لو قفلت المنصة وفتحتها بعد فترة ألاقي بس أعمدة على قد الـ Number_Of_Bars
الكود طويل جدا لكني متأكد إن مافيش أي حاجة تانية متعلقة بالموضوع ده هما بس الوظيفة الخارجية وطريقة التصفير والإستدعاء إلى أرفقتهم فوق يعني المشكلة فيهم مش ببقية الكود أو ممكن مايكنش فيهم غلط المشكلة بالمبدء لو عندك طريقة أفضل للرسم بحيث تأدي المطلوب ياريت
بالإضافة كنت عايز منك بعد إذنك مثال على رسم الترندات في mql5 لاني واجهت مشكلة Price1 و Price2 و Time1 و Time2 غير موجودين زي mql4 فنرسم ترند إزاي باللغة الجديدة
وشكرا مقدما ياغالي
تحياتي :eh_s(7):
الخطأ لديك في كود التصفير لماذا تستخدم قيمة shift1 داخل المصفوفه ولا تستخدم قيمة i مباشرة
سبب الخطأ أنك في مرحلة سوف تصل إلى أن قيمة shift1 سوف تصبح أكبر من أقصى عدد بارات موجوده على الشارت لأنك في كل مرة تقوم بزيادتها بقيمة 2 وهذا خطأ
كود PHP:
for(int i=1;i<Bars;i++)
{
Buff1[i]=0;
Buff2[i]=0;
Buff3[i]=0;
Buff4[i]=0;
Buff5[i]=0;
}
:doh::doh::doh:
آسف ماكنتش واخد بالي من الموضوع ده لاني مش برسم الأعمدة تحت الشموع مباشرة في إزاحة زي ماشفت حضرتك
ظبطت التصفير وحاليا تحت التجربة خايف بس يبقى الكود تقيل ويسبب بطئ للمنصة
دلوقتي إن شاء الله مابقاش عندي مشكلة والكود جاهز تسلم إيديك يارب , بس بشكل عام نرجع للمشكلة الأساسية , أنا لو عايز كود معين مايتمش قرائته إلا مع إفتتاح شمعة جديدة أعملها إزاي دي ؟ زي مانتا شفت لما بقفل المنصة وبفتحها تاني هيغلط بحساب الشمعة رقم 0
وباقي بعد إذنك طريقة رسم الترندات في mql5 لاني محتاجه ضروري ومن غيره مش هعرف أعمل نسخة من المؤشر للميتا5
وشكرا مقدما :eh_s(7):
يمكنك تعريف متغير عام من نوع datetime
ثم داخل الداله OnInit إجعله يساوي قيمة الشمعه الحاليهكود PHP:
datetime Time0;
ثم ستضع الشرط قبل تنفيذ الكودكود PHP:
Time0=Time[0];
مرفق مثال لمؤشر يرسم الترند على الميتاتريدر 5 راجع الكود الخاص بهكود PHP:
if(Time0!=Time[0])
{
}
سلام عليكم مستر دولار ارجو اعطلاع على هذه المشاركه #8821
وعليكم السلام ورحمة الله وبركاته
يمكنك عمل دالة لمعرفة عدد الصفقات المفتوحه الحاليه
ثم يمكنك وضع المقارنه قبل فتح صفقة البيع أو الشراءكود PHP:
int orderstotal()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber())
{
cnt++;
}
}
return(cnt);
}
بالنسبه للسؤال الثاني فيمكنك عمل دالة تعود بالقيمة true عندما يكون السعر داخل الرينج المحددكود PHP:
if(orderstotal()<MaxOrders)
{
// open order
}
مثال
ثم يمكنك إستخدام هذه الدالة في شروط فتح الصفقاتكود PHP:
bool PriceInsideRange()
{
if(MathAbs(Close[0]-open)<=100*Point)
{
return(true);
}
return(false);
}
سلام عيكم مستر دولار فكرة اكسبريت قائمه على المستويات نفسيه يعني 1.20000 او 1.21000 او 1.23000
اي رقم يوجد به اصفار
معرفة الية عمل الاكسبيرت على فرض انا واضع سعر بدية الصفقه وهو في الاعدادات open =1.30000
شرط الشراء :
اذا كان سعر الكلوز 0 اصغر من سعر open و كلوز 0 اصغر من اوبين 0 و tr== true تفعيل امر شراء معلق
ترجمة هذا الشرط
tr== true في الكود اسفل
هذا الكود لحصر السعر داخل مسافه انا احددها لفتح الصفقهكود PHP:
double cloc44=iClose(Symbol(),PERIOD_H1,0););
double thr=(cloc44-open),thra=MathAbs( thr);
if(thra>=(Limitpip*Point)&&thra<=(((Limitpip+20)*Point)))bool tr=true;
هذا مثال مصوراسفل لعملية الشراء طبعا عكس هاد الكو لي بيع
وشكرا جزيلا
السلام عليكم ورحمة الله تعالى وبركاته
تحياتي أستاذ أسامة :eh_s(7):
حاولت أفهم الكود الي أرفقتهولي حضرتك لكن ماقدرتش اللغة كلها لسه جديدة عليا مش فاهم فيها حاجة
عملت بحث لقيت واحد كاتب عن الموضوع ده هنا :
https://www.mql5.com/en/blogs/post/681230
لكن كمان مش فاهم الأكواد إلي عاملها تتكتب فين وتشتغل إزاي
ياريت ياريس شرح للأكواد دي تشتغل إزاي إن كانت أفضل طريقة ولو في طريقة أفضل من عندك ياريت
It's important that there are no constants such as OBJPROP_TIME1 and OBJPROP_PRICE1 in mql5, and instead of OBJPROP_TIME1, OBJPROP_TIME2, OBJPROP_TIME3 one need to use the single constant OBJPROP_TIME and additional index. Price-related constants changed in the same way. How to emulate this? Well, by objects. Let's define 2 classes for properties of integer and double types (other types you can add yourself).
كود PHP:
class OBJPROP_INTEGER_BROKER
{
public:
ENUM_OBJECT_PROPERTY_INTEGER p;
int i;
OBJPROP_INTEGER_BROKER(const ENUM_OBJECT_PROPERTY_INTEGER property, const int modifier)
{
p = property;
i = modifier;
}
};
class OBJPROP_DOUBLE_BROKER
{
public:
ENUM_OBJECT_PROPERTY_DOUBLE p;
int i;
OBJPROP_DOUBLE_BROKER(const ENUM_OBJECT_PROPERTY_DOUBLE property, const int modifier)
{
p = property;
i = modifier;
}
};
OBJPROP_INTEGER_BROKER OBJPROP_TIME1(OBJPROP_TIME, 0);
OBJPROP_DOUBLE_BROKER OBJPROP_PRICE1(OBJPROP_PRICE, 0);
OBJPROP_INTEGER_BROKER OBJPROP_TIME2(OBJPROP_TIME, 1);
OBJPROP_DOUBLE_BROKER OBJPROP_PRICE2(OBJPROP_PRICE, 1);
OBJPROP_INTEGER_BROKER OBJPROP_TIME3(OBJPROP_TIME, 2);
OBJPROP_DOUBLE_BROKER OBJPROP_PRICE3(OBJPROP_PRICE, 2);
Look how constants OBJPROP_TIMEn/OBJPROP_PRICEn "became" the objects storing corresponding index inside. Now we can implement new ObjectSet functions, and pass broker objects as parameters:
كود PHP:
bool ObjectSet(const string name, const OBJPROP_INTEGER_BROKER &property, const long value)
{
return ObjectSetInteger(0, name, property.p, property.i, value);
}
bool ObjectSet(const string name, const OBJPROP_DOUBLE_BROKER &property, const double value)
{
return ObjectSetDouble(0, name, property.p, property.i, value);
}
كود PHP:
ObjectSet(name, OBJPROP_TIME1, Time[0]);
ObjectSet(name, OBJPROP_PRICE1, price);
ومثال بسيط كده من غير أي شروط ترند يرتسم على لو الشمعة 1 والشمعة 2
وألف شكر ليك ياغالي :eh_s(7):
سؤال تاني بارك الله فيك
إيه اسم الأوبجكت ده ؟ بصيت في الـ Object Types مالقيتهوش
في الأول إفتكرت إنه مزيج من OBJ_RECTANGLE_LABEL و أزرار
لكن عند كلمة Buy واضح إنها قائمة منسدلة !!
والإكسبرت ده في الماركت ومافيش معاه أي ملفات خارجية أو حاجة يعني الأداة دي من نفس mq4
الملف المرفق 486375
السلام عليكم ورحمة الله وبركاته
جزى الله الإخوة القائمين على هذا الموقع وخصوصاً الأخ مستر دولار
عندي طلب بسيط : كود يقوم بجمع أطوال الذيول العلوية والسفلية (بالنقاط طبعاً) .. ولتكن مجموع الذيول السفلية للشمعات الثلاث السابقة (DN)... ومجموع الذيول العلوية للشمعات الثلاث السابقة يوضع في (UP) .. طبعاً نعلم أنه بعض الشمعات رابحة وأخرى خاسرة وهنا المشكلة ... لذلك أريد كود يقوم بهذه المهمة مع الشكر