طلب كود برمجي من اصحاب الخبرة
بسم الله الرحمن الرحيم
والصلاه والسلام على اشرف المرسلين سيدنا محمد وعلى اله وصحبة وسلم
قمنا مؤخرا بعمل اكسبيرت وهو قيد التجربة مع اني ضعيف بتلك اللغة البرمجية ولكن تمت حل معظم المشاكل وتبقى فقرة بسيطة ان شاء الله لمن كان لدية خبرة في تلك اللغه وهي
وضع الاستوب لوز بناءا على شرط معين وعلى النحو التالي
لو مثلا دخلنا بيع يتم وضع الاستوب لوز اعلى من القمة السابقة بخمس نقاط والعكس في حالة الشراء
علما ان الشرط ايضا يتضمن تحريك الاستوب في حال تحرك الصفقة في الاتجاه حيث يكون هذا الشرط يتحرك بتكون القمم والقيعان الجديدة وممكن الاستعانة بمؤشر الزكزاك
رجاءا خاص من الادراة بعدم نقل الموضوع الا يوم الاحد للأهمية واليوم نهاية السوق
:eh_s(7):
رد: طلب كود برمجي من اصحاب الخبرة
هل تريد إستخدام مؤشر الزيجزاج في إستخراج القمم والقيعان أم القمه إذا كان هاي شمعه أكبر من الشمعه السابقه والشمعه التاليه له والعكس في حال القاع
رد: طلب كود برمجي من اصحاب الخبرة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
هل تريد إستخدام مؤشر الزيجزاج في إستخراج القمم والقيعان أم القمه إذا كان هاي شمعه أكبر من الشمعه السابقه والشمعه التاليه له والعكس في حال القاع
خلينا نعتمد على الزكزاك ونشوف بعد التجربة بارك الله فيك
رد: طلب كود برمجي من اصحاب الخبرة
كود إستدعاء آخر هاي وآخر لو متكون بناء على مؤشر الزيجزاج
كود PHP:
double zaghigh(){
for(int i=0;i<500;i++){
double zig=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zig!=0&&(zig==Low[i])){
zig=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
break;
} }
for(int s=i;s<500;s++){
double zagbuy=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,s);
if(zagbuy!=0&&zagbuy==High[s]){
zagbuy=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,s);
break;
}}
return(zagbuy);
}
//////////////////*********************
double zaglow(){
for(int ii=0;ii<500;ii++){
double zigg=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,ii);
if(zigg!=0&&(zigg==High[ii])){
zigg=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,ii);
break;
}}
for(int d=ii;d<500;d++){
double zagsell=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,d);
if(zagsell!=0&&zagsell==Low[d]){
zagsell=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,d);
break;
}}
return(zagsell);
}
طبعا تقوم بتعريف المتغيرات ExtDepth و ExtDeviation و ExtBackstep في خصائص الإكسبرت الخارجيه أو قم بتوضع الإعدادات التي تريدها
في دالة OrderSend
أمر الشراء
كود PHP:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,zaglow(),TP,"MR.dollar EA",MagicNumber,0,Blue);
أمر البيع
كود PHP:
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,zaghigh(),TP,"MR.dollar EA",MagicNumber,0,Red);
بالنسبة للتريلينج ستوب سيكون بنفس إسلوب التريلينج ستوب العادي وستضع شرط إذا كان الأستوب لوز للصفقه الحاليه لا يساوي هاي الزجزاج أو لو الزجزاج حسب نوع الصفقه يتم تغيير الأستوب ووضعه بناء على الهاي أو اللو
يجب أن تضع من ضمن الشروط أن يكون الهاي المتكون أكبر من السعر الحالي واللو المتكون أقل من السعر الحالي حتى يتم وضع الأستوب بطريقه صحيحه
رد: طلب كود برمجي من اصحاب الخبرة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
كود إستدعاء آخر هاي وآخر لو متكون بناء على مؤشر الزيجزاج
كود PHP:
double zaghigh(){
for(int i=0;i<500;i++){
double zig=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zig!=0&&(zig==Low[i])){
zig=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
break;
} }
for(int s=i;s<500;s++){
double zagbuy=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,s);
if(zagbuy!=0&&zagbuy==High[s]){
zagbuy=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,s);
break;
}}
return(zagbuy);
}
//////////////////*********************
double zaglow(){
for(int ii=0;ii<500;ii++){
double zigg=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,ii);
if(zigg!=0&&(zigg==High[ii])){
zigg=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,ii);
break;
}}
for(int d=ii;d<500;d++){
double zagsell=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,d);
if(zagsell!=0&&zagsell==Low[d]){
zagsell=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,d);
break;
}}
return(zagsell);
}
طبعا تقوم بتعريف المتغيرات ExtDepth و ExtDeviation و ExtBackstep في خصائص الإكسبرت الخارجيه أو قم بتوضع الإعدادات التي تريدها
في دالة OrderSend
أمر الشراء
كود PHP:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,zaglow(),TP,"MR.dollar EA",MagicNumber,0,Blue);
أمر البيع
كود PHP:
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,zaghigh(),TP,"MR.dollar EA",MagicNumber,0,Red);
بالنسبة للتريلينج ستوب سيكون بنفس إسلوب التريلينج ستوب العادي وستضع شرط إذا كان الأستوب لوز للصفقه الحاليه لا يساوي هاي الزجزاج أو لو الزجزاج حسب نوع الصفقه يتم تغيير الأستوب ووضعه بناء على الهاي أو اللو
يجب أن تضع من ضمن الشروط أن يكون الهاي المتكون أكبر من السعر الحالي واللو المتكون أقل من السعر الحالي حتى يتم وضع الأستوب بطريقه صحيحه
بارك الله فيك ياورد وجاري العمل والتجربة:eh_s(7):
رد: طلب كود برمجي من اصحاب الخبرة
يا اخي المشكله ما اتحلت
كيف اكتب امر التريلينج
مثلاً انا كتبت
extern int TrailingStop = High[3]
لجعل امر الوقف يتحرك على الشمعه السابقه الثالثه
لكن اعطاني خطء لان امر التريلنج لابد ان يقوم قيمه ثابته معرفه يتحرك بها الاستوب
كيف اكتب امر تريلنج يتحرك اعلى قمة معينه في حالة البيع و يتحرك اسفل قاع معين في حالة الشراء و لنفترض مثلاً ان القمة و القاع هذه هي قمة او قاع الشمعة السابقة ... و فيما بعد نعوض في القمم المعرفه بواسطة الزجزاج ما فيه مشكله .
يعني بأختصار انا اريد اكتب امر تحرك الاستوب لوز اعلى القمة السابقه في حالة البيع و اسفل القاع السابق في حالة الشراء
و اعتقد ان امر التريلنج ما راح ينفع و الله اعلم .... ساعدونا يا اهل الخبره
رد: طلب كود برمجي من اصحاب الخبرة
اقتباس:
المشاركة الأصلية كتبت بواسطة وسام النوباني
يا اخي المشكله ما اتحلت
كيف اكتب امر التريلينج
مثلاً انا كتبت
extern int TrailingStop = High[3]
لجعل امر الوقف يتحرك على الشمعه السابقه الثالثه
لكن اعطاني خطء لان امر التريلنج لابد ان يقوم قيمه ثابته معرفه يتحرك بها الاستوب
كيف اكتب امر تريلنج يتحرك اعلى قمة معينه في حالة البيع و يتحرك اسفل قاع معين في حالة الشراء و لنفترض مثلاً ان القمة و القاع هذه هي قمة او قاع الشمعة السابقة ... و فيما بعد نعوض في القمم المعرفه بواسطة الزجزاج ما فيه مشكله .
يعني بأختصار انا اريد اكتب امر تحرك الاستوب لوز اعلى القمة السابقه في حالة البيع و اسفل القاع السابق في حالة الشراء
و اعتقد ان امر التريلنج ما راح ينفع و الله اعلم .... ساعدونا يا اهل الخبره
بالتأكيد ليس هذا كود التريلينج ستوب ولا يمكن كتابته بهذا الشكل وليس هذا ما قصدته
أما بخصوص إن التريلينج ستوب ما ينفع فهو ينفع لكن تحتاج إلى مراجعة بعض الدروس البسيطه في البرمجه
هذا مثال بسيط على التريلينج ستوب العادي
كود PHP:
void MoveTrailingStop()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingProfit*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blue);
return(0);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingProfit*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
يجب أن تقوم بتغيير القيمه الثابته TrailingStop وتحدده بناء على القمم والقيعان المتكونه
لذلك ستجعله بهذا الشكل
كود PHP:
void MoveTrailingStop()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(zaglow(),digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(zaglow(),Digits),OrderTakeProfit(),0,Blue);
}
}
else
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(zaghigh(),Digits)))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(zaghigh(),Digits),OrderTakeProfit(),0,Red);
}
}
}
}
}
1 مرفق
رد: طلب كود برمجي من اصحاب الخبرة
و الله اخي MR.dollar انت ما قصرت
لكن شكل انا ما ني عارف اضع الكود بشكل صحيح
من اخر مشاركة وانا احاول و ما فيه فايدة
انا وضعت الاكسبرت في المرفق و هو يعتمد على تقطع متوسط 7 مع 14 للربع ساعة
في حالات معينه و ليس كل التقاطعات
و وضعت حالات الخروج من الصفه واحدة من 3 و بعدت تماماً عن موضوع التريلنج
حالات الخروج هي
التقاطع العكسي للموفينج او يكون الاغلاق اعلى او اقل من الموفنج 7 او يكون الاغلاق يساوي سعر فتح الصفقه
لكن للأسف ما تخرج الصفقه الا على الشرط الاول فقط
في المرفق الملف و نرجو منك التعديل عليه و اخبرنا ايه هي المشكله و نتشارك التدريب العملي فيه مع كل الاعضاء و اذا تم بخير ان شاء الله فهو هدية للجميع
رد: طلب كود برمجي من اصحاب الخبرة
اقتباس:
المشاركة الأصلية كتبت بواسطة وسام النوباني
و الله اخي
MR.dollar انت ما قصرت
لكن شكل انا ما ني عارف اضع الكود بشكل صحيح
من اخر مشاركة وانا احاول و ما فيه فايدة
انا وضعت الاكسبرت في المرفق و هو يعتمد على تقطع متوسط 7 مع 14 للربع ساعة
في حالات معينه و ليس كل التقاطعات
و وضعت حالات الخروج من الصفه واحدة من 3 و بعدت تماماً عن موضوع التريلنج
حالات الخروج هي
التقاطع العكسي للموفينج او يكون الاغلاق اعلى او اقل من الموفنج 7 او يكون الاغلاق يساوي سعر فتح الصفقه
لكن للأسف ما تخرج الصفقه الا على الشرط الاول فقط
في المرفق الملف و نرجو منك التعديل عليه و اخبرنا ايه هي المشكله و نتشارك التدريب العملي فيه مع كل الاعضاء و اذا تم بخير ان شاء الله فهو هدية للجميع
سأراجع الإكسبرت وأشرح التعديلات المطلوبه في نفس الموضوع
رد: طلب كود برمجي من اصحاب الخبرة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
سأراجع الإكسبرت وأشرح التعديلات المطلوبه في نفس الموضوع
ايش حصل معاك MR.dollar
هو المووع ماله حل ولا ايه ؟
ارجو ان تفيدني بالحل في اقرب وقت
1 مرفق
رد: طلب كود برمجي من اصحاب الخبرة
لقد راجعت شروط إغلاق الصفقات التي قمت بوضعها والشروط صحيحه ولا يوجد مشاكل في الكود لكن وجدت أحد الشروط الثلاثه التي قمت بوضعها وهي
كود PHP:
Close[0]==OrderOpenPrice()
وبالتالي بمجرد فتح الصفقه وإذا تساوى السعر الحالي مع سعر فتح الصفقه سوف يقوم الإكسبرت بإغلاق الصفقه على سعر الدخول فلا أعلم ما فائدة هذا الشرط غير أنك قمت بفتح الصفقه وإنتظرت حتى تقوم بربح الإسبريد الذي خسرته عند فتح الصفقه ثم تقوم بإغلاق الصفقه على تعادل
شيء آخر بالنسبه لكود إغلاق الصفقه
كود PHP:
while (IsPosition(OP_SELLLIMIT, Symbol(), MagicNumber))
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, Red); // close all prev. open SELLs
حسب ما رأيت فالصفقات عندك يتم فتحها مباشرة وليست أوامر معلقة ولكن فقط للتوضيح بما أنك قمت بالبحث عن الصفقات المعلقه فإذا أردت حذفها ففي هذه الحاله تستخدم الأمر OrderDelete وليس الأمر OrderClose
نعود الآن للتريلينج ستوب
قمت بإضافة التريلينج ستوب والأستوب لوز بناء على آخر قمة وقاع للزيجزاج بحيث يقوم عند فتح الصفقه بوضع التريلينج ستوب أعلى آخر قمه في حال البيع وأسفل آخر قاع في حالة الشراء ثم كلما تكون قمة أقل من الأستوب لوز للصفقه يقوم بتحريك الأستوب بناء على القمه الجديده هذا في حالة البيع
وإذا تكون قاع أكبر من الأستوب لوز للصفقه يقوم بتحريك الأستوب بناء على القاع الجديد في حالة الشراء
سوف تجد في خصائص الإكسبرت الخارجيه إمكانية تفعيل أو تعديل هذه الخصائص وأيضا يمكنك التحكم في إعدادات مؤشر الزيجزاج عن طريق المتغيرات
كود PHP:
extern string S2="ZigZagStopLoss Settings";
extern bool UseZigZagStopLoss=true;
extern int StopLossAddPips=3;
extern bool UseZigZagTrailingStop=true;
extern string S1=" ZigZag Settings";
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
الإكسبرت في المرفقات قم بتجربته وأخبرني بالنتيجه