النتائج 1 إلى 15 من 15
  1. #1
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    04 سؤال سريع للاخوة المبرمجين

    مساء الخير اخوتي
    انا جديد في المنتدى واتشرف بالتواصل مع الاخوة المشرفين والمشاركين

    سؤال بسيط للاخوة المختصين بالبرمجة

    انا احاول تعلم البرمجة وصنعت اكسبرت بسيط لكن الغريب ان الاكسبرت لا يفتح صفقات رغم انه لا يعطي اخطاء

    الاكسبرت في المرفق اتمنى المساعدة من الاساتذة ذوي الخبرة
    الملفات المرفقة الملفات المرفقة

  2. #2
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    فكرة الاكسبرت هو شراء وبيع مع تقاطع الموفينك 8 مع الباربوليك سار

  3. #3
    تاريخ التسجيل
    Jul 2011
    الإقامة
    السعودية
    المشاركات
    11,147

    افتراضي

    انت كتبت سكربت وليس اكسبيرت
    كود PHP:
    int init()

    int start() 
    لا تستخدم start
    استخدم OnTimer
    او OnTick

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

    افتراضي

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

    الكود الذي كتبته هو مؤشر وليس اكسبرت وذلك لوجود هذا الكود بالاعلى


    كود:
    #property indicator_chart_window
    والمؤشر لا يفتح صفقات ولكنه يرسم اشارات على الشارت فقط .

  5. #5
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    انا اخترت اكسبرت ادفايزر في بداية الانشاء

  6. #6
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    اجريت بعض التعديلات على الكود الان يفتح لكن بشكل عشوائي وعند وضع الكود داخل OnTick او OnTimer لا يفتح ابد

  7. #7
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    14

    عملت بعض التحسينات والان يفتح ويغلق صفقات بشكل عشوائي ومتراكم ارجوا المساعدة اخوتي

    الكود الاخير بالمرفق
    الملفات المرفقة الملفات المرفقة

  8. #8
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    [ATTACH=CONFIG]472427[/ATTACH

    يفتح صفقات عشوائية ومتراكمة كما في الصورة
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة usdchf-h4-yat-r-m.png‏  

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة Rushdi مشاهدة المشاركة
    عملت بعض التحسينات والان يفتح ويغلق صفقات بشكل عشوائي ومتراكم ارجوا المساعدة اخوتي

    الكود الاخير بالمرفق
    بعد أن نزعت الكود التالي كما رأيت بدأ يفتح صفقات لأن الكود التالي يعني انك عرفت البرنامج كمؤشر وعلى الشارت الرئيسي .

    كود:
    #property indicator_chart_window
    ولكن مازالت توجد بعض المشاكل بالبرنامج منها :

    أنك كتبت شرط فتح الصفقة بداخل الدالة التالية start ولم تحدد عدد الصفقات المطلوب فتحها.
    والاكسبرت بهذه الحالة سيقرأ شرط فتح الصفقة بكل وقت يتحرك السعر ويفتح صفقات الى مالانهاية .

    كود:
    int start() {}
    والحل هو وضع شرط أخر مثلا : لايفتح صفقات الا بحالة عدم وجود صفقات مفتوحة من نفس النوع بيع أو شراء.

    والكود التالي هي داله تعد لك عدد الصفقات المفتوحة فلو كتبتها عند استدعائها

    كود:
     
    count(1)
    يعني ستعطيك عدد صفقات الشراء المفتوحة
    ولو كتبتها

    كود:
    count(2)
    يعني ستعطيك عدد صفقات البيع المفتوحة

    والدالة هي:

    كود:
    int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }

    وهذا الاكسبرت بعد اضافتها .
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة tradingsystem ، 17-09-2017 الساعة 11:15 AM

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

    افتراضي

    واذا اردت ان يفتح صفقة واحدة فقط بيع او شراء وليس بيع وشراء معاً ستعدله هكذا

    كود:
    int start()
     
    { //---- if(count(1)==0&&count(2)==0){ if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } if(count(2)==0&&count(1)==0){ if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } if (breakEven > 0)breakeven(); //---- return(0); }
    الملفات المرفقة الملفات المرفقة

  11. #11
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة tradingsystem مشاهدة المشاركة
    واذا اردت ان يفتح صفقة واحدة فقط بيع او شراء وليس بيع وشراء معاً ستعدله هكذا

    كود:
    int start()
     
    { //---- if(count(1)==0&&count(2)==0){ if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } if(count(2)==0&&count(1)==0){ if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } if (breakEven > 0)breakeven(); //---- return(0); }

    شكراً استاذ على الرد والمساعدة القيمة
    انحل مشكلة الصفقات المتراكمة لكن الان يفتح صفقات شراء فقط وبدون العودة الى السار والموفينك كما موضح في الصورة من ماذا تعتقد يكون الخلل؟؟
    والمشكلة الثانية انهو اول ميغلق الصفقة يفتح صفقة ثانية مباشرة يعني ما يلتفت الى المعادلة اللي كتبناها if(sar1 < ma1 && sar2 > ma2)

    ارجوا منكم سعة الصدر انا قديم في التداول لكن احاول فهم البرمجة لان وقتي اصبح ضيق واحتاج الى تصميم اكسبرت ليتداول عني في غالب الوقت


    اضغط على الصورة لعرض أكبر

الاســـم:	usdchf-h4-yat-r-m-3.png
المشاهدات:	11
الحجـــم:	38.1 كيلوبايت
الرقم:	472447

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

    افتراضي

    سأعلق على الاكسبرت بالجزء.

    كود:
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.1; extern double StopLossPips=60; extern double TakeProfitPips=60; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double t; double buySL,buyTP,selSl,selTP; double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || 0.0001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(count(1)==0&&count(2)==0){ if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } if(count(2)==0&&count(1)==0){ if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }
    الكود التالي يعطي لك قيم المؤشرات الموفنج افرج للشمعات السابقة وقبل السابقة وكذلك مؤشر Paraboic sar .
    وبالاعدادات كتبت extern int matimeframe = 240 يعني اعمل على شارت اربع ساعات وتستطيع التعديل على الشارت من الاعدادات.
    كود:
    double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2);
    ولكن هل وضعه بهذا المكان صحيح؟

    لا طبعاً ، لأنك وضعته بالبداية وليس بالدالة ()Start.

    وهذا يعني أنك ستأخذ قيم المؤشرات عند بداية وضع الاكسبرت على الشارت فقط وستظل تطبق الشروط على تلك القيم طوال فترة عمل الاكسبرت والحل هو نزع الاكواد من ذلك المكان ووضعها بداخل الدالة ()Start .


    واظن أنك تقصد بالكود التالي بأنك تريد تعدل الهدف ووقف الخسارة الموجود بالاعدادات لكي يعمل على الشركات ذات الخمس نقاط مثل الاسعار 1.23235 و 110.230.
    وأنت كتبت


    كود:
     
    double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || 0.0001) t=tik*10; else t=tik; //---- return(0); }
    والكود الصحيح هو


    كود:
    double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); }

    وكتبت الكود التالي
    كود:
     
    if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red);
    ويوجد أكواد لافائدة منها ولم تستعمل وكذلك لا توجد أقواس لشرط الدخول تجعل دالة الشرط تتحكم بفتح الصفقات ويكون الكود الصحيح

    كود:
    if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } }
    وهذا الكود كامل بعد تعديله .

    كود:
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.01; extern double StopLossPips=30; extern double TakeProfitPips=30; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double t=1; double buySL,buyTP,selSl,selTP; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة tradingsystem ، 18-09-2017 الساعة 01:37 AM

  13. #13
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة tradingsystem مشاهدة المشاركة
    سأعلق على الاكسبرت بالجزء.

    كود:
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.1; extern double StopLossPips=60; extern double TakeProfitPips=60; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double t; double buySL,buyTP,selSl,selTP; double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || 0.0001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(count(1)==0&&count(2)==0){ if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } if(count(2)==0&&count(1)==0){ if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }
    الكود التالي يعطي لك قيم المؤشرات الموفنج افرج للشمعات السابقة وقبل السابقة وكذلك مؤشر Paraboic sar .
    وبالاعدادات كتبت extern int matimeframe = 240 يعني اعمل على شارت اربع ساعات وتستطيع التعديل على الشارت من الاعدادات.
    كود:
    double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2);
    ولكن هل وضعه بهذا المكان صحيح؟

    لا طبعاً ، لأنك وضعته بالبداية وليس بالدالة ()Start.

    وهذا يعني أنك ستأخذ قيم المؤشرات عند بداية وضع الاكسبرت على الشارت فقط وستظل تطبق الشروط على تلك القيم طوال فترة عمل الاكسبرت والحل هو نزع الاكواد من ذلك المكان ووضعها بداخل الدالة ()Start .


    واظن أنك تقصد بالكود التالي بأنك تريد تعدل الهدف ووقف الخسارة الموجود بالاعدادات لكي يعمل على الشركات ذات الخمس نقاط مثل الاسعار 1.23235 و 110.230.
    وأنت كتبت


    كود:
     
    double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || 0.0001) t=tik*10; else t=tik; //---- return(0); }
    والكود الصحيح هو


    كود:
    double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); }

    وكتبت الكود التالي
    كود:
     
    if(sar1 > ma1 && sar2 < ma2) if(OrdersTotal()==0) if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (TakeProfitPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); if(sar1 < ma1 && sar2 > ma2) if(OrdersTotal()==0) if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red);
    ويوجد أكواد لافائدة منها ولم تستعمل وكذلك لا توجد أقواس لشرط الدخول تجعل دالة الشرط تتحكم بفتح الصفقات ويكون الكود الصحيح

    كود:
    if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } }
    وهذا الكود كامل بعد تعديله .

    كود:
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.01; extern double StopLossPips=30; extern double TakeProfitPips=30; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double t=1; double buySL,buyTP,selSl,selTP; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); double ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); double sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); double sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); double sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); double sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,Ask - (StopLossPips*t),Ask + (TakeProfitPips*t),NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5, Bid+ (StopLossPips*t),Bid -(TakeProfitPips*t),NULL,MagicNumber,0,Red); } } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }

    شكراً استاذ على المساعدة والملاحظات لم اكن ادرك ان المعادلة يجب ان يكتب داخل الدالة ستارت حصراً اما الاكواد الزائدة فانا ادرك وجودهة كتبت اغلبها من اجل التجارب ونسيت مسحها شكراً لسعة الصدر وانا سوف اقوم بازعاجك بين فترة وفترة كلما عصى علي كود

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

    افتراضي

    وتستطيع أن تكتب المعادلات بداخل الدالة ()Start بطريقة غير مباشرة وذلك بوضعهم بداخل الدالة void وتسميهم اي اسم مثلاً Indicators وتكتبهم بالاعلى هكذا وبعد ذلك تكتب ;()Indicators بداخل الدالة Start ولا يوجد فرق بين الحالتين.


    كود:
    double ma1,ma2,sma1,sma2,sar1,sar2; void Indicators(){ ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); }
    واذا اردت ان تجعل الهدف ووقف الخسارة 0 عليك ارجاع الاكواد التي محيت بعد اضافتها .
    وهذا الكود كامل

    كود:
     
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.01; extern double StopLossPips=30; extern double TakeProfitPips=30; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double buySL,buyTP,selSl,selTP; double ma1,ma2,sma1,sma2,sar1,sar2; void Indicators(){ ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { Indicators(); if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (StopLossPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,buySL,buyTP,NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5,selSl,selTP,NULL,MagicNumber,0,Red); } } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }
    الملفات المرفقة الملفات المرفقة

  15. #15
    الصورة الرمزية Rushdi
    Rushdi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2017
    الإقامة
    تركيا
    المشاركات
    13

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة tradingsystem مشاهدة المشاركة
    وتستطيع أن تكتب المعادلات بداخل الدالة ()Start بطريقة غير مباشرة وذلك بوضعهم بداخل الدالة void وتسميهم اي اسم مثلاً Indicators وتكتبهم بالاعلى هكذا وبعد ذلك تكتب ;()Indicators بداخل الدالة Start ولا يوجد فرق بين الحالتين.


    كود:
    double ma1,ma2,sma1,sma2,sar1,sar2; void Indicators(){ ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); }
    واذا اردت ان تجعل الهدف ووقف الخسارة 0 عليك ارجاع الاكواد التي محيت بعد اضافتها .
    وهذا الكود كامل

    كود:
     
    //+------------------------------------------------------------------+ //| Byu_Sell_Day.mq4 | //| Copyright © 2007, www.****forex.net | //| http://www.****forex.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, www.****forex.net" #property link "http://www.****forex.net" extern double LotSize=0.01; extern double StopLossPips=30; extern double TakeProfitPips=30; extern int MagicNumber = 55558; extern int breakEven = 20 ; extern int matimeframe = 240; extern int maperiod = 8; extern int mashift = 0; extern int mamethod = 0; extern int maappliedprice=0; extern int smatimeframe = 240; extern int smaperiod = 14; extern int smashift = 0; extern int smamethod = 0; extern int smaappliedprice=0; extern int sartimeframe=240; extern double sarstep=0.02; extern double sarmaximum=0.2; extern int sarshift=0; double buySL,buyTP,selSl,selTP; double ma1,ma2,sma1,sma2,sar1,sar2; void Indicators(){ ma1 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,1); ma2 = iMA(NULL,matimeframe,maperiod,mashift,mamethod,maappliedprice,2); sma1 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,1); sma2 = iMA (NULL,smatimeframe,smaperiod,smashift,smamethod,smaappliedprice,2); sar1 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,1); sar2 = iSAR (NULL,sartimeframe,sarstep,sarmaximum,2); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ double t; int init() { //---- double tik=MarketInfo(Symbol(),MODE_TICKSIZE); if(tik==0.00001 || tik==0.001) t=tik*10; else t=tik; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { Indicators(); if(count(1)==0&&count(2)==0){ if(sar1 < ma1 && sar2 > ma2) { if (StopLossPips ==0)buySL =0 ; else buySL =Ask - (StopLossPips*t); if(TakeProfitPips==0)buyTP=0; else buyTP = Ask +(TakeProfitPips*t); bool x = OrderSend (Symbol(),OP_BUY,LotSize,Ask,5,buySL,buyTP,NULL,MagicNumber,0,Green); } } if(count(2)==0&&count(1)==0){ if(sar1 > ma1 && sar2 < ma2){ if(StopLossPips ==0)selSl=0; else selSl= Bid+(StopLossPips*t); if(TakeProfitPips==0)selTP=0; else selTP=Bid -(TakeProfitPips*t); bool xx = OrderSend (Symbol(),OP_SELL,LotSize,Bid,5,selSl,selTP,NULL,MagicNumber,0,Red); } } if (breakEven > 0)breakeven(); //---- return(0); } //+------------------------------------------------------------------+ void breakeven () { for (int i= OrdersTotal ()-1; i >=0;i--) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice ()> breakEven*t ) if (OrderOpenPrice() > OrderStopLoss ()) bool xx= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } for (int ii= OrdersTotal()-1; ii >=0;ii--) { if (OrderSelect (ii,SELECT_BY_POS,MODE_TRADES)) if (OrderSymbol() == Symbol ()) if (OrderMagicNumber() == MagicNumber ) if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > breakEven*t ) if (OrderOpenPrice() < OrderStopLoss ()) bool x= OrderModify (OrderTicket(),OrderOpenPrice (),OrderOpenPrice (),OrderTakeProfit(),0,Pink); } } int count(int t){ int T=0; for (int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType() == OP_BUY&&t==1)T++; if(OrderType() == OP_SELL&&t==2)T++; } } } return(T); }

    شكراً على المساعدة سوف احاول اضافة بعض الميزات وبعد الانتهاء من النسخة النهائية سوف اشاركه في المنتدى


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