رد:موضوع مخصص للأسئلة البرمجية
أستاذ أسامة
هل توجد طريقة أسهل لإستخراج الأعلى والأقل من بين قيم معينة
يعني لو عندنا 6 قيم لو إستخدمنا MathMax و MathMin هتكون بالشكل ده
لإستخراج الأكبر
كود PHP:
double Higher1=MathMax(USD(),EUR());
double Higher2=MathMax(GBP(),JPY());
double Higher3=MathMax(AUD(),CHF());
double Final =MathMax(Higher1,Higher2);
double Final_H=MathMax(Final,Higher3);
فهل توجد طريقة أسهل
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
مثال
كود PHP:
double max=MathMax(USD(),MathMax(EUR(),MathMax(GBP(),MathMax(JPY(),MathMax(AUD(),CHF())))));
الله يخليك كده فعلا أسهل كتير بدل الـ 100 متغير إللي كنت عاملهم
-----------
سؤال كمان بعد إذنك
لو مثلا في أكتر من عملية على أكتر من عملة مفتوحة مثلا
EURUSD - GBPUSD - USDCHF
وعايز الإكسبيرت ما يفتحش عمليات تانية على اي منهم طالما مفتوحين قبل كده
الدالة العادية إللي بالشكل ده
كود PHP:
string LastOrderSymb(){
string Lastsymbol;
for(int i =0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber)Lastsymbol=OrderSymbol();
}
return(Lastsymbol);
}
هتجيب إسم أخر عملة في أخر عملية
أنا بقى عايز دالة تبحث كل أسماء العملات المفتوحة بحيث ما يفتحش عليها تاني
أنا فكرت في دالة من النوع bool بحيث تعود بـ false لو إسم العملة المفتوحة كذا وأضعها شرط في البيع والشراء
بس المشكلة إن الإكسبيرت بيشتغل على 15 عملة :)
رد:موضوع مخصص للأسئلة البرمجية
هل ممكن أعملها بالشكل ده
كود PHP:
string AllOpenSymbs(){
string Lastsymbol;
string AOpenSymbs;
for(int i =0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber){
Lastsymbol=StringSubstr(OrderSymbol(),0,6);}
AOpenSymbs=AOpenSymbs+Lastsymbol;
}
return(AOpenSymbs);
}
وأعرف متغير في إستارت
كود PHP:
string AllSymbs=AllOpenSymbs();
واضع في شرط شراء اليورو مثلا
كود PHP:
if(Final_H==EUR && Final_L==USD && StringFind(AllSymbs,"EURUSD",0)==-1)Symb="EURUSD"+add_char;
وفي الباوند مثلا
كود PHP:
if(Final_H==GBP && Final_L==USD && StringFind(AllSymbs,"GBPUSD",0)==-1)Symb="GBPUSD"+add_char;
وهكذا في باقي شروط العملات الأخرى
فهل ده حل صحيح ؟
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة spiders101
شكرا جزيلا ، لدى سؤال آخر ، أريد كود يقوم بالتالى ...
اذا كان جسم الشمعة السابقة أكبر من أو يساوى 70 نقطة مثلا ، يتم دخول الصفقة عند منتصف جسم الشمعة (إعادة اختبار لجسم الشمعة) .
أستاذ أسامة ، أرجو الرد على سؤالى فـ المشاركة السابقة ، بارك الله فيك .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة spiders101
أستاذ أسامة ، أرجو الرد على سؤالى فـ المشاركة السابقة ، بارك الله فيك .
كود PHP:
double Diff=High[1]-Low[1];
if(Diff>=70*point) double Price=Low[1]+(Diff/2);
if(Close[1]>Open[1] && Ask<=Price)//Buy
if(Close[1]<Open[1] && Bid>=Price)//Sell
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة xcv114
كود PHP:
double Diff=High[1]-Low[1];
if(Diff>=70*point) double Price=Low[1]+(Diff/2);
if(Close[1]>Open[1] && Ask<=Price)//Buy
if(Close[1]<Open[1] && Bid>=Price)//Sell
جزاك الله كل خير أستاذ يوسف .
3 مرفق
رد:موضوع مخصص للأسئلة البرمجية
أستاذ أسامة ، أريد المساعدة فـ معرفة مكان الخطـأ فـ الاكسيبرت المرفق
الاكسيبرت المفترض يقوم بعمل التالى ..
اذا ظهر سهم أزرق وأغلقت الشمعة التى ظهر عليها السهم أعلى السحابة .
يفتح صفقة شراء .
واضفت خاصية Use_Candle_Retest ، Candle_Length
لتحديد اذا كان جسم الشمعة أكبر من عدد محدد من النقاط مثلا 70 نقطة ،
يقوم بفتح صفقة عندما يعود السعر لمنتصف جسم الشمعة التى جسمها 70 نقطة مثلا .
ولكن بعد عمل التعديلات السابقة لم يفتح صفقات !!
وقمت بإلغاء شروط البيع والذى يعمل فقط هو شرط الشراء الخاص بجسم الشمعة .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
الآن أنت إستخدمت الحلقه for للبحث عن الشمعه وتحديد جسمها
كود PHP:
for(int i=0;i<Bars;i++){
if(High[i]-Low[i] >=Candle_Length*point)double Price=(High[i]-Low[i])/2+Low[i];
if(Close[i]>Open[i])CandleBuy=true;
if(Close[i]<Open[i])CandelSell=true; }
لكن لاحظ أنك إستخدمت Bars عدد الشموع كلها في هذه الحاله سوف يظل يبحث في كل الشموع الموجوده على الشارت ولن يتوقف عندما يصل إلى الشمعه التي يظهر عندها السهم
فيجب أن تضع شرط آخر بحيث تقارن فقط الشمعه التي يظهر عندها السهم أو حسب ما تريد فلا أعلم الإستراتيجية تماما ثم تستخدم الأمر break لإنهاء الحلقه بعد التأكد من الشروط فأنت لا تريد إلا البحث في شموع محدده
وهذا سبب الخطأ عندك
فسوف ترى أن قيمة Price في كل مره ستتغير حتى تنتهي الحلقه وسوف تصبح قيمتها هي آخر شمعه على الشارت مثلا لو كانت الشمعه رقم 1000 فسوف يصبح في النهاية
كود PHP:
double Price=(High[1000]-Low[1000])/2+Low[1000];
الكود الصحيح
كود PHP:
for(int i=0;i<Bars;i++){
double up_m =iCustom(NULL,0,"auto recommended",2,i);
if(High[i]-Low[i] >=Candle_Length*point&&up_m>1){
double Price=(High[i]-Low[i])/2+Low[i];
if(Close[i]>Open[i])CandleBuy=true;
if(Close[i]<Open[i])CandelSell=true;
break;
}
}
أو قم بتغيير الشروط حسب ما تريده لكن المهم لا تنسى الأمر break
شكرا جزيلا أستاذ أسامة ، سأقوم بالتعديل وأخبرك النتيجة .
4 مرفق
رد:موضوع مخصص للأسئلة البرمجية
استاذ أسامة ، يوجد مشكلة غريبة فـ الاكسيبرت المرفق ، يعمل بشكل جيد فـ الباك تست
على منصة fxdd ، ولكن بعض الأخوه ذكرو انه لايفتح صفقات عند العمل لايف أو لايفتح بعض الصفقات
فـ ما السبب فـ ذلك ، المفترض انه يعمل لايف كما يعمل عند الباك تست !!
ويوجد مشكلة أخرى انه عند فتح الصفقات بالاكسيبرت ثم إغلاق المنصة وفتحها يقوم بفتح نفس
الصفقات مره أخرى مع العلم أنها مفتوحة مسبقا !!
مرفق الاكسيبرت والمؤشرات والسيت فايل .