اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex

اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex (https://fx-arabia.com/vb/index.php)
-   منتدى المؤشرات و الاكسبيرتات (https://fx-arabia.com/vb/forumdisplay.php?f=6)
-   -   لخبراء البرمجة : كيف يمكن الغاء هذه الدالة (https://fx-arabia.com/vb/showthread.php?t=21440)

silver hawk 25-05-2012 07:13 PM

لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
بسم الله الرحمن الرحيم
ارجوا منكم يا اخواني المساعدة في الغاء هذه الدالة

#include <stdlib.mqh>
#include <WinUser32.mqh>

كود:


//-------------------------------------------------------------
//  Etasoft Inc. Forex EA and Script Generator version 4.1  EA
//-------------------------------------------------------------
// Keywords: MT4, Forex EA builder, create EA, expert advisor developer

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link      "http://www.forexgenerator.com/"

#include <stdlib.mqh>
#include <WinUser32.mqh>

// exported variables
extern double BuyLots25 = 5;
extern int BuyStoploss25 = 25;
extern int BuyTakeprofit25 = 100;
extern double SellLots24 = 5;
extern int SellStoploss24 = 25;
extern int SellTakeprofit24 = 100;


// local variables
double PipValue=1;    // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int NDigits = 4;  // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;

int Count4 = 0;
bool FirstTime27 = true;
bool FirstTime20 = true;


int init()
{
    NDigits = Digits;
   
    if (false) ObjectsDeleteAll();      // clear the chart
   
   
    Comment("");    // clear the chart
}

// Expert start
int start()
{
    if (Bars < 10)
    {
        Comment("Not enough bars");
        return (0);
    }
    if (Terminated == true)
    {
        Comment("EA Terminated.");
        return (0);
    }
   
    OnEveryTick3();
   
}

void OnEveryTick3()
{
    if (true == false && true) PipValue = 10;
    if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
   
    PrintInfoToChart4();
    TechnicalAnalysis29();
    TechnicalAnalysis22();
    TechnicalAnalysis30();
    TechnicalAnalysis31();
   
}

void PrintInfoToChart4()
{
    string temp = "Some Text\nExecuted : " + Count4 + "\n"
    + "Spread: " + DoubleToStr(MarketInfo(Symbol(), MODE_SPREAD)/PipValue, 2)+ "\n"
    + "------------------------------------------------\n"
    + "ACCOUNT INFORMATION:\n"
    + "\n"
    + "Account Name:    " + AccountName()+ "\n"
    + "Account Leverage:    " + DoubleToStr(AccountLeverage(), 0)+ "\n"
    + "Account Balance:    " + DoubleToStr(AccountBalance(), 2)+ "\n"
    + "Account Equity:    " + DoubleToStr(AccountEquity(), 2)+ "\n"
    + "Free Margin:    " + DoubleToStr(AccountFreeMargin(), 2)+ "\n"
    + "Used Margin:    " + DoubleToStr(AccountMargin(), 2)+ "\n"
    + "------------------------------------------------\n";
    Comment(temp);
    Count4++;
   
}

void TechnicalAnalysis29()
{
    if (iRVI(NULL, PERIOD_M5,21,MODE_SIGNAL,0) < 0)
    {
        CloseOrder2();
       
    }
}

void CloseOrder2()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[30][2];
    for (int i = 0; i < orderstotal; i++)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderType() != OP_BUY || OrderSymbol() != Symbol() || OrderMagicNumber() != 1)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
        {
            bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
            if (ret == false)
            Print("OrderClose() error - ", ErrorDescription(GetLastError()));
        }
    }
   
}

void TechnicalAnalysis22()
{
    if (iRVI(NULL, PERIOD_M5,21,MODE_SIGNAL,0) > 0)
    {
        CloseOrder23();
       
    }
}

void CloseOrder23()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[30][2];
    for (int i = 0; i < orderstotal; i++)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderType() != OP_SELL || OrderSymbol() != Symbol() || OrderMagicNumber() != 1)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
        {
            bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
            if (ret == false)
            Print("OrderClose() error - ", ErrorDescription(GetLastError()));
        }
    }
   
}

void TechnicalAnalysis30()
{
    if (iMA(NULL, PERIOD_M5,14,0,MODE_EMA,PRICE_CLOSE,0) > iMA(NULL, PERIOD_M5,28,0,MODE_SMA,PRICE_CLOSE,0))
    {
        TechnicalAnalysis28();
       
    }
}

void TechnicalAnalysis28()
{
    if (iRVI(NULL, PERIOD_M5,21,MODE_SIGNAL,0) > 0)
    {
        CheckLastOrderType27();
       
    }
}

