النتائج 1 إلى 5 من 5
الموضوع: مطلوب تعديل بسيط على هذا الاكسبيرت
- 13-12-2007, 05:17 PM #1
مطلوب تعديل بسيط على هذا الاكسبيرت
السلام عليكم ورحمة الله وبركاته
هذا اكسبيرت يقوم بالشراء من ادنى سعر للامس ويبيع من اعلى سعر للامس ولا يقفل الصفقات الا عندما تصل للهدف او الوقف، وتم صنعه عن طريق موقع :
###sufx.core.t3-ism#
وهذا هو الكود
كود PHP://+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 1;
extern bool UseStopLoss = True;
extern int StopLoss = 50;
extern bool UseTakeProfit = True;
extern int TakeProfit = 100;
extern bool UseTrailingStop = False;
extern int TrailingStop = 0;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 = iLow(NULL, 0, Current + 1);
double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 = iHigh(NULL, 0, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 == Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 == Sell1_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
المطلوب اضافة متغير منطقي خارجي (اذا كان falce فيبقى الاكسبيرت في الوضع الحالي ، واذا كان true فيقفل جميع الصفقات المفتوحة في نهاية اليوم سواءً رابحة او خاسرة ويبدأ من جديد)
ارجو ان يكون المطلوب واضح
وارجو ان تكون الاضافة بلون مختلف لنعرف ما هي الاضافات (لكي نتعلم)
آخر تعديل بواسطة wajdyss ، 13-12-2007 الساعة 05:26 PM
- 13-12-2007, 09:20 PM #2
رد: مطلوب تعديل بسيط على هذا الاكسبيرت
أهلا بك أخي
سوف نضيف الوظيفة CloseOrders آخر الكود في الاكسبيرت .
وهي تقوم بإغلاق كل العقود المفتوحة
كود PHP:int CloseOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
if(OrderClose(OrderTicket(),OrderLots(),Bid,3)==false)
{
RefreshRates();
}
else
{
cnt=0;
total=OrdersTotal();
}
}
if (OrderType()==OP_SELL)
{
if(OrderClose(OrderTicket(),OrderLots(),Ask,3)==false)
{
RefreshRates();
}
else
{
cnt=0;
total=OrdersTotal();
}
}
}
}
return(0);
}
وسوف نضيف في الخصائص المتحول التالي :
كود PHP:extern bool AutoClose=false;
بعد ذلك في أول الوظيفة start سوف نضيف الشرط التالي :
كود PHP:if (AutoClose==true && Hour()==23)
{
CloseOrders(MagicNumber);
}
- 14-12-2007, 12:02 AM #3
رد: مطلوب تعديل بسيط على هذا الاكسبيرت
جزاك الله كل خير
انتآخر تعديل بواسطة wajdyss ، 14-12-2007 الساعة 12:05 AM
- 20-12-2011, 05:23 PM #4
السلام عليكم
بعد متابعتي لبكتست لهدا الاكسبرت من 2000 الى 2011 على EUR/USD فريم 1H و مراقبة صفقاته الخاسر 90 % منها سوف تكون رابحه ادا
قمنا باجراء عليه بعض الاضافات و هي
ان يقوم بفتح صفقة معاكسة ومضاعفة ( دون التغيير في TakeProfit) لكل صفقة خاسرة مرة واحدة فقط
اي ادا عادت هده الصفقة المعاكسة مرة اخرى بالخسارة فلا يقوم بعكسها لانها سوف تخسر حتما
مثلا لو فتح صفقة ( شراء ) بالاعدادات التالية
Lots = 1
TakeProfit = 10
StopLoss = 80
وتم ضرب الستوبلوز يقوم بفتح صفقة ( بيع ) بالاعدادات التالية
Lots = 8
TakeProfit = 10
StopLoss =80
وينتهي عمل هده الدالة
و في هده الحالة اضن انه يجب عليه الغاء خاصية ادارة راس المال
مثال اخر
ادا كانت الصفقة الخاسرة بهده الاعدادات
Lots = 1
TakeProfit = 10
StopLoss = 77
يقوم بفتح صفقة معاكسة بالاعدادات التالية
Lots = 7.7
TakeProfit = 10
StopLoss = 77
اي يقوم بحساب اللوت الثاني حسب الستوبلوز الاول للصفقة الخاسرة
و تكون هده العملية كما قلنا مرة واحدة فقط وليست متسلسل
ادا ربحت الصفقة او خسرت يعود للعمل كما كان في الاول
مع ادارة راس المال الرائع هدا كما كان في الاول
هده الاضافات ناجحة جدا لانه خلال متابعتي للبكتست
وجدت انه يخسر صفقة واحدة فقط محتمة كل عام
ارجو من احد الاساتدة المبرمجين بعد ادن صاحب الاكسبرت
ان يقوم باضافة هده التعديلات و يشاركنا الاكسبرت و النتائج
وجزاكم الله كل الخير
- 03-04-2012, 11:50 PM #5
لرفع
المواضيع المتشابهه
-
مطلوب تعديل بسيط على هذا الإكسبيرت وجزاكم الله خيرا
By mrmoha in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 8آخر مشاركة: 05-09-2010, 11:51 PM -
مطلوب تعديل على هذا الاكسبيرت
By asd111 in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 8آخر مشاركة: 15-06-2010, 03:16 PM -
ممكن تعديل بسيط على هاذا الاكسبيرت الله يخليكم
By fxpro in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 2آخر مشاركة: 09-06-2010, 11:18 AM -
ممكن تعديل ع ملف اكسل تعديل بسيط
By 300 in forum سوق تداول العملات الأجنبية والسلع والنفط والمعادنمشاركات: 3آخر مشاركة: 30-12-2009, 11:57 PM -
مطلوب تعديل الاكسبيرت
By الـوليد in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 2آخر مشاركة: 09-11-2009, 05:58 PM