FX-Arabia

جديد المواضيع















الملاحظات

منتدى المؤشرات و الاكسبيرتات تعليم برمجة الاكسبيرت ، اكسبيرت مجانى ، برمجة مؤشرات ، مؤشر ، تصميم اكسبيرت مجانا ، اكسبيرتات جديدة ، مؤشرات جديدة ، كل ما يتعلق بالتحليل و الخاص بالمؤشرات الفنية او الرقمية ، Expert advisor ، mql ، mql4 ، دورة برمجة ، برمجة اكسبيرت ، اكسبيرت رابح ، اكسبيرت جيد ، ادارة حسابات ، تداول الى ، ميتاتريدر ، تحميل منصة ، منصة تداول ، برمجة مؤشر ، مكتبة مؤشرات ، مؤشر جديد ، مؤشرات جديدة ، مؤشر حصرى ، احدث مؤشر .


طلب تعديل على برمجة هذا الاكسبرت

منتدى المؤشرات و الاكسبيرتات


إضافة رد
 
أدوات الموضوع
قديم 22-10-2015, 02:43 PM   المشاركة رقم: 1
الكاتب
Safaa Trader
عضو جديد

البيانات
تاريخ التسجيل: Sep 2012
رقم العضوية: 11447
العمر: 40
المشاركات: 3
بمعدل : 0.00 يوميا

الإتصالات
الحالة:
Safaa Trader غير متواجد حالياً
وسائل الإتصال:

المنتدى : منتدى المؤشرات و الاكسبيرتات
5 طلب تعديل على برمجة هذا الاكسبرت

تحية طيبة لكم اعزائي المبرمجين

هذا الاكسبرت هو الاكسبرت الاصلي الذي يأتي مع برنامج الميتاتريدر4
ولكني قمت ببعض التعديلات بخصوص شروط فتح الصفقات ونجح الامر معي 100% بدون اي مشاكل

ولكني الآن اريد تعديل شروط اغلاق الصفقات وهنا توقف دماغي عن العمل لكوني غير متخصص في البرمجة واختصاصي الدراسي بعيد كل البعد عن لغات البرمجة
اولاً سأشرح لكم التعديلات التي قمت بها
ثم سأشرح لكم مالذي يحدث ثم سأشرح لكم المشكلة وما اريده ان يكون

في البداية اخذت الاكسبرت الاصلي moving average واجريت عليه التعديلات التالية

قمت باضافة خط موفنج افريج آخر
غيرت شروط فتح الصفقات
غير عدد الصفقات
قمت باضافة خاصية Take Profit


البرنامج حالياً يفتح الصفقات فقط وبشكل طبيعي ويتم اغلاق الصفقات بواسطة ال TakeProfit فقط
الآن اريد ان اضيف شرط ثاني لاغلاق الصفقات وقد كتبت الشرط وتم تنفيذه بدون اي مشكلة

المشكلة هي ان شرط الاغلاق لا يعمل نهائياً عندما يكون عدد الصفقات اكثر من 1
اي انه يعمل بشكل جيد اذا كان شرط فتح الصفقات مضبوط على صفقة واحدة فقط

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

يعني اريد ان يغلق فقط الصفقات التي يتحقق فيها الشرط ومهما كان عددها
حالياً انا اقوم بضبط عدد الصفقات المفتوحة على 100 صفقة

الرجاء مساعدتي
لابد انها بسيطة جداً ولكن دماغي لم يعد يعمل
خرج عن الخدمة تماماً

هذا هو الكود كامل من الدنكة للدنكة
كود:
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131114
//--- Inputs
extern string SIZE="حجم اللوت";
input double Lots           =0.1;
input double MaximumRisk    =0.1;
input double DecreaseFactor =45;
extern double Profit   =0.001;
extern double Loss      =0.0000;
extern string countLots="عدد العقود";
input int  count = 100;
extern string Indicators="المؤشرات";
extern string Ma1="المعدل الاول";
input int    MovingPeriod1  =440;
input int    MovingShift1   =1;
extern string Ma2="المعدل الثاني";
input int  MovingPeriod2 =36;
input int  MovingShift2  =1;