void CheckLastOrderType27()
{
    int orderType = -1;
    datetime lastCloseTime = 0;
    int cnt = OrdersHistoryTotal();
    for (int i=0; i < cnt; i++)
    {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() == Symbol() && lastCloseTime < OrderCloseTime())
        {
            lastCloseTime = OrderCloseTime();
            orderType = OrderType();
        }
    }
    if (orderType == OP_SELL || FirstTime27)
    {
        FirstTime27 = false;
        IfOrderDoesNotExist26();
       
    }
}

void IfOrderDoesNotExist26()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }
   
    if (exists == false)
    {
        BuyOrder25();
       
    }
}

void BuyOrder25()
{
    double SL = Ask - BuyStoploss25*PipValue*Point;
    if (BuyStoploss25 == 0) SL = 0;
    double TP = Ask + BuyTakeprofit25*PipValue*Point;
    if (BuyTakeprofit25 == 0) TP = 0;
    int ticket = -1;
    if (true)
    ticket = OrderSend(Symbol(), OP_BUY, BuyLots25, Ask, 0, 0, 0, "My Expert", 1, 0, Blue);
    else
    ticket = OrderSend(Symbol(), OP_BUY, BuyLots25, Ask, 0, SL, TP, "My Expert", 1, 0, Blue);
    if (ticket > -1)
    {
        if (true)
        {
            OrderSelect(ticket, SELECT_BY_TICKET);
            bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);
            if (ret == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
           
    }
    else
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }
}

void TechnicalAnalysis31()
{
    if (iMA(NULL, PERIOD_M5,14,0,MODE_EMA,PRICE_CLOSE,0) < iMA(NULL, PERIOD_M5,28,0,MODE_SMA,PRICE_CLOSE,0))
    {
        TechnicalAnalysis21();
       
    }
}

void TechnicalAnalysis21()
{
    if (iRVI(NULL, PERIOD_M5,21,MODE_SIGNAL,0) < 0)
    {
        CheckLastOrderType20();
       
    }
}

void CheckLastOrderType20()
{
    int orderType = -1;
    datetime lastCloseTime = 0;
    int cnt = OrdersHistoryTotal();
    for (int i=0; i < cnt; i++)
    {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() == Symbol() && lastCloseTime < OrderCloseTime())
        {
            lastCloseTime = OrderCloseTime();
            orderType = OrderType();
        }
    }
    if (orderType == OP_BUY || FirstTime20)
    {
        FirstTime20 = false;
        IfOrderDoesNotExist15();
       
    }
}

void IfOrderDoesNotExist15()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }
   
    if (exists == false)
    {
        SellOrder24();
       
    }
}

void SellOrder24()
{
    double SL = Bid + SellStoploss24*PipValue*Point;
    if (SellStoploss24 == 0) SL = 0;
    double TP = Bid - SellTakeprofit24*PipValue*Point;
    if (SellTakeprofit24 == 0) TP = 0;
    int ticket = -1;
    if (true)
    ticket = OrderSend(Symbol(), OP_SELL, SellLots24, Bid, 0, 0, 0, "My Expert", 1, 0, Red);
    else
    ticket = OrderSend(Symbol(), OP_SELL, SellLots24, Bid, 0, SL, TP, "My Expert", 1, 0, Red);
    if (ticket > -1)
    {
        if (true)
        {
            OrderSelect(ticket, SELECT_BY_TICKET);
            bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Red);
            if (ret == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
           
    }
    else
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }
}



int deinit()
{
    if (false) ObjectsDeleteAll();
   
   
}



silver hawk 26-05-2012 02:06 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
هل حل هذه المشكلة صعب لهذه الدرجة
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Eng.Hamada 26-05-2012 07:31 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
1 مرفق
معذرة اخي انا لسه شايف الموضوع دلوقتي
جرب كده الاكسبرت وشوف هل هيدي نفس النتائج الاصليه ولا لا؟؟؟؟؟

silver hawk 27-05-2012 06:16 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
تحية طيبة اخي (Eng.Hamada)
اشكرك يا اخي على تكرمك ولطفك ومساعدتك
ان شاء الله سوف اقوم باختباره
مع فائق احترامي وتقديري

silver hawk 27-05-2012 07:26 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
اخي (Eng.Hamada)
اود شكرك للمرة الثانية على المساعدة
واود التوضيح لك يا اخي ان الاكسبيرت المعدل من قبلك شغال 100% على منصة الميتاتريدر وسلمت يداك
لكني احاول تحويله للعمل على منصة جافا التابعة لاحدى الشركات العالمية لغرض الحصول على باك تست اكثر دقة
اما بعد :
الحمد لله تم معالجة المشكلة التي كان يتسبب بها الكود اعلاه
لكن ظهرت لي مشكلة اخرى وهي موضحة بالصورة ادناه :
http://img03.arabsh.com/uploads/imag...474267f207.jpg
فهل من الممكن حلها
واود شكرك مقدما ً يااخي الغالي
مع فائق احترامي وتقديري


