1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
تحية طيبة أخواني
أشكركم جميعا على مجهودكم الرائع
لدي مشكلتين مع اكسبيرت بسيط جدا
+ يعيد فتح الصفقة عند فتح المنصة مرة أخرى
+ يفتح صفقة بأي سعر عند توفر الشرط ،،،أو يفتح صفقة بعد ضرب الاستوب او التريلنج...
والمفروض أن لا يفتحها إلا عند سعر إغلاق الشمعة السابقة،، وعند ضرب الستوب أو التريلينغ ينتظر الاغلاق القادم ويبدأ من جديد
شروط الدخول بالصفقة :
+ بيع عند كل سعر إغلاق شمعة حمراء + وشراء عند كل سعر إغلاق شمعة خضراء
مأ أعلمه لحل المشاكل دي ، قمت بإضافة الكود في بداية الاكسبرت :
كود PHP:
datetime LastAlertTime;
بعدها أضفت في إجراءات الاكسبيرت ما يلي:
كود PHP:
int init()
{
//----
LastAlertTime = TimeCurrent();
//----
return(0);
}
وفي النهاية لحل مشكلة تكرار الدخول بعد فتح المنصة أضفت ما يلي :
كود PHP:
int init()
{
//----
LastAlertTime = Time[0];
//----
return(0);
}
كل هذه الاضافات ولازالت المشاكل السابقة قائمة وأكيد في خلل ما ،،، فأرجو تعديل الاكسبيرت --- للإفادة وفهم الطريقة ---
ولي طلب آخر جزاكم الله خيرا إضافة البريك إيفن والموف تو ستوب -- للإفادة وفهم الطريقة --
الاكسبيرت بالمرفقات
رد:موضوع مخصص للأسئلة البرمجية
اكثر من مرة اصبحت تأتيني رسالة مزعجة تضيع فرصة الدخول الى الصفقة لعملات مختلفة ماهو الحل مع رسالة الخطأ Off quotes
حاولت مع RefreshRates ولكنها لم تفلح ، ماهي برأيك المشكلة
كود PHP:
2012.11.21 04:08:54 '92002476': order sell 0.14 GBPJPY opening at 130.401 sl: 130.650 tp: 130.250 failed [Off quotes]
2012.11.21 04:08:54 '92002476': request in process
2012.11.21 04:08:54 '92002476': request was accepted by server
2012.11.21 04:08:54 '92002476': instant order sell 0.14 GBPJPY at 130.401 sl: 130.650 tp: 130.250
كود PHP:
2012.11.21 04:16:59 '92002476': order sell 0.14 EURJPY opening at 104.951 sl: 105.190 tp: 104.790 failed [Off quotes]
2012.11.21 04:16:59 '92002476': request was accepted by server
2012.11.21 04:16:58 '92002476': instant order sell 0.14 EURJPY at 104.951 sl: 105.190 tp: 104.790
الامر الذي تسبب في الخطأ هو:
كود PHP:
successOrder = OrderSend(currency,OP_SELL,Lots,Bid,3,Sel_SL1,Sel_TP1,SelStrategy,MagicNumber,0,CLR_NONE );
2 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
بشكل عام الدوال المسئوله عن إستدعاء كائن من على الشارت
كود PHP:
ObjectGet( string name, int index)
حيث name هو إسم الكائن
index هو خاصية الكائن التي تريد إستدعائها
مثلا خط على الشارت إسمه line1
لإستدعاء سعر الخط الحالي
كود PHP:
double price=ObjectGet(line1,OBJPROP_PRICE1);
لإستدعاء لون الخط
كود PHP:
double price=ObjectGet(line1,OBJPROP_COLOR);
مثلا لو كان ترند فسوف يكون لها نقطة بدايه ونهاية فسوف يكون
كود PHP:
double price1=ObjectGet(line1,OBJPROP_PRICE1);
double price2=ObjectGet(line1,OBJPROP_PRICE2);
لو مثلا أريد تحديد توقيت البدايه والنهايه للترند
كود PHP:
datetime time1=ObjectGet(line1,OBJPROP_TIME1);
datetime time2=ObjectGet(line1,OBJPROP_TIME2);
لو مثلا كان الترند شعاع وأريد معرفة السعر عند أي شمعه أحددها كم قيمة الترند أستخدم
كود PHP:
double price=ObjectGetValueByShift(line1,0)
الرقم 0 هو رقم الشمعه
في المؤشر الذي أرفقته
أولا أريد معرفة إسم الكائن على الشارت
نسبة الشراء إسم الكائن Trend_UP_value
ونسبة البيع إسم الكائن Trend_DOWN_value
ثانيا أريد معرفة القيم التي تأخذها
سوف نستخدم الداله
كود PHP:
ObjectDescription
وهي تعود بالتكست وتستخدم للكائن من نوع OBJ_LABEL أو OBJ_TEXT
فسوف يكون الكود
كود PHP:
string buypercent=ObjectDescription("Trend_UP_value");
لكن يجب أن أقوم بتحويل الكود من نص إلى أرقام حتى تكون المقارنه صحيحه عند إستخدامها
كود PHP:
double percentNumber=StrToDouble(StringSubstr(buypercent,0,StringLen(buypercent-1)));
وسوف تستخدم نفس الطريقة بالنسبه للبيع
السلام عليكم ورحمة الله
أستاذي الفاضل ، اتبعت نفس الخطوات لكن عند عمل كومبايلر بتجي رسالة خطأ من السطر ده
double percentNumber=StrToDouble(StringSubstr(buypercent, 0,StringLen(buypercent-1)))
ارفقت لك اكسبيرت ومؤشر في ابسط حالاتها بهدف التعلم من تصحيح الأكسبيرت المرفق حتى يكون مرجع لي ، شكرا .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة H.O
السلام عليكم ورحمه الله وبركاته
بسم الله الرحمن الرحيم
السؤال فى الصوره
طبعا السؤال هوه كيف يتم ذالك برمجيا ما هو الكود ؟؟؟
بارك الله فيكم وشكرا لكم اخوكم ابو يوسف
يمكنك ذلك بإستخدام دالة ObjectGetShiftByValue
وهي تأتي برقم الشمعة التي يلتقي فيها الترند مع السعر أو الخط الأفقي
بالشكل ده حسب الصورة
كود PHP:
int Barshift1=ObjectGetShiftByValue("FirstTrend", 1.28214);
طبعا لابد من تغير إسم الترند من الخصائص إلى FirstTrend حسب المثال
كما يمكنك التعويض عن 1.28214 بمتغير خارجي أو تستخدم دالة ObjectGet لتعود بقيمة الخط الأفقي
بالشكل ده :
كود PHP:
double Horizontal= ObjectGet( "Horiz", OBJPROP_PRICE1);
int Barshift1=ObjectGetShiftByValue("FirstTrend", Horizontal);
Comment("MyBarShift = ",Barshift1);
ويجب أن تغير إسم الخط الأفقي من الخصائص إلى Horiz والترند إلى FirstTrend
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
بالنسبه للإكسبرت فكان يوجد به بعض الأخطاء البرمجيه في إضافة وحذف الأقواس فيجب أن تنتبه لهذه الأخطاء
الإكسبرت يوجد به شرط العمل عند إفتتاح كل شمعه جديده فقط
كود PHP:
if (BarTime1 < Time[0])
{
// we have a new bar opened
BarTime1 = Time[0]; // keep the new bar open time
PrintInfoToChart22();
TrailingStop21();
HoursFilter24();
WeekdayFilter15();
}
فلا تحتاج إلى إضافة شروط جديده
لكن المشكله فقط عندما تغلق الميتاتريدر وتفتحه فسوف تضيف الشرط
كود PHP:
BarTime1 = Time[0];
داخل الداله init
بالنسبه للبريك إيفن فتم إضافته في التعديل
جزاك الله خيرا أستاذي العزيز ، :eh_s(7):
جاري المطالعة
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة H.O
السلام عليكم ورحمه الله وبركاته
بسم الله الرحمن الرحيم
بارك الله فيك اخي الكريم انت مبدع ما شاء الله :ongue:
والظاهر انا مخي ناشف حبتين :doh:
وكيف اقوم بترجمة Barshift1 ( رقم الشمعه فهوه بسالب ) الى datetime :016:
اكرر شكرى وتقديري لك اخي الكريم :0031:
بارك الله فيك وشكرا لك اخوك ابو يوسف
طيب في الأول إنت أكيد عارف إن مثلا
فريم الساعة هو عبارة عن ( 60 دقيقة × 60 ثانية = 3600 ثانية )
فريم 4 ساعات هو عبارة عن ( 4 ساعات × 60 دقيقة × 60 ثانية = 14400 ثانية )
فريم اليومي هو عبارة عن ( 24 ساعة × 60 دقيقة × 60 ثانية = 86400 ثانية )
وهكذا
طيب إحنا خلينا نعمل مثال لو إحنا شغالين على شارت الساعة وعايزين نجيب وقت التقاطع
فرضاً دلوقتي الوقت الحالي للشمعة الحالة Time[0] = 1353513600
وكان عندنا Barshift1 = -12
يبقى عشان نجيب الوقت المستقبلي للشمعة -12
هنجمع الوقت الحالي 1353513600 + ناتج ضرب ( 12 × 3600 ) >> ( طبعا 3600 دي عشان نحول الساعة لثواني ذي ما شرحت فوق )
----------------------------------------
ده كان شرح الحل بالرياضيات خلينا بقى في إزاي نطبقه بالأكواد
--------------------------
كود PHP:
int TF;
double Horizontal= ObjectGet( "Horiz", OBJPROP_PRICE1);
int Barshift1=ObjectGetShiftByValue("FirstTrend", Horizontal);
if(Period()== PERIOD_M15) TF=900 ;
if(Period()== PERIOD_M30) TF=1800 ;
if(Period()== PERIOD_H1) TF=3600 ;
if(Period()== PERIOD_H4) TF=14400 ;
if(Period()== PERIOD_D1) TF=86400 ;
if(Barshift1<=0){
int FutureDT=Time[0]+(MathAbs(Barshift1)* TF);}
Comment("MyBar Shift = ",Barshift1,"\n","Expected DT = ",FutureDT,"\n",
"Current DT = ",TimeCurrent( ),"\n","Day : ",TimeDay(FutureDT)," ---Time: ", TimeHour(FutureDT)," :",TimeMinute(FutureDT) );
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم أخي مستر دولار
لاحظت عند إضافة مؤشر للاكسبيرت أن الدلة الايفري بار لا تعمل جيدا وبالتالي استبدلتها بدالة الإيفري تيك،،
وتم إضافة الشرط Onceperbar لكي لا يحصل فتح أكثر من صفقة بنفس الشمعة وخصوصا عند ضرب التريلينغ فهل الشرط سليم؟
ولكن بعد التجربة، بمجرد تفعيل الاكسبيرت يفتح صفقة ماركت من أي سعر! رغم أنها باتجاه الشروط المحققة مسبقا (الموفينجين + لون الشمعة) إلا أنها مشكلة لأني أريد أن يفتح الصفقة فقط عند سعر إغلاق الشمعة (طبعا محققا شروط الدخول)،
مع العلم أنني استخدمت الدالة NormalizeDouble على شرطي البيع والشراء ولم تنجح فما العمل؟؟
أرجو المساعدة أخي الكريم وذلك بتصحيح ضمني داخل الاكسبيرت (بالمرفقات)
وجزاك الله كل خير أخي :)