//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=count;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma1;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if( Close[1]<Close[2] && Close[2]<Close[3] && Close[1]<Close[3] && Close[3]>ma1 && Close[2]>ma1 && Close[1]>ma1)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-Profit,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if( Close[1]>Close[2] && Close[2]>Close[3] && Close[1]>Close[3] && Close[3]<ma1 && Close[2]<ma1 && Close[1]<ma1)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+Profit,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma1;
   double ma2;
   double ma3;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
   ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
   ma3=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if( OrderOpenPrice()> ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if( OrderOpenPrice() <ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
هذا هو الكود كامل من الدنكة للدنكة



عرض البوم صور Safaa Trader  
رد مع اقتباس


  #1  
قديم 22-10-2015, 02:43 PM
Safaa Trader Safaa Trader غير متواجد حالياً
عضو جديد
5 طلب تعديل على برمجة هذا الاكسبرت

تحية طيبة لكم اعزائي المبرمجين

هذا الاكسبرت هو الاكسبرت الاصلي الذي يأتي مع برنامج الميتاتريدر4
ولكني قمت ببعض التعديلات بخصوص شروط فتح الصفقات ونجح الامر معي 100% بدون اي مشاكل

ولكني الآن اريد تعديل شروط اغلاق الصفقات وهنا توقف دماغي عن العمل لكوني غير متخصص في البرمجة واختصاصي الدراسي بعيد كل البعد عن لغات البرمجة
اولاً سأشرح لكم التعديلات التي قمت بها
ثم سأشرح لكم مالذي يحدث ثم سأشرح لكم المشكلة وما اريده ان يكون

في البداية اخذت الاكسبرت الاصلي moving average واجريت عليه التعديلات التالية

قمت باضافة خط موفنج افريج آخر
غيرت شروط فتح الصفقات
غير عدد الصفقات
قمت باضافة خاصية Take Profit


البرنامج حالياً يفتح الصفقات فقط وبشكل طبيعي ويتم اغلاق الصفقات بواسطة ال TakeProfit فقط
الآن اريد ان اضيف شرط ثاني لاغلاق الصفقات وقد كتبت الشرط وتم تنفيذه بدون اي مشكلة

المشكلة هي ان شرط الاغلاق لا يعمل نهائياً عندما يكون عدد الصفقات اكثر من 1
اي انه يعمل بشكل جيد اذا كان شرط فتح الصفقات مضبوط على صفقة واحدة فقط

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

يعني اريد ان يغلق فقط الصفقات التي يتحقق فيها الشرط ومهما كان عددها
حالياً انا اقوم بضبط عدد الصفقات المفتوحة على 100 صفقة

الرجاء مساعدتي
لابد انها بسيطة جداً ولكن دماغي لم يعد يعمل
خرج عن الخدمة تماماً

هذا هو الكود كامل من الدنكة للدنكة
كود:
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131114
//--- Inputs
extern string SIZE="حجم اللوت";
input double Lots           =0.1;
input double MaximumRisk    =0.1;
input double DecreaseFactor =45;
extern double Profit   =0.001;
extern double Loss      =0.0000;
extern string countLots="عدد العقود";
input int  count = 100;
extern string Indicators="المؤشرات";
extern string Ma1="المعدل الاول";
input int    MovingPeriod1  =440;
input int    MovingShift1   =1;
extern string Ma2="المعدل الثاني";
input int  MovingPeriod2 =36;
input int  MovingShift2  =1;




//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=count;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma1;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if( Close[1]<Close[2] && Close[2]<Close[3] && Close[1]<Close[3] && Close[3]>ma1 && Close[2]>ma1 && Close[1]>ma1)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-Profit,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if( Close[1]>Close[2] && Close[2]>Close[3] && Close[1]>Close[3] && Close[3]<ma1 && Close[2]<ma1 && Close[1]<ma1)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+Profit,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma1;
   double ma2;
   double ma3;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
   ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
   ma3=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if( OrderOpenPrice()> ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if( OrderOpenPrice() <ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
هذا هو الكود كامل من الدنكة للدنكة





رد مع اقتباس

قديم 22-10-2015, 02:48 PM   المشاركة رقم: 2
الكاتب
Safaa Trader
عضو جديد

البيانات
تاريخ التسجيل: Sep 2012
رقم العضوية: 11447
العمر: 40
المشاركات: 3
بمعدل : 0.00 يوميا

الإتصالات
الحالة:
Safaa Trader غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : Safaa Trader المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

ملاحظة: عدد الصفقات = 1 , اذا كان count=0
عدد الصفقات=2 , اذا كان count=1

وهكذا



عرض البوم صور Safaa Trader  
رد مع اقتباس
  #2  
قديم 22-10-2015, 02:48 PM
Safaa Trader Safaa Trader غير متواجد حالياً
عضو جديد
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

ملاحظة: عدد الصفقات = 1 , اذا كان count=0
عدد الصفقات=2 , اذا كان count=1

وهكذا




رد مع اقتباس
قديم 22-10-2015, 05:32 PM   المشاركة رقم: 3
الكاتب
اسلام العوامى
عضو ذهبى
الصورة الرمزية اسلام العوامى

البيانات
تاريخ التسجيل: Apr 2012
رقم العضوية: 9148
الدولة: alexandria - egypt
المشاركات: 6,086
بمعدل : 1.39 يوميا

الإتصالات
الحالة:
اسلام العوامى غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : Safaa Trader المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

المشاركة الأصلية كتبت بواسطة Safaa Trader نقره لعرض الصورة في صفحة مستقلة
تحية طيبة لكم اعزائي المبرمجين

هذا الاكسبرت هو الاكسبرت الاصلي الذي يأتي مع برنامج الميتاتريدر4
ولكني قمت ببعض التعديلات بخصوص شروط فتح الصفقات ونجح الامر معي 100% بدون اي مشاكل

ولكني الآن اريد تعديل شروط اغلاق الصفقات وهنا توقف دماغي عن العمل لكوني غير متخصص في البرمجة واختصاصي الدراسي بعيد كل البعد عن لغات البرمجة
اولاً سأشرح لكم التعديلات التي قمت بها
ثم سأشرح لكم مالذي يحدث ثم سأشرح لكم المشكلة وما اريده ان يكون

في البداية اخذت الاكسبرت الاصلي moving average واجريت عليه التعديلات التالية

قمت باضافة خط موفنج افريج آخر
غيرت شروط فتح الصفقات
غير عدد الصفقات
قمت باضافة خاصية Take Profit


البرنامج حالياً يفتح الصفقات فقط وبشكل طبيعي ويتم اغلاق الصفقات بواسطة ال TakeProfit فقط
الآن اريد ان اضيف شرط ثاني لاغلاق الصفقات وقد كتبت الشرط وتم تنفيذه بدون اي مشكلة

المشكلة هي ان شرط الاغلاق لا يعمل نهائياً عندما يكون عدد الصفقات اكثر من 1
اي انه يعمل بشكل جيد اذا كان شرط فتح الصفقات مضبوط على صفقة واحدة فقط

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

يعني اريد ان يغلق فقط الصفقات التي يتحقق فيها الشرط ومهما كان عددها
حالياً انا اقوم بضبط عدد الصفقات المفتوحة على 100 صفقة

الرجاء مساعدتي
لابد انها بسيطة جداً ولكن دماغي لم يعد يعمل
خرج عن الخدمة تماماً

هذا هو الكود كامل من الدنكة للدنكة
كود:
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131114
//--- Inputs
extern string SIZE="حجم اللوت";
input double Lots           =0.1;
input double MaximumRisk    =0.1;
input double DecreaseFactor =45;
extern double Profit   =0.001;
extern double Loss      =0.0000;
extern string countLots="عدد العقود";
input int  count = 100;
extern string Indicators="المؤشرات";
extern string Ma1="المعدل الاول";
input int    MovingPeriod1  =440;
input int    MovingShift1   =1;
extern string Ma2="المعدل الثاني";
input int  MovingPeriod2 =36;
input int  MovingShift2  =1;




//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=count;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma1;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if( Close[1]<Close[2] && Close[2]<Close[3] && Close[1]<Close[3] && Close[3]>ma1 && Close[2]>ma1 && Close[1]>ma1)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-Profit,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if( Close[1]>Close[2] && Close[2]>Close[3] && Close[1]>Close[3] && Close[3]<ma1 && Close[2]<ma1 && Close[1]<ma1)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+Profit,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma1;
   double ma2;
   double ma3;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
   ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
   ma3=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if( OrderOpenPrice()> ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if( OrderOpenPrice() <ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
هذا هو الكود كامل من الدنكة للدنكة

،،،اهلا بك اخى الفاضل ، جارى قراءة الكود وكتابة التعديل المطلوب،،،

،،،تحياتى،،،



التوقيع

عرض البوم صور اسلام العوامى  
رد مع اقتباس
  #3  
قديم 22-10-2015, 05:32 PM
اسلام العوامى اسلام العوامى غير متواجد حالياً
عضو ذهبى
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

المشاركة الأصلية كتبت بواسطة Safaa Trader نقره لعرض الصورة في صفحة مستقلة
تحية طيبة لكم اعزائي المبرمجين

هذا الاكسبرت هو الاكسبرت الاصلي الذي يأتي مع برنامج الميتاتريدر4
ولكني قمت ببعض التعديلات بخصوص شروط فتح الصفقات ونجح الامر معي 100% بدون اي مشاكل

ولكني الآن اريد تعديل شروط اغلاق الصفقات وهنا توقف دماغي عن العمل لكوني غير متخصص في البرمجة واختصاصي الدراسي بعيد كل البعد عن لغات البرمجة
اولاً سأشرح لكم التعديلات التي قمت بها
ثم سأشرح لكم مالذي يحدث ثم سأشرح لكم المشكلة وما اريده ان يكون

في البداية اخذت الاكسبرت الاصلي moving average واجريت عليه التعديلات التالية

قمت باضافة خط موفنج افريج آخر
غيرت شروط فتح الصفقات
غير عدد الصفقات
قمت باضافة خاصية Take Profit


البرنامج حالياً يفتح الصفقات فقط وبشكل طبيعي ويتم اغلاق الصفقات بواسطة ال TakeProfit فقط
الآن اريد ان اضيف شرط ثاني لاغلاق الصفقات وقد كتبت الشرط وتم تنفيذه بدون اي مشكلة

المشكلة هي ان شرط الاغلاق لا يعمل نهائياً عندما يكون عدد الصفقات اكثر من 1
اي انه يعمل بشكل جيد اذا كان شرط فتح الصفقات مضبوط على صفقة واحدة فقط

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

يعني اريد ان يغلق فقط الصفقات التي يتحقق فيها الشرط ومهما كان عددها
حالياً انا اقوم بضبط عدد الصفقات المفتوحة على 100 صفقة

الرجاء مساعدتي
لابد انها بسيطة جداً ولكن دماغي لم يعد يعمل
خرج عن الخدمة تماماً

هذا هو الكود كامل من الدنكة للدنكة
كود:
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131114
//--- Inputs
extern string SIZE="حجم اللوت";
input double Lots           =0.1;
input double MaximumRisk    =0.1;
input double DecreaseFactor =45;
extern double Profit   =0.001;
extern double Loss      =0.0000;
extern string countLots="عدد العقود";
input int  count = 100;
extern string Indicators="المؤشرات";
extern string Ma1="المعدل الاول";
input int    MovingPeriod1  =440;
input int    MovingShift1   =1;
extern string Ma2="المعدل الثاني";
input int  MovingPeriod2 =36;
input int  MovingShift2  =1;




//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=count;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma1;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if( Close[1]<Close[2] && Close[2]<Close[3] && Close[1]<Close[3] && Close[3]>ma1 && Close[2]>ma1 && Close[1]>ma1)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-Profit,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if( Close[1]>Close[2] && Close[2]>Close[3] && Close[1]>Close[3] && Close[3]<ma1 && Close[2]<ma1 && Close[1]<ma1)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+Profit,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma1;
   double ma2;
   double ma3;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);
   ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
   ma3=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if( OrderOpenPrice()> ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if( OrderOpenPrice() <ma2 )
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
هذا هو الكود كامل من الدنكة للدنكة

،،،اهلا بك اخى الفاضل ، جارى قراءة الكود وكتابة التعديل المطلوب،،،

،،،تحياتى،،،




رد مع اقتباس
قديم 22-10-2015, 06:51 PM   المشاركة رقم: 4
الكاتب
Safaa Trader
عضو جديد

البيانات
تاريخ التسجيل: Sep 2012
رقم العضوية: 11447
العمر: 40
المشاركات: 3
بمعدل : 0.00 يوميا

الإتصالات
الحالة:
Safaa Trader غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : Safaa Trader المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

اكون ممنون الك حبيب قلبي



عرض البوم صور Safaa Trader  
رد مع اقتباس
  #4  
قديم 22-10-2015, 06:51 PM
Safaa Trader Safaa Trader غير متواجد حالياً
عضو جديد
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

اكون ممنون الك حبيب قلبي




رد مع اقتباس
قديم 24-10-2015, 12:34 PM   المشاركة رقم: 5
الكاتب
اسلام العوامى
عضو ذهبى
الصورة الرمزية اسلام العوامى

البيانات
تاريخ التسجيل: Apr 2012
رقم العضوية: 9148
الدولة: alexandria - egypt
المشاركات: 6,086
بمعدل : 1.39 يوميا

الإتصالات
الحالة:
اسلام العوامى غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : Safaa Trader المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

،،،الخطأ موجود فى وظيفة اغلاق الصفقات ، بدلا من OrderOpenPrice<ma2 يجب ان تكون Bid<ma2،،،

،،،يجب ان تقوم بالنظر الى السعر الحالى وليس سعر فتح الصفقة،،،

،،،تحياتى،،،



التوقيع

عرض البوم صور اسلام العوامى  
رد مع اقتباس
  #5  
قديم 24-10-2015, 12:34 PM
اسلام العوامى اسلام العوامى غير متواجد حالياً
عضو ذهبى
افتراضي رد: طلب تعديل على برمجة هذا الاكسبرت

،،،الخطأ موجود فى وظيفة اغلاق الصفقات ، بدلا من OrderOpenPrice<ma2 يجب ان تكون Bid<ma2،،،

،،،يجب ان تقوم بالنظر الى السعر الحالى وليس سعر فتح الصفقة،،،

،،،تحياتى،،،




رد مع اقتباس
إضافة رد

مواقع النشر (المفضلة)

الكلمات الدلالية (Tags)
الاكسبرت, برمجة, تعديل

أدوات الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة



الساعة الآن 07:57 PM



جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com

تحذير المخاطرة

التجارة بالعملات الأجنبية تتضمن علي قدر كبير من المخاطر ومن الممكن ألا تكون مناسبة لجميع المضاربين, إستعمال الرافعة المالية في التجاره يزيد من إحتمالات الخطورة و التعرض للخساره, عليك التأكد من قدرتك العلمية و الشخصية على التداول.

تنبيه هام

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

اتصل بنا

البريد الإلكتروني للدعم الفنى : support@fx-arabia.com
جميع الحقوق محفوظة اف اكس ارابيا – احدى مواقع Inwestopedia Sp. Z O.O. للاستشارات و التدريب – جمهورية بولندا الإتحادية.
Powered by vBulletin® Copyright ©2000 - 2024 , Designed by Fx-Arabia Team