Eng.Hamada 27-05-2012 08:34 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
اقتباس:

المشاركة الأصلية كتبت بواسطة silver hawk (المشاركة 341474)
اخي (Eng.Hamada)
اود شكرك للمرة الثانية على المساعدة
واود التوضيح لك يا اخي ان الاكسبيرت المعدل من قبلك شغال 100% على منصة الميتاتريدر وسلمت يداك
لكني احاول تحويله للعمل على منصة جافا التابعة لاحدى الشركات العالمية لغرض الحصول على باك تست اكثر دقة
اما بعد :
الحمد لله تم معالجة المشكلة التي كان يتسبب بها الكود اعلاه
لكن ظهرت لي مشكلة اخرى وهي موضحة بالصورة ادناه :
http://img03.arabsh.com/uploads/imag...474267f207.jpg
فهل من الممكن حلها
واود شكرك مقدما ً يااخي الغالي
مع فائق احترامي وتقديري


لا شكر علي واجب اخي
بالنسبه للمشكله اللي ظاهره بالجافا سببها مشروح بالسطر ده

http://www.fx-arabia.com/vb/uploaded...1338140014.png
وهي بسبب ان Array.Sort صالحه للمتغير الدوبل مش الانتجر وبالتالي لازم تخلي ordticket نوعها double
جرب كده وقلي ايه النتيجه

tamer_taher22 27-05-2012 09:56 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
الاخ المهندس حمادة

ارجو مساعدتى

لقد قمت بانشاء مؤشر يعطى انذار عند وصول السعر بين قيميتن مثلا عند وصول السعر بين 1.25100 و 1. 25200 و لكن الانذار يعمل مع كل تحرك للسعر وانا اريده ان يعمل مرة واحدة فقط عند دخول السعر اول مرة

silver hawk 27-05-2012 10:11 PM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Eng.Hamada (المشاركة 341501)
لا شكر علي واجب اخي
بالنسبه للمشكله اللي ظاهره بالجافا سببها مشروح بالسطر ده

http://www.fx-arabia.com/vb/uploaded...1338140014.png
وهي بسبب ان Array.Sort صالحه للمتغير الدوبل مش الانتجر وبالتالي لازم تخلي ordticket نوعها double
جرب كده وقلي ايه النتيجه


اخي الغالي اشكرك على سرعة الرد
حاولت ولكني لم انجح بتغييره وتوقف الاكسبيرت عن العمل
انا اسف واعلم اني قد اتعبتك معي
ارجو من حضرتك التفضل بتعديله
لاني حديث العلم بلغة mql4 واود اعلامك ان هذا الاكسبيرت قمت بتصميمه
ببرنامج Forex EA Generator
مع فائق احترامي وتقديري

Eng.Hamada 28-05-2012 01:26 AM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
1 مرفق
اقتباس:

المشاركة الأصلية كتبت بواسطة silver hawk (المشاركة 341549)



اخي الغالي اشكرك على سرعة الرد
حاولت ولكني لم انجح بتغييره وتوقف الاكسبيرت عن العمل
انا اسف واعلم اني قد اتعبتك معي
ارجو من حضرتك التفضل بتعديله
لاني حديث العلم بلغة mql4 واود اعلامك ان هذا الاكسبيرت قمت بتصميمه
ببرنامج Forex EA Generator
مع فائق احترامي وتقديري

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

Eng.Hamada 28-05-2012 01:51 AM

رد: لخبراء البرمجة : كيف يمكن الغاء هذه الدالة
 
اقتباس:

المشاركة الأصلية كتبت بواسطة tamer_taher22 (المشاركة 341541)
الاخ المهندس حمادة

ارجو مساعدتى

لقد قمت بانشاء مؤشر يعطى انذار عند وصول السعر بين قيميتن مثلا عند وصول السعر بين 1.25100 و 1. 25200 و لكن الانذار يعمل مع كل تحرك للسعر وانا اريده ان يعمل مرة واحدة فقط عند دخول السعر اول مرة

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

كود:

 
#property indicator_chart_window
extern double p1 ;
extern double p2 ;
int a ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                        |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                      |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  int    counted_bars=IndicatorCounted();
//----
  if  (p1 < Bid < p2 && a == 0 )
        {
          Alert("price is here ");
            a =1 ;
        }
       
       
 
//----
  return(0);
  }



الساعة الآن 12:30 PM

Powered by vBulletin® Copyright ©2000 - 2025

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