الأخ مستر دولار
كيف نقوم ببرجمة اكسبيرت نصف آلي ، و اذا أمكن أن ترفق لي اكسبيرت من برمجتك كمثال .
أين يمكن أن أجد المؤشرات و الكسبيرتات المفتوحة المصدر التي قمت أنت ببرمجتها.(مجموعة).
شكرا مسبقا.
Printable View
الأخ مستر دولار
كيف نقوم ببرجمة اكسبيرت نصف آلي ، و اذا أمكن أن ترفق لي اكسبيرت من برمجتك كمثال .
أين يمكن أن أجد المؤشرات و الكسبيرتات المفتوحة المصدر التي قمت أنت ببرمجتها.(مجموعة).
شكرا مسبقا.
وعليكم السلام ورحمة الله وبركاته
أسهل طريقة وأفضلها في رأيي هو إستخدام الداله iCustom لإستدعاء المؤشر الخارجي فستكون أوفر للوقت والمجهود
في مثالك هذا سيكون إستدعاء المؤشر
ثم ستجعل شرط الشراءكود PHP:
double B=iCustom(Symbol(),0,"(T_S_R)signal line with alert",period,method,price,0,1);
double B_Previous=iCustom(Symbol(),0,"(T_S_R)signal line with alert",period,method,price,0,2);
double S=iCustom(Symbol(),0,"(T_S_R)signal line with alert",period,method,price,1,1);
double S_Previous=iCustom(Symbol(),0,"(T_S_R)signal line with alert",period,method,price,1,2);
وشرط البيعكود PHP:
if(B<5000&&B_Previous>5000)
كما ترى أبسط وأسهل ولا داعي لإضافة أي كود موجود في المؤشر بداخل الإكسبرتكود PHP:
if(S<5000&&S_Previous>5000)
وعليكم السلام ورحمة الله وبركاته
مبروك النجاح في برمجة الإكسبرت
بالنسبه للأخطاء فأولا ظهر لك خطأ عدد الصفقات المفتوحه كبيره لذلك سنحتاج إلى وضع شرط بحيث نسمح بفتح عدد صفقات محدده فقط أي صفقه واحده أو 2 أو حسب ما تريد
في الكود الداله موجوده لكنك لم تضيفها لشرط البيع لذلك ستحتاج أن تضيفها
إذا أردت جعل الهدف رقم قليل لكن البروكر لا يسمح بوضعه فعليك بإخفاء الهدفكود PHP:
if(orderstotal()<1){
راجع الإكسبرت المرفق سوف تجد خيارين HideSL و HideTP وهو المسؤول عن إخفاء الهدف والأستوب
لا يوجد فرق بين TakeProfit و TP فكلها متغيرات
TP , SL تقوم بتعريفهم داخل الداله start
بالنسبه للخطأ 131 فبعض البروكرات تقبل حجم لوت مايكرو مثلا 0.01 بالتالي عندما تضع حجم اللوت هذا سوف يفتح الإكسبرت الصفقه بدون مشاكل لكن بعض البروكرات الأخرى اقل حجم لوت لها هو 0.1 بالتالي إذا وضعت حجم لوت 0.01 فسوف يظهر خطأ حجم اللوت ولن تفتح الصفقه فهي تختلف من بروكر لآخر حسب نوع البروكر وحسب نوع الحساب
حتى تتأكد من أن شروط الإكسبرت تعمل بشكل صحيح قم بعمل فيجول باك تست للإكسبرت وضع المؤشرات المستخدمه على الشارت وراقب أماكن الدخول والخروج على الشارت حتى تتأكد من أن الدخول صحيح حسب الشروط التي حددتها
بارك الله فيك استاذي الكريم:eh_s(7):
الطريقة هذه جامدة جدا أعجبتني كثيرا والله :0016:
إسمح لي بسؤالين وطلب
الأول : ماذا يعني الرقم الأخير على اليمين في دالة iCustom
إذا كان shift يعني رقم الشمعة التي نأخذ منها قيمة المؤشر فما دور الرقم الذي قبله لم أجده في الأمثلة التي عملتها في الكورس
و السؤال الثاني
كود PHP:
if(B<5000&&B_Previous>5000)
لمذا الرقم 5000:Emoticon1:كود PHP:
if(S<5000&&S_Previous>5000)
ومن باب الفضول و المعرفة أود طريقة كتابة شرط الشراء و البيع كلاسيكيا يعني دون إستدعاء المؤشر
وجزاك الله خيرا
شكرا أخي أسامه و جزاك الله خيرا على المساعده
أين اضع أخي هذا الكود الخاص بعدد الصفقات المفتوحه ؟
وهل من الممكن أن أجعل التحكم في هذه الخاصيه خارجيا مثل التحكم في الماجيك و الاستوب بالكودكود:if(orderstotal()<1){
قمت بإضافة الكود الخاص بإخفاء الهدف والاستوب خارج الداله ستارت كما في الاكسبيرت المورفق على هذا الشكلكود:extern int MaxTrades=4;
فهل هذا صحيح وكافي لان الإكسبيرت الذي ارفقته بها الكثير من الدول التي تحوي إخفاء الستوب والهدف فهل يجب وضعهم ؟؟كود:extern bool HideSL=false;
extern int StopLoss=0;
extern bool HideTP=false;
extern int TakeProfit=7;
أيضا أخي ما معنى الكود
وبالنسبه للخطا 131 فهل يجب على ان أعرف نوع الحساب وحجم اللوت المسموح به من البروكر قبل إختبار الاكسبيرت ووضع اللوت المناب لكي لا تظهر المشكله ؟؟كود:extern int BreakEven=0;
extern int movestopto=0;
و أخيرا هل الكود البرمجي الخاص بشرط البيع و الشراء على أساس تقاطع التنكن و الكيجن صحيح ؟؟
الاكسبيرت مرفق رجاء الاطلاع عليه
عذرا أخي اسامه أحاول فهم و قراءة الكودوالذي يجعل الإكسبيرت يعمل على المنصات الخماسيه أيضا و لكني لا أجد فيه مايشير للخمس أرقام و على حسب ما فهمت فهو يقول إذا كانت الأرقام العشريه أصغر من 4 و أيضا إذا كانت تساوي 4 و لم أجد فيه مايذكر غذا كانت الأرقام العشريه أكبر من 4 أرقام ....كود:int init()
{
if(Digits<4)
{
point=0.01;
digits=2;
}
else
{
point=0.0001;
digits=4;
}
return(0);
}
و ايضا سوف أجعل Point إلى point داخل الداله ستارت فقط و الفرق في أول حرف بدلا من كابيتال يكون سموول ؟؟؟؟؟
السلام عليكم ورحمة الله وبركاته
كيف حالك أخي الغالي مستر دولار
حقيقة أريد الإستفسار عن معنى هذه الرسالة التي صادفت أحد الإخوة عندما حاول تنزيل الميتاتريدر ، وهل لها حل
https://forum.arabictrader.com/attac...-untit2led.png
وجزاك الله خيراً
والسلام عليكم ورحمة الله وبركاته
شرح الداله iCustom بالتفصيل في هذا الموضوع سوف تجد فيه إجابة لأسئلتك
https://forum.arabictrader.com/t93175.html
إذا أردت كتابة كود المؤشر بداخل الإكسبرت بدون إستدعائه فيجب أن تقوم بمراجعة كود المؤشر
حذف الدوال غير المهمه مثل
يجب أن تعرف مبدأ عمل المؤشر حتى تحاول أخذ الجزء الرئيسي فيه أي معادلات ظهور الإشارة ووضعها في الإكسبرتكود PHP:
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
return(-1);
لاحظ كيف قمت بتحويل كود المؤشر كله إلى هذا الجزء البسيط والذي سيفي بالغرض الرئيسي للمؤشركود PHP:
double WMA(int x, int p)
{
return(iMA(NULL, 0, p, 0, method, price, x));
}
vect1 = 2*WMA(1, period/2) - WMA(1, period);
vect1 = 2*WMA(2, period/2) - WMA(2, period);
ExtMapBuffer1 = iMAOnArray(vect1, 0, p, 0, method, 1);
ExtMapBuffer2 = iMAOnArray(vect1, 0, p, 0, method, 2);
if(ExtMapBuffer1>ExtMapBuffer2)//Green Line
if(ExtMapBuffer1<ExtMapBuffer2)//Red Line
وطبعا ستختلف طريقة الكتابه من مؤشر لآخر وحسب الكود الذي تكتبه الأسهل طبعا هو إستخدام
الداله iCustom مباشرة
ستضع الشرط عند أمر البيع كما وضعته عند أمر الشراء
نعم يمكنك جعله كمتغير خارجيكود PHP:
if ( ts2>ks2&&ts1<ks1&&ts1<sb1&&sa1 ){
if(orderstotal()<1){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"dentist_hussein EA",MagicNumber,0,Red);
PlaySound("Alert.wav");
}
}
بالنسبه لإخفاء الهدف والأستوب فيجب أن تضيف جميع الدوال المسؤله عن عملها فليس من المعقول أن تضيف جزء وجزء آخر لا تضيفه وإلا فكيف ستؤدي الداله غرضها
البريك إيفن BreakEven هو يشبه التريلينج ستوب لكنه يقوم بنقل الأستوب لوز إلى عدد نقاط ربح معين عندما يتحرك السعر في إتجاه الصفقه ربح معين
movestopto هو عدد نقاط الربح التي يتم وضع الأستوب عندها
خطأ حجم اللوت يمكنك عدم وضع شرط لكن فقط أن تأخذ بعين الإعتبار هذه الإحتماليه عند تشغيل الإكسبرت
أو يمكنك وضع شرط
قبل أمر البيع والشراءكود PHP:
if(Lots<MarketInfo(Symbol(),MODE_MINLOT))Lots=MarketInfo(Symbol(),MODE_MINLOT);
وهذا يعني إذا كان حجم اللوت Lots أقل من أصغر حجم لوت مسموح به فسوف يجعل الإكسبرت Lots تساوي أصغر حجم لوت مسموح به
أنصحك بالتجربه دائما في أي جزء لا تعرف وظيفته قم بتجربته وراجع ما هي الوظيفه التي يقوم بها وعندها ستعرف السبب
معنى الكود كالآتي
إذا كان عدد الأرقام العشريه بعد الفاصل اقل من 4 أي 2 هذا في حالة الين في البروكر الذي لا يستخدم رقم عشري زائد أو 3 في أزواج الين في البروكر الذي يستخدم رقم عشري زائد
فسوف يصبح point=0.01
وبالتالي عندما تحسب الهدف أو الأستوب لوز
فسوف يكون مثلا سعر الدخول 114.501 + 30 نقطه * point
أي 114.501+30*0.01 = 114.801 جرب تحسبها بالآله
لكن إذا إستخدمنا المتغير Point ففي الرقم العشري الزائد قيمته 0.001 ولسي 0.01
أي 114.501+30*0.001 = 114.531
الجزء الآخر والخاص ب 4 أو 5 أرقام عشريه هو جزء else
إي إذا كانت عدد الأرقام العشرية أكبر أو تساوي 4 أي 4 أو 5 أرقام عشرية
فسوف تصبح قيمة النقطه point=0.0001
بالتالي إذا كان سعر اليورو مثلا الدخول 1.43205 والهدف 30 نقطه
فسوف يصبح الهدف 1.43205+30*0.0001 = 1.43505
جرب تحسبها بالآله
وعليكم السلام ورحمة الله وبركاته
في بعض الدول يجد مشكله في الإتصال اللايف بالميتاتريدر مباشرة بسبب مزود الإنترنت أو أن بعض الشركات تمنعها لذلك يلجأ إلى إستخدام البروكسي للإتصال
وهو هنا يطلب منك آي بي السيرفر والدخول والباسوورد لكن طبعا يمكنك تجاوز هذه الخطوه إلا إذا كنت تستخدم بروكسي للدخول إلى النت
ويمكنك تفعيلها لاحقا من خيار
Tools------->Options ------->Server
وسوف تجد خيار Enable proxy server
بارك الله فيك وجزاك الله كل خير
وعندي سؤال أخر
هل هذا الكود صحيح لحساب متوسط الإغلاقات وإن كان غير صحيح أتمنى شرح للحلقة الصحيحة
كود PHP:
for(int i=0;i<Bars;i++){
for(int e=i;e<i+period;i++){
double a=Close[e];
double aa+=a;
double lin=aa/period;
ExtMapBuffer1[i]=lin;}}
وجزاك الله خيراً