لن تعرف طبعا إلا إذا كان لديك باقي الكود لمراجعة الدواله الأخرى الموجوده في هذا الكود لكن واضح أنه يقوم بالتأكيد على رقم الحساب AccountNumber و التأكد من العمله
Printable View
أولا بالنسبه للخطأ
أنت تعريفك للمتغير صحيح يجب أن يكون متغير نصي لكن قد يحدث هذا الخطأ عندما لا تعطي للمتغير قيمه نصية وبالتالي قد يمر في الكود على الداله Marketinfo قبل أن يأخذ المتغير Symb إسم العمله
لحل المشكله يجب أن تتأكد قبل فتح الصفقه
أن الشروط تحققت تم تحديد إسم العمله الإبتدائي منكود PHP:if(Symb!=LastOrderSymb()&&Symb!="")
-----------كود PHP:if(EATrading_ON&&orderstotal()<MaxOrders && time1!=Time[0]){
if(Final_H==EUR() && Final_L==USD()){Symb=EURUSDname;pt=0.0001;dig=4;}
if(Final_H==EUR() && Final_L==GBP()){Symb=EURGBPname;pt=0.0001;dig=4;}
if(Final_H==EUR() && Final_L==JPY()){Symb=EURJPYname;pt=0.01;dig=2;}
if(Final_H==USD() && Final_L==JPY()){Symb=USDJPYname;pt=0.01;dig=2;}
if(Final_H==GBP() && Final_L==USD()){Symb=GBPUSDname;pt=0.0001;dig=4;}
if(Final_H==GBP() && Final_L==JPY()){Symb=GBPJPYname;pt=0.01;dig=2;}
الآن سوف أقترح عليك إقتراحات بالنسبه لمشكلة تغير إسم العمله وحتى تجعلها بشكل أوتوماتيكي
إجعل الإكسبرت يعرف هل العمله بها حروف زائده أو لا
ثم إذا كان هناك أحرف زائده سوف يأخذ المتغير add_char قيمة الحروف الزائده سواء m أو مهما كانكود PHP:if(StringLen(Symbol())>6){
string add_char=StringSubstr(Symbol(),6,0);
}
ثم بعد ذلك سوف تجعل إسم العمله
بالتالي لن تحتاج إلى تعريف متغيرات خارجية يوضع بها إسم العملهكود PHP:Symb="EURUSD"+add_char;
شكرا أستاذ أسامة
أنا كنت حليت الموضوع ده بس طريقتي كانت طويلة وصعبة لإني مكنتش أعرف إني ممكن أضيف على النص بعلامة +
بس طريقتك أسهل بكتير وهتوفر وقت كتير عليا في التعديلات
ألف شكر
--------------------
وكان لي طلب كمان كنا عايزين نعمل مؤشر للإكسبيرت ده بحيث كل عملة يكون ليها خط شبه الأر إس أي
بس بصراحة عمل المؤشر صعب عليا
وأنا جربت أعمله بس مفيش ولا خط بيظهر في النافذة المنفصلة :)
السلام عليكم
ممكن دالة تقوم بحساب عدد الصفقات المفتوحة في شمعة معينة ؟
أستاذ أسامة نفس المشكلة يقرأ symb انها ليست متغير نصي
لكن المشكلة بتحصل مع EURUSD و GBPUSD
فهل المشكلة إن اليورو دولار والباوند دولار بينتهوا بحرف D"
فيقرأها خطأ على أساس تعريف للوقت D'
لإن الخطأ بيحصل في العملتين دول بس
مرفق الإكسبيرت
وكمان أنا معرف دالة تجيب إسم أخر عملية مفتوحة
وعامل شرط في الشراء والبيعكود PHP:string LastOrderSymb(){
string Lastsymbol;
for(int i =0;i<=OrdersTotal();i++){
if(OrderMagicNumber()==MagicNumber)Lastsymbol=OrderSymbol();
}
return(Lastsymbol);
}
وبالرغم من كده في منصات ذي IBFX و AFBfx مصممة تفتح عملية من نفس النوع والعملية الأولى شغالةكود PHP:if(Symb!=LastOrderSymb()&&Symb!="")
إية المشكلة مش عارف :)
إكسبيرت غريب :doh:
طيب ما هو أكيد لازم يكون في خطأ بما إني نسيت أكتب
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
في دالة تحديد عملة الأوردر الأخير
------------------
دي حاجة تهبل
:(
لو رأينا دالة حساب عدد الصفقات المفتوحه
لكن بقي أن نضيف شرط بحيث يتأكد من أن توقيت إفتتاح الصفقة أكبر من أو يساوي توقيت فتتاح الشمعه وأقل من توقيت إغلاق الشمعهكود PHP:int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() &&OrderMagicNumber()== MagicNumber){
cnt++;
}
}
}
return(cnt);
}
طبعا Time يمكنك تغييرها وتحديد الشمعه التي تريدها وسوف تكون الشروط نفسهاكود PHP:if(OrderOpenTime()>=Time[0]&&OrderOpenTime()<Time[0]+Period()*60)
فتصبح الداله النهائية
كود PHP:int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() &&OrderMagicNumber()== MagicNumber&&OrderOpenTime()>=Time[0]&&OrderOpenTime()<Time[0]+Period()*60){
cnt++;
}
}
}
return(cnt);
}
أستاذ أسامة
دلوقتي الإكسبيرت يعمل على جميع المنصات عادي ماعدا منصة ألباري
لكن المشكلة دي ظهرت النهاردة بس عند الكل .....
بالرغم من إن الإكسبيرت كان شغال عادي عليها عندي وعند كل إللي بيشتكوا لغاية إمبارح
------------------------
مع العلم إني راجعت كود الإكسبيرت 1000 مرة ولا يوجد أي سبب
بس لاحظت حاجة لو غيرت التايم فريم من الإعدادات الخارجية إلى 240 مثلا بيشتغل معي عادي
وده معناه إن مفيش خطأ في الإكسبيرت .... فهل تكون شركة ألباري أوقفت التعامل مع الإكسبيرت مثلاً ؟؟
ياريت لو مفيهاش تعب تراجع أكواد الإكسبيرت وتشوف المشكلة من إية
لإن في ناس إبتدت تشغله على حساباتها الحقيقية وبصراحة خايف يحصل حاجة يكون فيها خطورة على حساباتهم
مرفق اخر نسخة من الإكسبيرت
عند بداية تفعيل الإكسبرت تأكد من أن البيانات التاريخيه للعملات التي يعمل عليها الإكسبرت موجوده قم بفتح شارت للأربع عملات التي يعمل عليها الإكسبرت
في خانة Market Watch التي يظهر فيها العملات قم بالضغط كليك يمين عليها وإختار Show All
أخيرا تأكد من أنه يسمح بتشغيل الإكسبرتات
الإكسبرت لا يوجد به أي مشكله في الكود
كل الكلام ده عملته ومفيش فايدة
فاتح شارتات للـ 6 عملات شارت الساعة
وكل العملات المستخدمة في الماركت وتش
وبالنسبة لموضوع التأكد إن المنصة بيشتغل عليها الإكسبيرتات
فالإكسبيرت كان شغال على المنصة لغاية إمبارح عادي جدا وبيفتح عمليات ومش عارف إية إللي حصل ده أنا حتى ما قفلتش الجهاز
ومغيرتش أي حاجة في أي حاجة ولما صحيت النهاردة لقيته ما بيفحتش عمليات
ضيف أي أمر آخر بالإضافة بحيث عند تحقق الشروط مثلا يطبع
ثم جرب الإكسبرت مره أخرى حتى تتأكد هل السبب في تحقق الشروط نفسها أم السبب خطأكود PHP:Print("should open order");
في أمر OrderSend عند محاولة فتحه
إذا كان خطأ في أمر فتح الصفقه تأكد من رقم الخطأ
وأخبرني بالنتيجهكود PHP:Print(GetLastError());