النتائج 2,161 إلى 2,175 من 10363
الموضوع: موضوع مخصص للأسئلة البرمجية
- 25-05-2012, 02:43 PM #2161
رد:موضوع مخصص للأسئلة البرمجية
أستاذ أسامة
هل توجد طريقة أسهل لإستخراج الأعلى والأقل من بين قيم معينة
يعني لو عندنا 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);
- 25-05-2012, 07:22 PM #2162
- 26-05-2012, 03:53 PM #2163
رد:موضوع مخصص للأسئلة البرمجية
الله يخليك كده فعلا أسهل كتير بدل الـ 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 عملة
آخر تعديل بواسطة xcv114 ، 26-05-2012 الساعة 03:55 PM
- 26-05-2012, 04:43 PM #2164
رد:موضوع مخصص للأسئلة البرمجية
هل ممكن أعملها بالشكل ده
وأعرف متغير في إستارتكود 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;
فهل ده حل صحيح ؟
- 26-05-2012, 05:40 PM #2165
- 26-05-2012, 06:26 PM #2166
- 27-05-2012, 01:41 AM #2167
الحل الأول هو كما ذكرت مثلا أن تقوم بعمل داله لتقارن بين إسم العمله وهل هي مفتوحه أو لا
ومع كل شرط في هذه الحاله يجب أن تكتب إسم العمله الذي ستقارنه بالنفس العمله التي ستفتح لها الصفقهكود PHP:bool isopenedbefore(string sym){
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==sym&&OrderMagicNumber()==MagicNumber)return(true);
}
return(false);
}
حل آخر يمكنك عمل مصفوفه بحيث ستحفظ جميع أسماء العملات المفتوحه
تقوم بتعريف مصفوفه لتحتوي على أسماء العملات
ثم سوف تقوم بعمل داله لحفظ أسماء العملاتكود PHP:string symbolsname[];
ثم عند المقارنه مثلاكود PHP:void OpendOrdersSymbol(){
ArrayResize(symbolsname,OrdersTotal());
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber)symbolsname[i]=OrderSymbol();
}
}
كود PHP:for(int i=0;i<OrdersTotal();i++){
if(symbolsname[i]=="EURUSD")
return;
}
- 27-05-2012, 04:41 AM #2168
- 27-05-2012, 04:49 AM #2169
رد:موضوع مخصص للأسئلة البرمجية
أستاذ أسامة ، أريد المساعدة فـ معرفة مكان الخطـأ فـ الاكسيبرت المرفق
الاكسيبرت المفترض يقوم بعمل التالى ..
اذا ظهر سهم أزرق وأغلقت الشمعة التى ظهر عليها السهم أعلى السحابة .
يفتح صفقة شراء .
واضفت خاصية Use_Candle_Retest ، Candle_Length
لتحديد اذا كان جسم الشمعة أكبر من عدد محدد من النقاط مثلا 70 نقطة ،
يقوم بفتح صفقة عندما يعود السعر لمنتصف جسم الشمعة التى جسمها 70 نقطة مثلا .
ولكن بعد عمل التعديلات السابقة لم يفتح صفقات !!
وقمت بإلغاء شروط البيع والذى يعمل فقط هو شرط الشراء الخاص بجسم الشمعة .
- 29-05-2012, 07:14 PM #2170
الآن أنت إستخدمت الحلقه for للبحث عن الشمعه وتحديد جسمها
لكن لاحظ أنك إستخدمت Bars عدد الشموع كلها في هذه الحاله سوف يظل يبحث في كل الشموع الموجوده على الشارت ولن يتوقف عندما يصل إلى الشمعه التي يظهر عندها السهمكود 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; }
فيجب أن تضع شرط آخر بحيث تقارن فقط الشمعه التي يظهر عندها السهم أو حسب ما تريد فلا أعلم الإستراتيجية تماما ثم تستخدم الأمر break لإنهاء الحلقه بعد التأكد من الشروط فأنت لا تريد إلا البحث في شموع محدده
وهذا سبب الخطأ عندك
فسوف ترى أن قيمة Price في كل مره ستتغير حتى تنتهي الحلقه وسوف تصبح قيمتها هي آخر شمعه على الشارت مثلا لو كانت الشمعه رقم 1000 فسوف يصبح في النهاية
الكود الصحيحكود PHP:double Price=(High[1000]-Low[1000])/2+Low[1000];
أو قم بتغيير الشروط حسب ما تريده لكن المهم لا تنسى الأمر breakكود 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;
}
}
- 30-05-2012, 06:29 PM #2171
- 30-05-2012, 06:41 PM #2172
رد:موضوع مخصص للأسئلة البرمجية
استاذ أسامة ، يوجد مشكلة غريبة فـ الاكسيبرت المرفق ، يعمل بشكل جيد فـ الباك تست
على منصة fxdd ، ولكن بعض الأخوه ذكرو انه لايفتح صفقات عند العمل لايف أو لايفتح بعض الصفقات
فـ ما السبب فـ ذلك ، المفترض انه يعمل لايف كما يعمل عند الباك تست !!
ويوجد مشكلة أخرى انه عند فتح الصفقات بالاكسيبرت ثم إغلاق المنصة وفتحها يقوم بفتح نفس
الصفقات مره أخرى مع العلم أنها مفتوحة مسبقا !!
مرفق الاكسيبرت والمؤشرات والسيت فايل .
- 31-05-2012, 01:40 PM #2173
أستاذ أسامة عايزين ولو محاضرة واحدة ساعتين في برمجة المؤشرات
في أي وقت تكون فاضي فيه
لإني ضايع خالص في المؤشرات
- 31-05-2012, 03:47 PM #2174
السبب لأنك جعلت MaxTrades =3 فبالتالي هذا الشرط لن يفيد في حال أغلقت الإكسبرت وقمت بفتحه أيضا شرط
لن يفيد لأن قيمة T سوف تتغير عند تفعيل الإكسبرت مره أخرى وهذا هو السببكود PHP:T!=Time[0]
لذلك يمكنك بدلا من إستخدام متغير T أن تستخدم المتغيرات العامة Global Variables
مثلا عند فتح الصفقه سوف تجعل
وعند المقارنه سوف تقارنكود PHP:GlobalVariableSet("T",Time[0]);
وهذه المتغيرات لن تحذف أو تتغير قيمتها حتى إذا أغلقت المنصه إلا إذا قمت بحذفها أنتكود PHP:GlobalVariableGet("T")!=Time[0]
وبالتالي سوف تحل المشكله لكن تأكد من أن تجعل إسم المتغيرات مثلاكود PHP:GlobalVariableDel("T")
لماذا ؟كود PHP:GlobalVariableSet("T"+Symbol(),Time[0]);
حتى إذا وضعت الإكسبرت على أكثر من عمله يكون لكل عمله المتغير الخاص به
إذا كنت لا تريد إستخدام هذه المتغيرات يمكنك بإستخدام الدوال بدلا من المتغير T سوف تستخدم دالة تقوم بمعرفة توقيت فتح آخر صفقه
ثم تضع الشرطكود PHP:datetime LastOpenendOrder(){
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(OrderOpenTime());
}
}
return(0);
}
كود PHP:Time[0]>LastOpenendOrder()
- 31-05-2012, 03:51 PM #2175
بالنسبه لمشكلة اللايف والباك تست فالإكسبرت لا يوجد به أي أخطاء وهذه المشكله ذكروها لي أكثر من مره حتى في إكسبرتاتي السبب الوحيد إما أن حجم اللوت به خطأ أو عدم تفعيل الإكسبرت بشكل صحيح
أو أي خطأ آخر يجب التأكد من خانة Experts و Journal
قم بوضع تنبيه في الإكسبرت بحيث يظهر رقم الخطأ عند فتح الصفقه لأن بعض الإخوه لا يلاحظ الأخطاء التي تظهر في الجورنال
كود PHP:int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),5*Q,0,0," EA",MagicNumber,0,Blue);
if(ticket<0)Alert("Order Send Error "+GetLastError());
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM
الأكثر زيارة
رد مع اقتباس