النتائج 1 إلى 7 من 7
  1. #1
    الصورة الرمزية amjad
    amjad غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Feb 2005
    الإقامة
    الرياض
    العمر
    44
    المشاركات
    1,201

    افتراضي مطلوب كود برمجي لحفظ أكبر قيمة للخسارة العائمة خلال اختبار الإكسبرت

    السلام عليكم ورحمة الله تعالى وبركاته ،،،

    أحبتي في الله ،
    نظرا للخطأ الذي نواجهه في اختبارات الاكسبرتات وبالتقرير تحديدا حيث أن نسبة الدروداون الموجودة غير الحقيقية التي تهم صانع الإكسبرت وهي الانخفاض الحقيقي دون البالانس ، وبالتالي أرجو التكرم بكتابة كود برمجي يحفظ أقصى خسارة عائمة وصلها الإكسبرت أثناء اختباره ، بمعنى إن افتتح عقد ووصلت خسارته 100 دولار ومن ثم عاد إلى الربح فسوف تظهر بخانة أقصى خسارة عائمة هي 100 دولار .. نفترض فتح عقود جديدة ووصلت الخسارة إلى 40 دولار فبهذه الحالة تبقى خانة أقصى خسارة عائمة هي 100 دولار ولا تتغير إلا إذا أصبحت الخسارة العائمة 101 دولار فيحفظها وهكذا ،،، إظهارها على الشاشة أمر بسيط ولكن الأهم هي طريقة الحفظ ذاتها فقد فشلت محاولاتي ..

    لكم جيعا كل الود
    أخوكم أمجد

  2. #2
    الصورة الرمزية tradingsystem
    tradingsystem غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2014
    المشاركات
    158

    افتراضي

    وعليكم السلام


    كود:
     
    
    
    
    
    
    int OnInit() { GlobalVariableSet("loss",0); //////////////////// // باقي الكود return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { Comment(""); } void OnTick() { double max=GlobalVariableGet("loss"); Comment("MaxLose="+max); if(Profit()<max){GlobalVariableSet("loss",Profit());Print(max+" أقصى خسارة عائمة هي");} //////////////////////////////////////////////////////////////////////////////////// // باقي الكود } double Profit() { double n=0; int G = OrdersTotal(); for (int i = 0 ; i < G ; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL)) { n=n+OrderProfit(); } } } return(n); }

  3. #3
    الصورة الرمزية amjad
    amjad غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Feb 2005
    الإقامة
    الرياض
    العمر
    44
    المشاركات
    1,201

    Thumbs up ممنونك يا بطل

    أخي الكريم ،،

    ألف شكر على هذا الكود ، ما قصرت والله .. الكود يظهر لدي أقصى قيمة وصلها الانخفاض في الجورنال ، هل أستطيع أن أطلب منك أن نجد طريقة لعرضها على الشاشة بشكل دائم كما هي الصورة المرفقة والتي استخدم لها الكود التالي ، وما نريده بالزبط أن يكون هناك متغير نضعه مكان AccountBalance في السطر الثاني من الكود
    كود PHP:
    ObjectCreate("dX01_ValueRGE1"OBJ_LABEL010);
       
    ObjectSetText("dX01_ValueRGE1"" " DoubleToStr(AccountBalance(),2),12""clrOrange);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_XDISTANCE20);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_YDISTANCE40);
       
       
    ObjectCreate("dX01_LabelRGE5"OBJ_LABEL000);
       
    ObjectSetText("dX01_LabelRGE5""BALANCE",12""clrOrange);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_XDISTANCE,130);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_YDISTANCE,40); 
    فعلى سبيل المثال أنا استخدم الكود التالي في إظهار البروفت
    كود PHP:
    ObjectCreate("dX01_ValueRGE11"OBJ_LABEL010);
       
    ObjectSetText("dX01_ValueRGE11"" " DoubleToStr(profit(),2),12""clrOrange);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_XDISTANCE20);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_YDISTANCE80);
       
       
    ObjectCreate("dX01_LabelRGE12"OBJ_LABEL000);
       
    ObjectSetText("dX01_LabelRGE12""Profit ",12""clrOrange);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_XDISTANCE,130);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_YDISTANCE,80); 
    والكود المستخدم في فقرة profit() هو التالي بس متلخبط بسبب صفحة المنتدى
    كود PHP:
      double profit()
        {
     
    double pr_2=0;
     for(
    int p=0;p<OrdersTotal();p++){
     if(
    OrderSelect(p,SELECT_BY_POS,MODE_TRADES))
     if(
    OrderSymbol()==Symbol()){
     
    pr_2=pr_2+OrderProfit();
    }
     }return(
    pr_2);
     } 
    إلى هنا الأمر واضح ، المشكلة ما سوف تراه فعلا للتقرير الذي ظهر لنفس الفترة التي تم فيها الاختبار والتي أظهرت أن أقصى خسارة هي 24.22 دولار كما هو في الصورة الأخرى ويظهر التقرير أن الماكسمم دروداون هو 4697 دولار وهو غير صحيح نهائيا ومرعب فعلا وهذا حقيقة سبب طلبي فعندما نرى أن الدروداون وصل إلى 4697 دولار فسنقول مثلا أن الاكسبرت لن يلائم قيمة محفظتنا وسوف نتكبد خسائر لا محالة ولكن عندما نشاهد فعليا أن أقصى انخفاض خلال هذه الفترة مثلا هي 24 دولار فقط فسوف يستمر الشخص في تطوير الإكسبرت ليحصل على نتائج أفضل من حيث الإنخفاض عن البالانس الموجود في المحفظة

    أرجو أن تكون فكرتي واضحة فطلبي هذا سوف يخدم غالبية من يتجه للتداول الآلي وتصميم الإكسبرتات

    لكم جميعا كل الود
    أخوكم أمجد

    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة abc.png‏  

  4. #4
    الصورة الرمزية tradingsystem
    tradingsystem غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2014
    المشاركات
    158

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة amjad مشاهدة المشاركة
    أخي الكريم ،،

    ألف شكر على هذا الكود ، ما قصرت والله .. الكود يظهر لدي أقصى قيمة وصلها الانخفاض في الجورنال ، هل أستطيع أن أطلب منك أن نجد طريقة لعرضها على الشاشة بشكل دائم كما هي الصورة المرفقة والتي استخدم لها الكود التالي ، وما نريده بالزبط أن يكون هناك متغير نضعه مكان AccountBalance في السطر الثاني من الكود
    كود PHP:
    ObjectCreate("dX01_ValueRGE1"OBJ_LABEL010);
       
    ObjectSetText("dX01_ValueRGE1"" " DoubleToStr(AccountBalance(),2),12""clrOrange);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_XDISTANCE20);
       
    ObjectSet("dX01_ValueRGE1"OBJPROP_YDISTANCE40);
       
       
    ObjectCreate("dX01_LabelRGE5"OBJ_LABEL000);
       
    ObjectSetText("dX01_LabelRGE5""BALANCE",12""clrOrange);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_XDISTANCE,130);
       
    ObjectSet("dX01_LabelRGE5"OBJPROP_YDISTANCE,40); 
    فعلى سبيل المثال أنا استخدم الكود التالي في إظهار البروفت
    كود PHP:
    ObjectCreate("dX01_ValueRGE11"OBJ_LABEL010);
       
    ObjectSetText("dX01_ValueRGE11"" " DoubleToStr(profit(),2),12""clrOrange);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_XDISTANCE20);
       
    ObjectSet("dX01_ValueRGE11"OBJPROP_YDISTANCE80);
       
       
    ObjectCreate("dX01_LabelRGE12"OBJ_LABEL000);
       
    ObjectSetText("dX01_LabelRGE12""Profit ",12""clrOrange);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_CORNER,1);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_XDISTANCE,130);
       
    ObjectSet("dX01_LabelRGE12"OBJPROP_YDISTANCE,80); 
    والكود المستخدم في فقرة profit() هو التالي بس متلخبط بسبب صفحة المنتدى
    كود PHP:
      double profit()
        {
     
    double pr_2=0;
     for(
    int p=0;p<OrdersTotal();p++){
     if(
    OrderSelect(p,SELECT_BY_POS,MODE_TRADES))
     if(
    OrderSymbol()==Symbol()){
     
    pr_2=pr_2+OrderProfit();
    }
     }return(
    pr_2);
     } 
    إلى هنا الأمر واضح ، المشكلة ما سوف تراه فعلا للتقرير الذي ظهر لنفس الفترة التي تم فيها الاختبار والتي أظهرت أن أقصى خسارة هي 24.22 دولار كما هو في الصورة الأخرى ويظهر التقرير أن الماكسمم دروداون هو 4697 دولار وهو غير صحيح نهائيا ومرعب فعلا وهذا حقيقة سبب طلبي فعندما نرى أن الدروداون وصل إلى 4697 دولار فسنقول مثلا أن الاكسبرت لن يلائم قيمة محفظتنا وسوف نتكبد خسائر لا محالة ولكن عندما نشاهد فعليا أن أقصى انخفاض خلال هذه الفترة مثلا هي 24 دولار فقط فسوف يستمر الشخص في تطوير الإكسبرت ليحصل على نتائج أفضل من حيث الإنخفاض عن البالانس الموجود في المحفظة

    أرجو أن تكون فكرتي واضحة فطلبي هذا سوف يخدم غالبية من يتجه للتداول الآلي وتصميم الإكسبرتات

    لكم جميعا كل الود
    أخوكم أمجد

    جرب هدا
    وضع علامة صح على Visual mode اثناء الاختبار

    كود:
    int OnInit() { GlobalVariableSet("loss",0); ObjectCreate("dX01_ValueRGE1", OBJ_LABEL, 0, 1, 0); //////////////////// // باقي الكود return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { Comment(""); } void OnTick() { double max=GlobalVariableGet("loss"); if(Profit()<max){GlobalVariableSet("loss",Profit());Print(max+" أقصى خسارة عائمة هي");} Write(max); //////////////////////////////////////////////////////////////////////////////////// // باقي الكود } double Profit() { double n=0; int G = OrdersTotal(); for (int i = 0 ; i < G ; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL)) { n=n+OrderProfit(); } } } return(n); } void Write(double Maxloss) { ObjectSetText("dX01_ValueRGE1", " " + DoubleToStr(Maxloss,2),12, "", clrOrange); ObjectSet("dX01_ValueRGE1", OBJPROP_CORNER,1); ObjectSet("dX01_ValueRGE1", OBJPROP_XDISTANCE, 20); ObjectSet("dX01_ValueRGE1", OBJPROP_YDISTANCE, 40); ObjectCreate("dX01_LabelRGE5", OBJ_LABEL, 0, 0, 0); ObjectSetText("dX01_LabelRGE5", "Maximum drawdown =",12, "", clrOrange); ObjectSet("dX01_LabelRGE5", OBJPROP_CORNER,1); ObjectSet("dX01_LabelRGE5", OBJPROP_XDISTANCE,130); ObjectSet("dX01_LabelRGE5", OBJPROP_YDISTANCE,40); }
    آخر تعديل بواسطة tradingsystem ، 29-10-2016 الساعة 11:17 AM

  5. #5
    الصورة الرمزية amjad
    amjad غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Feb 2005
    الإقامة
    الرياض
    العمر
    44
    المشاركات
    1,201

    افتراضي

    الله يعطيك العافية ومجهود تشكر عليه من الصميم أخي الفاضل ، لقد ظهر أثناء الاختبار ويعمل بشكل صحيح بغض النظر عن تنسيقه فهو ما سأعمل عليه ليكون مع مجموعة المعلومات التي على الشارت ، ولكن ما لفت انتباهي أنه بمجرد أن انتهى الاختبار اختفى تماما من على الشارت وهو خطأ فالمفترض أن يبقى مثل مثيلاته من المعلومات التي بالزاوية اليمنى العلوية بالشارت المرفق في مشاركة سابقة

    لكم جميعا كل الود
    أخوكم أمجد

  6. #6
    الصورة الرمزية tradingsystem
    tradingsystem غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2014
    المشاركات
    158

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة amjad مشاهدة المشاركة
    الله يعطيك العافية ومجهود تشكر عليه من الصميم أخي الفاضل ، لقد ظهر أثناء الاختبار ويعمل بشكل صحيح بغض النظر عن تنسيقه فهو ما سأعمل عليه ليكون مع مجموعة المعلومات التي على الشارت ، ولكن ما لفت انتباهي أنه بمجرد أن انتهى الاختبار اختفى تماما من على الشارت وهو خطأ فالمفترض أن يبقى مثل مثيلاته من المعلومات التي بالزاوية اليمنى العلوية بالشارت المرفق في مشاركة سابقة

    لكم جميعا كل الود
    أخوكم أمجد
    هل الكود ObjectDelete مكتوب عندك ؟
    أنا بالبداية كتبته بالكود ثم محيته ولا اعرف هل اخذت الكود قبل التعديل ام بعده.

    كود:
     
    
    void OnDeinit(const int reason) { ObjectDelete("dX01_ValueRGE1"); }




    كود:
    int OnInit()
      {
    
    GlobalVariableSet("loss",0);
    ObjectCreate("DD", OBJ_LABEL, 0, 1, 0);
    ////////////////////
    
    //  باقي الكود
    
       return(INIT_SUCCEEDED);
      }
    
    void OnDeinit(const int reason)
      {
    
    
    
      }
    
    void OnTick()
      {
    double max=GlobalVariableGet("loss");  
    if(Profit()<max){GlobalVariableSet("loss",Profit());Print(max+" أقصى خسارة عائمة هي");}
    Write(max);
    ////////////////////////////////////////////////////////////////////////////////////
    
    //  باقي الكود
    
    
    
       
      }
    double Profit()
    {
      double n=0;
      int G  = OrdersTotal();
      
      for (int i = 0 ; i < G ; i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
          n=n+OrderProfit();
        }
        }
      }
      return(n);
    } 
    void Write(double Maxloss)
    {
       ObjectSetText("DD", " " + DoubleToStr(Maxloss,2),12, "", clrOrange);
       ObjectSet("DD", OBJPROP_CORNER,1);
       ObjectSet("DD", OBJPROP_XDISTANCE, 20);
       ObjectSet("DD", OBJPROP_YDISTANCE, 40);
       
       ObjectCreate("DD", OBJ_LABEL, 0, 0, 0);
       ObjectSetText("DD", "Maximum drawdown =",12, "", clrOrange);
       ObjectSet("DD", OBJPROP_CORNER,1);
       ObjectSet("DD", OBJPROP_XDISTANCE,130);
       ObjectSet("DD", OBJPROP_YDISTANCE,40); 
    
    }

    وجرب استعمل هذا الكود لانه ربما يوجد مؤشر اخر على الشارت بنفس الاسم dX01_ValueRGE1 يشوش عليه.
    آخر تعديل بواسطة tradingsystem ، 30-10-2016 الساعة 10:27 AM

  7. #7
    الصورة الرمزية amjad
    amjad غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Feb 2005
    الإقامة
    الرياض
    العمر
    44
    المشاركات
    1,201

    افتراضي

    جربته ، تظهر عبارة maximum drawdown ولكن للأسف لا تظهر القيمة بجانبه ... سأحاول أن أقوم ببعض التعديلات ، ولو في حاجة أسرع من وضع أكثر من كود في أكثر من مكان فهو أفضل بكثير وعلى سبيل المثال ما طرحته في المشاركة رقم 3 ، بحيث أضع كود لحساب الخسارة وهي بكل بساطة الإيكويتي - البالانس وبما أنه تحت الصفر فيحفظه بمتغير ولا يتم تعديل المتغير إلا إذا انخفضت القيمة للخسارة أدنى من الرقم المحفوظ بالمتغير المذكور.

    لك تحياتي وتقديري
    أخوك أمجد


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17