اخ اسامه... يمكن تقولي افضل طرق المضاعفات التي وجدتها حسب رايك اكثر امنا وربحا لانه طرق المضاعفات كثيره؟
Printable View
اخ اسامه... يمكن تقولي افضل طرق المضاعفات التي وجدتها حسب رايك اكثر امنا وربحا لانه طرق المضاعفات كثيره؟
الأخ الفاضل أسامه
لقد حاولت تعديل البرمجة للاكسبيرت المرفق اخذ الصيغة من اكسبيرت أخر أعجبني فيه متابعة ألصفقه وتنقل الربح عبر مسافة بالنقاط لأخر شمعة ، ولكن هناك مشكلة ظهرت .
والله الموفق
الكود
//|---------trailing stop
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(OrderOp enPrice()+TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<Normal izeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);
return(0);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingSte p*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(Norma lizeDouble(Ask+TrailingStop*point,digits)))||(Orde rStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);
return(0);
}
}
}
}
}
}
قم بعمل باك تست بالبطيء وتأكد من التريلينج ستيب ولن تجدها معطله مع العلم أنه يجب أيضا أن تقوم بتحديد قيمة للتريينج ستوب حتى يعمل التريلينج ستيب
نعم البريك أوت هو البريك إيفن وجميعها مسميات شائعه تم إستخدامها ولكن يمكنك تسمتها كما تريد فربما من يقوم بتطوير الكود بطريقه معينه ويترك الإسم كما هو وبعض المنصات يمكنك وضع التريلينج ستوب ثم إغلاق المنصه وسوف يعمل بدون مشاكل
لكن كثير من المنصات يجب أن تترك الميتاتريدر يعمل لكن لا أعلم أي شركه بالضبط تستخدم هذه الطريقه لأني لم أجربها
بالنسبة للتريلينج ستيب والبريك إيفن فهي غير موجوده في الميتاتريدر يوجد فقط التريلينج ستوب
بالنسبة لإدارة المال فلكل مبرمج يستخدم طريقه محدد لإدارة المال
في هذا الكود نقوم بحساب نسبة المخاطره بناء على المارجن المتاح ونسبة المخاطره التي يتم تحديدها في المتغير RiskPercent حسب ما تريد
مثلا إذا كان المارجن المتاح 10000 ونسبة المخاطره 2 %
فسوف تصبح 10000*2 / 100000 = 0.2 لوت
أفضل طرق المضاعفات
المضاعفات العكسيه إذا إستطعت إختيار التوقيت المناسب لتشغيلها
http://www.myfxbook.com/members/Arab...s-ea-v5/110648
والمضاعفات بناء على التشبع إذا إستطعت إيجاد الإعدادات الصحيحه لكل عمله
http://www.myfxbook.com/members/Arab...i-stoch/106783
والمضاعفات مع الهيدج
أرجو أن توضح أكثر المشكله التي ظهرت عندك
بالنسبة لهذا الكود فيوجد بها فقط أخطاء إملائيه بهذا الشكل صحيحه
لكن بعيدا عن ذلك لي ملاحظه عن شروط الدخول في الإكسبرت نفسه بالنسبة لهذان الشرطانكود 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()+TrailingStop*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()-TrailingStop*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);
}
}
}
}
}
}
فبهذا الشكل هذه الشروط غير صحيحه رغم أني لا أعلم ما هو الغرض بالضبط الذي تريده من الشروطكود PHP:
double B= (Open[2]>Close[2]&& Open[1]>Close[2] || Open[1]<Close[2] && Close[1]>Open[1]);
double S= (Open[2]<Close[2]&& Open[1]>Close[2] || Open[1]<Close[2] && Close[1]<Open[1]);
شكرا" اخي
هناك مشكلة عند التفعيل
Compiling 'raidy EA-M.mq4'...
'TrailingStep' - variable not defined C:\Documents and Settings\d\ÓØÍ ÇáãßÊÈ\raidy EA-M.mq4 (184, 40)
'TrailingStep' - variable not defined C:\Documents and Settings\d\ÓØÍ ÇáãßÊÈ\raidy EA-M.mq4 (195, 40)
2 error(s), 0 warning(s)
أما عن استفسارك عن الكود الثاني فهو المفروض يقري الشمعة الأولى عندما يوصل السوق إلى أعلى مستوى أو اقل مستوى مرتبطا" بمؤشر CCI ويبدأ يأخذ الاردر عند إغلاق الشمعة الثانية المتجه عكس الشمعة الأولى.
وإذا أرت إيضاح أكثر شرفنا باطلاعك على الموضوع https://forum.arabictrader.com/t121961.html
شكرا" اخي
هناك مشكلة عند التفعيل
Compiling 'raidy EA-M.mq4'...
'TrailingStep' - variable not defined C:\Documents and Settings\d\ÓØÍ ÇáãßÊÈ\raidy EA-M.mq4 (184, 40)
'TrailingStep' - variable not defined C:\Documents and Settings\d\ÓØÍ ÇáãßÊÈ\raidy EA-M.mq4 (195, 40)
2 error(s), 0 warning(s)
أما عن استفسارك عن الكود الثاني فهو المفروض يقري الشمعة الأولى عندما يوصل السوق إلى أعلى مستوى أو اقل مستوى مرتبطا" بمؤشر CCI ويبدأ يأخذ الاردر عند إغلاق الشمعة الثانية المتجه عكس الشمعة الأولى.
وإذا أرت إيضاح أكثر شرفنا باطلاعك على الموضوع https://forum.arabictrader.com/t121961.html
الله يرزقك دنيا واخره الرزق الحلال ان شاء الله.اقتباس:
بالنسبة لإدارة المال فلكل مبرمج يستخدم طريقه محدد لإدارة المال
في هذا الكود نقوم بحساب نسبة المخاطره بناء على المارجن المتاح ونسبة المخاطره التي يتم تحديدها في المتغير RiskPercent حسب ما تريد
مثلا إذا كان المارجن المتاح 10000 ونسبة المخاطره 2 %
فسوف تصبح 10000*2 / 100000 = 0.2 لوت
هذه المواقع بالانجليزي لم افهم منها ماذاتقصد.
بالنسبه لاداره المال مثلا قمت بتحديد lots=3 ولكن حسب كود اداره المال لايمكن سواء 1.5 لوت فقط . ماذا ينفذ الاكسبيرت عند هذه الحاله؟ وما الفائده اذن من المتغير الخارجي lots?
عندعمل باك تيست اجد هذه absolute drawdown- maximal drawdown-relativ drawdown
كيف افرق بين وما هو الاهم منهم absolute drawdown- maximal drawdown-relativ drawdown؟
اي قيمه لdrawdown يكون عندها الاكسبيرت امن ومقبول ؟يعني كم بالمائه او كم من المبلغ المودع؟
اخ مستر كان عندي اقتراح لو ماعندك مانع.
ياريت تضع كل مايحتاجه المبرمج من اكواد البرمجه في موضوع خاص ومثبت حتى تعم الفائده وتوفر علينا وعليك.
ايش فائده هذا الاكود في حقك الاكسبيرتات
كود PHP:
bool LastOrderProfit(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
if(OrderProfit()>0){
return(true);
}
return(false);
}
}
return(true);
}
int LastOrdertype(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int t=OrderType();
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
return(t);
}
}
return(2);
}
double LastLot(){
double L;
for(int i=0;i<OrdersHistoryTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
L=OrderLots();
}
}
return(L);
}
bool LP(){
for(int i=OrdersHistoryTotal();i>0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderProfit()>=0)return(true);
else return(false);
}
}
return(true);
}
int SecondOrdertype(){
int V;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int t=OrderType();double p=OrderProfit();
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
V++;
if(V==2&&p<0)return(t);
}
}
return(2);
}
المتغير الخارجي lots يستخدم في حال أردت تحديد حجم اللوت بشكل يدوي وليس له علاقة بخاصية إدارة المال فإذا قمت بتعطيل خاصية إدارة المال وحددت حجم اللوت يدويا فإن لم يكون هناك إمكانية لفتح الصفقه فلن يفتح الإكسبرت الصفقه أما في حال تفعيل خاصية إدارة المال ففي هذه الحاله يتجاهل الإكسبرت حجم اللوت اليدوي الذي قمت بتحديده في المتغير lots ثم يتم تحديد حجم اللوت بناء على المارجن المتاح كما تم شرحه سابقا
بالنسبة للسؤال الثاني فسوف تجد شرح بالتفصيل لمعنى الدروداون في هذا الموضوع
https://forum.arabictrader.com/t106518.html
أما عن نسبة الدروداون المسموحه ففي رأيي أن لا تزيد نسبة الدروداون عن 30% وأيضا تعتبر نسبة كبيره وكلما قلت كلما زادت قوة الإكسبرت وزادة نسبة نجاح صفقاته
لا يجب أن أفعل هذا يا أخي الكريم لأني بهذه الطريقه سوف أحول المتعلمين والباحثين عن التعلم إلى مجرد ناسخين أكواد وحافظين وهذا خاطئ فيجب أن تتعلم الأساسيات أولا ثم بعد ذلك مع البحث في الإكسبرت والإطلاع على الأكواد سوف تجد الموضوع ممتع وسهل ثم بعد ذلك ستجد أنك تقوم بنفسك ببرمجة أي دالة تحتاجها في الإكسبرت
الداله الأولى LastOrderProfit تقوم بمعرفة آخر صفقة هي أغلقت رابحه أم خاسره فإذا كانت خاسره تصبح قيمة الداله فولس وإذا كانت رابحه تصبح قيمة الداله ترو
الداله الثانيه LastOrderType تقوم بمعرفة آخر نوع صفقة أغلقت هل هي شراء أم بيع
الداله الثالثه LastLot تقوم بمعرفة حجم لوت لآخر صفقه أغلقت
الداله الرابعه LP هي أيضا لمعرفة آخر صفقة أغلقت على ربح أو خساره
الداله الخامسه SecondOrderType لمعرفة نوع الصفقه قبل الأخيره التي أغلقت
هذا شرح لأحد الدوال وسوف تجد أن باقي الدوال بنفس الأسلوب تم عملها
كود PHP:
bool LastOrderProfit(){ // أولا تعريف الداله وهي من نوع دالة متغير منطقي
for(int i=OrdersHistoryTotal();i>=0;i--){ // نستخدم الحلقه للبحث في الصفقات التي أغلقت
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); // OrderSelect يتم إختيار الصفقه بإستخدام الداله
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){ // نقوم بالمقارنه هل الماجيك نمبر لهذه الصفقه هو نفس الماجيك نمبر للإكسبرت ونفس العمله
if(OrderProfit()>0){ // في حال كان الربح للصفقه أكبر من صفرأي على مكسب
return(true); // تعود الداله بالقيمة ترو
}
return(false); // وإلا تعود الداله بالقيمه فولس
}
}
return(true); // في لم يكن هناك أي صفقات تم فتحها أيضا تعود الداله بالقيمه ترو
}
اخي الحبيب مستر دولار
واجهتني مشكلة عدم قدرة الاكسبرت فتح صفقة بسبب انتهاء الوقت
هل استطيع اعادة طلب فتح الصفقة اذا فشل في فتحها في المرة الاولى
لك مني كل تحية وتقدير :eh_s(7):
Failed Trade timeout
http://m002.maktoob.com/alfrasha/ups...909/532470.png
نعم بنفس الطريقة التي نحل بها مشكلة عدم فتح الصفقه لأي سبب آخر يمكننا إستخدامها
مثال :
كود PHP:
int ticket;
ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),3*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
while(ticket<0)ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),3*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);