المساعد الشخصي الرقمي

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


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
معذرة اخي انا لسه شايف الموضوع دلوقتي
جرب كده الاكسبرت وشوف هل هيدي نفس النتائج الاصليه ولا لا؟؟؟؟؟

silver hawk
27-05-2012, 06:16 PM
تحية طيبة اخي (Eng.Hamada (http://www.fx-arabia.com/vb/member.php?u=1622))
اشكرك يا اخي على تكرمك ولطفك ومساعدتك
ان شاء الله سوف اقوم باختباره
مع فائق احترامي وتقديري

silver hawk
27-05-2012, 07:26 PM
اخي (Eng.Hamada (http://www.fx-arabia.com/vb/member.php?u=1622))
اود شكرك للمرة الثانية على المساعدة
واود التوضيح لك يا اخي ان الاكسبيرت المعدل من قبلك شغال 100% على منصة الميتاتريدر وسلمت يداك
لكني احاول تحويله للعمل على منصة جافا التابعة لاحدى الشركات العالمية لغرض الحصول على باك تست اكثر دقة
اما بعد :
الحمد لله تم معالجة المشكلة التي كان يتسبب بها الكود اعلاه
لكن ظهرت لي مشكلة اخرى وهي موضحة بالصورة ادناه :
http://img03.arabsh.com/uploads/image/2012/05/27/0e34474267f207.jpg
فهل من الممكن حلها
واود شكرك مقدما ً يااخي الغالي
مع فائق احترامي وتقديري

Eng.Hamada
27-05-2012, 08:34 PM
اخي (Eng.Hamada (http://www.fx-arabia.com/vb/member.php?u=1622))
اود شكرك للمرة الثانية على المساعدة
واود التوضيح لك يا اخي ان الاكسبيرت المعدل من قبلك شغال 100% على منصة الميتاتريدر وسلمت يداك
لكني احاول تحويله للعمل على منصة جافا التابعة لاحدى الشركات العالمية لغرض الحصول على باك تست اكثر دقة
اما بعد :
الحمد لله تم معالجة المشكلة التي كان يتسبب بها الكود اعلاه
لكن ظهرت لي مشكلة اخرى وهي موضحة بالصورة ادناه :
http://img03.arabsh.com/uploads/image/2012/05/27/0e34474267f207.jpg
فهل من الممكن حلها
واود شكرك مقدما ً يااخي الغالي
مع فائق احترامي وتقديري




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

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

tamer_taher22
27-05-2012, 09:56 PM
الاخ المهندس حمادة

ارجو مساعدتى

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

silver hawk
27-05-2012, 10:11 PM
لا شكر علي واجب اخي
بالنسبه للمشكله اللي ظاهره بالجافا سببها مشروح بالسطر ده

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


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

Eng.Hamada
28-05-2012, 01:26 AM
اخي الغالي اشكرك على سرعة الرد
حاولت ولكني لم انجح بتغييره وتوقف الاكسبيرت عن العمل
انا اسف واعلم اني قد اتعبتك معي
ارجو من حضرتك التفضل بتعديله
لاني حديث العلم بلغة mql4 واود اعلامك ان هذا الاكسبيرت قمت بتصميمه
ببرنامج Forex EA Generator
مع فائق احترامي وتقديري



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

Eng.Hamada
28-05-2012, 01:51 AM
الاخ المهندس حمادة

ارجو مساعدتى

لقد قمت بانشاء مؤشر يعطى انذار عند وصول السعر بين قيميتن مثلا عند وصول السعر بين 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);
}

tamer_taher22
28-05-2012, 02:12 AM
تمام الحل سهل جدا وهو انك بتخلي في متغير في البدايه ونفترض انه 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);
}





يصراحة مشعارف اشكرك ازاى بجد شكرا للمساعدة

silver hawk
28-05-2012, 08:10 PM
تم تعديله ياغالي وجرب كده النسخه المعدله ومستني النتيجه
البرنامج فعلا حلوا جدا في التصميم وسهل الاستخدام وهيساعدك كتير جدا بس برضوا لازم تكمل تعلمك للغة ال mql4 ,, وبالتوفيق ياغالي

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

Eng.Hamada
28-05-2012, 08:36 PM
بارك الله فيك يا اخي الغالي
للاسف نفس المشكلة قائمة
وهو كذلك يا اخي انا احاول تعلم هذه اللغة منذ ما يقارب سنتين
لاكن للاسف كتب المراجع العربية قليلة جدا ً لهذه اللغة او تكون غير مكتملة
ولغتي الانكليزية متوسطة




طب انا هحاول بحاجه تانيه كده
وهرفع نسخه تانيه بالليل بإذن الله

silver hawk
28-05-2012, 09:29 PM
طب انا هحاول بحاجه تانيه كده
وهرفع نسخه تانيه بالليل بإذن الله

بارك الله فيك يا الغالي وزادك من علمه علما ً
اخي الغالي حاولت عمل الاكسبيرت بنفس المعطيات من خلال الموقع
المدرج بموضوعك الراقي الموجود في ادناه :
شرح مفصل وبسيط لصناعة اكسبرتك بنفسك -Expert Advisor Builder (http://www.fx-arabia.com/vb/showthread.php?t=17653)
لاكن عندما احاول عمل باك تست للاكسبيرت لا يعمل
ويظهر خطأ 130
علما ً بأني استخدم منصة fxdd خمسة ارقام

Eng.Hamada
28-05-2012, 10:38 PM
بارك الله فيك يا الغالي وزادك من علمه علما ً
اخي الغالي حاولت عمل الاكسبيرت بنفس المعطيات من خلال الموقع
المدرج بموضوعك الراقي الموجود في ادناه :
شرح مفصل وبسيط لصناعة اكسبرتك بنفسك -Expert Advisor Builder (http://www.fx-arabia.com/vb/showthread.php?t=17653)
لاكن عندما احاول عمل باك تست للاكسبيرت لا يعمل
ويظهر خطأ 130
علما ً بأني استخدم منصة fxdd خمسة ارقام

تقريبا اخي ده بسبب الاستوب لوز والتيك بروفت جرب كده خليهم 300 و 600

silver hawk
29-05-2012, 07:39 PM
تقريبا اخي ده بسبب الاستوب لوز والتيك بروفت جرب كده خليهم 300 و 600

تحية طيبة اخي الغالي
قمت بتغييره ولاكن دون جدوى
اخي العزيز هل بامكانك التفضل والتكرم عليه
بصياغة الاكسبيرت بالطريقة العادية مع اضافة مؤشر
ADX + كود مضاعفة الصفقات الخاسرة فقط ومن ثم يرجع
الى الاعدادات الافتراضية في حالة الربح
بحيث يضاعف قيمة العقد (0.1 - 0.2 - 0.3 )
وسوف اكون ممتن لك يا اخي واستاذي الغالي

مع فائق شكري وتقديري