كده حقك تنساني مع الاكسبيرت يا باشا ..
جزاك الله خيرا .. وساطابق الكود لمعرفة الخطأ ..
Printable View
نفس المشكلة يا استاذ جميل .. كما بالصورة
الملف المرفق 411751
افتح موضوع وأرفق فيه المؤشر والأكسبيرت حتى لانخرج عن سياق الموضوع .
عندك حق يا استاذ جميل .. احنا كده هنتشتت ونخرج عن الموضوع .. تقبل اعتذاري
منتظرين الدخول فى الدروس الجديدة أستاذ جميل بصراحة الواحد مليان بالحماس بعد إجتياز المراحل الأول
الفكرة انك استخدمت مؤشر ماكد خارجي وليس ماكد الميتاتريدر الأساسي وبالتالي تناديه بدالة iCustom مثل مانادينا مؤشر xcode وحيزبط معاك . وزي ما اخبرتك لو ماضبط افتح موضوع وحنعمل الكود .
منتظر تجاوب المشاركين في موضوع التريلنج وإن شاء الله حنضيف كود البريك ايفن ونتكلم عن الفرق بين الأثنين وفائدة الأستخدام للأثنين مع شرح الكود بالتفصيل لتثبيت المعلومة .
فعلا يا استاذ جميل انا مخدش بالي من الموضوع ده ربنا يباركلك
مرفق اكسبيرت الموفيج مع دالة التريلينج بس برده عاوزة شوية شرح يعني بالنسبة للارقام الي توضع في الثلاث اختيارات .. وتأثيرهم ؟؟
الملف المرفق 411792
كود دالة التريلنج حنقسمه الى 3 اقسام رئيسية اولها كود البحث في الصفقات المفتوحة
كود PHP:for (int i=OrdersTotal()-1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
القسم الثاني في الكود معالجو صفقة الشراء
سنطلب من الأكسبيرت الفرز فأذا كانت الصفقة شراء ، واذا كان سعر الشراء الحالي على الشارت مطروح منه سعر الأفتتاح اكبر او يساوي رقم التريلنج الذي اخترناهكود PHP:if (OrderType() == OP_BUY && Ask - OrderOpenPrice() > TrailingStop*points)
{
if ((OrderStopLoss() < Ask-(TrailingStop+TrailingStep)*points) || (OrderStopLoss()==0))
{
if (TrailingProfit != 0) takeprofit = Ask+(TrailingProfit + TrailingStop)*points;
bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), Ask-TrailingStop*points, takeprofit,0, White);
if (ret1 == false)
Print(" Trailing Buy OrderModify() error - , ErrorDescription: ",(GetLastError()));
}
}
ان ينتقل الى الشرط الذي يليه وهو اذا جمعنا التر يلنج ستوب + التريلنج أستيب وطرحنا الناتج من السعر على الشارت وكانت النتيجة اكبر من الأستوب لوس سيكون عليه تحريك الأستوب لوس الى نقطة اعلى من الأستوب الأساسي وسيكون النقلة الأولى هي سعر الدخول ، حتى لو وضعنا الأستوب عند الشراء 200 نقطة مثلا ووضعنا التريلنج 10 نقاط فبعد تحقق ال 10 نقاط في صالح الصفقة سينتقل الأستوب الى نقطة الدخول ، ثم بعدها ستوكن النقلات بقيمة الأستيب فلو وضعتها 0 سيستمر ينتقل مع كل نقطة لصالح السعر وأذا وضعت الأسيب 5 نقاط سيتحرك الأستوب مع كل 5 نقاط يمشي فيها السعر لصالح الصفقة ، عليكم بالتجارب لتثبيت المعلومة .
يمكننا كذلك في أختيار اضافي تحريك الهدف ، ونحن هنا اضفنا هذا الكود
ووضعنا هذا الشرطكود PHP:double takeprofit = OrderTakeProfit();
ومعناه اذا لم يكن المتغير =0 فينتقل الربح الى مناطق اعلى بمقدار سعر الشارت + التريلنج بروفت + التريلنج ستوب وبالتالي كلما ينتقل الأستوب مثلا 5 نقاط سينتقل الربح 5 نقاط حتى يرتد السعر فيضرب الأستوب لوس في اعلى مستوى تحقق من الربح .كود PHP:if (TrailingProfit != 0) takeprofit = Ask+(TrailingProfit + TrailingStop)*points;
القسم الثالث هو صفقة البيع ، والتعامل معها سيكون عكس الشراء .
اذا وجدتم شئ غير واضح اخبروني سأعيد الشرح .
هذه دالة البريك ايفن
استدعائها يهذا الكود وسيكون قبل او بعد استدعاء التريلنج ستوب .كود PHP:void MoveBreakEven()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*points)
{
if((NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0) || (OrderStopLoss()==0))
{
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+Break_Profits*points,Digits),OrderTakeProfit(),0,Blue);
Print("MoveBuy");
}
}
}
else
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*points)
{
if((NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0) || (OrderStopLoss()==0))
{
bool rev=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-Break_Profits*points,Digits),OrderTakeProfit(),0,Red);
Print("MoveSell");
}
}
}
}
}
}
وهذا الكود مع المتغيرات مدمج مع متغيرات التريلنج ويمكنك استبداله او اضافته حسب ماترونه مريح لكمكود PHP:if (BreakEven>0) MoveBreakEven();
كود PHP:extern int Stoploss=200,Takeprofit=200,TrailingStop=10,TrailingStep=10,TrailingProfit=10,BreakEven=10,Break_Profits=10;
نستخدم البريك ايفن لنقل الأستوب الى منطقة الدخول واذا اضفنا له احتجاز ربح معين فسينتقل الى منطقة احتجاز الربح وسنتهي دوره ، اما التريلنج ستوب فيستمر في متابعة النقل مع كل تحرك لصالح صفقتنا .
نلاحظ ان تحرك التريلنج يرتبك بسعر Ask أو سعر Bid ولهذا يظل مستمر في التقدم ، اما البريك ايفن فيرتبط بسعر افتتاح الصفقة وهذا الرقم ثابت ولهذا تكون له نقلة واحدة فقط اما الكود فهو تقريبا نفس الكود .
ملاحظة قد تجد التريلنج والبريك يختلف قليلا من اكسبيرت الى آخر لكن نفس الفكرة كذلك بعض المبرمجين يضع خيار فاس و ترو لتشغيل وايقاف الفعل وانا اكتفي [ان يكون الخيار اكبر من 0 ليعمل .
اي سؤال حاضر لأعادة الشرح .
بسم الله ماشاء شرح قمة فى الروعة كمل يا باشا احنا متابعين معاك مافيش حاجة صعبة إن شاء الله
سؤال عن البريك ايفن لو جعلنا البريك ايفن =10 والبريك ايفن بروفيت = 10 معنى ذلك عند تحرك السعر فى صالح الصفقة سيتحرك الأستوب 10 نقاط أم أنه سيصل إلى نقطة الدخول بصرف النظر عن القيمة المدخلة للبريك ايفن والبريك ايفن بروفيت وإذا أضفنا كوده الخاص بالمتغيرات أعلاه والذى يحتوى المتغيرات استوب وبروفيت وغيرها هل سيغير فى المتغيرات المضافة سابقا من استوب وبروفيت أم نحذفها إذا أضفنا هذا الكود
تم تطبيق دالة البريك ايفن فى الإكسيبرت المرفق بارك الله فيك يا باشا