وعليكم السلام
تفضل شرط الشراء وتعكس الأشارة للبيع الى >
كود PHP:
if(iOpen(Symbol(),0,0)>Open[1] && Time>0) /// {Time=0; Buy;}
Printable View
تفضل الكود للشراء وعدل للبيع
ثم المقارنةكود PHP:
double profitvc(){double c;for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo && OrderType()==OP_BUY){c=c+OrderProfit();} }return(c);}
if(profitvc()>20) // CloseBuy();
السلام عليكم اعضاء ومشرفين ومبرمجين هذا المنتدى الكريم
اولا احب ان اشكر كل من ساهم في هذا المنتدى بوقته وجهده
فبفضل هذا المنتدى بدأت اتعلم لغة البرمجة والحمد لله فشكرا جزيلا لكم جميعا
وقمت بعمل اكسبيرت لتقاطع اثنين موفينج افرج ولكني لا اعرف كيف اضيف خاصية
الاغلاق عند ظهور اشارة عكسية الرجاء مساعدتي في ذلك بارك الله فيكم جميعا.
//اعدادات الموفينج السريع
extern string Setting_1 = "Fast Moving Average Setting"; // Fast Moving Average Setting
extern int FastMA_Period = 9;
extern int FastMA_Shift = 0;
extern int FastMA_Method = 1;
extern int FastMA_AppliedPrice = 0;
//اعدادات الموفينج البيطئ
extern string Setting_2 = "Slow Moving Average Setting"; // Slow Moving Average Setting
extern int SlowMA_Period = 30;
extern int SlowMA_Shift = 0;
extern int SlowMA_Method = 1;
extern int SlowMA_AppliedPrice = 0;
//اخذ الربح ووقف الخسارة وحجم العقد
extern string Setting_3 = "EA Management";
extern int TakeProfit = 4;
extern int Stoploss = 60;
extern double Lot = 0.01;
extern int MagicNumber = 12345; // رقم الماجيك للاكسبيرت
double T; //متغير قيمة النقطة
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double Ticksize = MarketInfo (Symbol(),MODE_TICKSIZE); //كود حساب قيمة النقطة
if(Ticksize == 0.00001 || 0.001)
T = Ticksize*10;
else
T = Ticksize;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double FastMA_1 = iMA(Symbol(), 0, FastMA_Period, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, 1); // قيمة الموفينج السريع للشمعة رقم 1
double FastMA_2 = iMA(Symbol(), 0, FastMA_Period, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, 2); // قيمة الموفينج السريع للشمعة رقم 2
double SlowMA_1 = iMA(Symbol(), 0, SlowMA_Period, SlowMA_Shift, SlowMA_Method, SlowMA_AppliedPrice, 1); // قيمة الموفينج البطيئ للشمعة رقم 1
double SlowMA_2 = iMA(Symbol(), 0, SlowMA_Period, SlowMA_Shift, SlowMA_Method, SlowMA_AppliedPrice, 2); // قيمة الموفينج البطيئ للشمعة رقم 2
if(FastMA_1>SlowMA_1 && FastMA_2<SlowMA_2) //شروط الشراء
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-(Stoploss*T),Ask+(TakeProfit*T),"Abukareem",MagicN umber,0,Blue); // امر شراء
if(FastMA_1<SlowMA_1 && FastMA_2>SlowMA_2) // شروط البيع
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+(Stoploss *T),Bid-(TakeProfit*T),"Abukareem",MagicNumber,0,Red); // امر بيع
}
//+------------------------------------------------------------------+
السلام عليكم ورحمة الله وبركاته
تحية طيبة أساتذتي الكرام
محاولات يائسة لاختصار دوال اكسبيرت كبير الحجم
نفترض لدينا 200 كائن عبارة عن خطوط أفقية: 100 خط فوق السعر باسم B1 ; B2 .... B100 و 100 خط أسفل السعر باسم S1; S2 .... S100
شرط الدخول إفتتاح الشمعة1 أسفل الخط وإغلاق الشمعة1 فوق الخط = شراء والعكس بالنسبة للبيع
الاكسبيرت سليم 100% ويفتح الصفقات لكن عند العمل على سلة العملات يحصل تهنج للمنصة وثقل للكمبيوتر... وأول حل قمت به هو تخفيض كمية هيستوري
لكن الحل الأمثل هو أن يتم اختصار الشروط الكثيرة... وحتى أيضا أتمكن من عمل التعديلات بسهولة مع سرعة المعالجة بالكمبيوتر ...
الدالة الخاصة بصفقة البيع (واختصرت فقط على 20 خط فما بالكم بـ 200 خط !!!!) كالتالي:
اختصرتها بهذا الشكل و لم يفتح صفقاتكود PHP:
void TechnicalAnalysis1()
{
double LineB1=ObjectGet("B1",OBJPROP_PRICE1);
double LineS1=ObjectGet("S1",OBJPROP_PRICE1);
double LineB2=ObjectGet("B2",OBJPROP_PRICE1);
double LineS2=ObjectGet("S2",OBJPROP_PRICE1);
double LineB3=ObjectGet("B3",OBJPROP_PRICE1);
double LineS3=ObjectGet("S3",OBJPROP_PRICE1);
double LineB4=ObjectGet("B4",OBJPROP_PRICE1);
double LineS4=ObjectGet("S4",OBJPROP_PRICE1);
double LineB5=ObjectGet("B5",OBJPROP_PRICE1);
double LineS5=ObjectGet("S5",OBJPROP_PRICE1);
double LineB6=ObjectGet("B6",OBJPROP_PRICE1);
double LineS6=ObjectGet("S6",OBJPROP_PRICE1);
double LineB7=ObjectGet("B7",OBJPROP_PRICE1);
double LineS7=ObjectGet("S7",OBJPROP_PRICE1);
double LineB8=ObjectGet("B8",OBJPROP_PRICE1);
double LineS8=ObjectGet("S8",OBJPROP_PRICE1);
double LineB9=ObjectGet("B9",OBJPROP_PRICE1);
double LineS9=ObjectGet("S9",OBJPROP_PRICE1);
double LineB10=ObjectGet("B10",OBJPROP_PRICE1);
double LineS10=ObjectGet("S10",OBJPROP_PRICE1);
double LineB11=ObjectGet("B11",OBJPROP_PRICE1);
double LineS11=ObjectGet("S11",OBJPROP_PRICE1);
double LineB12=ObjectGet("B12",OBJPROP_PRICE1);
double LineS12=ObjectGet("S12",OBJPROP_PRICE1);
double LineB13=ObjectGet("B13",OBJPROP_PRICE1);
double LineS13=ObjectGet("S13",OBJPROP_PRICE1);
double LineB14=ObjectGet("B14",OBJPROP_PRICE1);
double LineS14=ObjectGet("S14",OBJPROP_PRICE1);
double LineB15=ObjectGet("B15",OBJPROP_PRICE1);
double LineS15=ObjectGet("S15",OBJPROP_PRICE1);
double LineB16=ObjectGet("B16",OBJPROP_PRICE1);
double LineS16=ObjectGet("S16",OBJPROP_PRICE1);
double LineB17=ObjectGet("B17",OBJPROP_PRICE1);
double LineS17=ObjectGet("S17",OBJPROP_PRICE1);
double LineB18=ObjectGet("B18",OBJPROP_PRICE1);
double LineS18=ObjectGet("S18",OBJPROP_PRICE1);
double LineB19=ObjectGet("B19",OBJPROP_PRICE1);
double LineS19=ObjectGet("S19",OBJPROP_PRICE1);
double LineB20=ObjectGet("B20",OBJPROP_PRICE1);
double LineS20=ObjectGet("S20",OBJPROP_PRICE1);
if((Open[1]>LineB1&&Close[1]<LineB1)
||(Open[1]>LineS1&&Close[1]<LineS1)
||(Open[1]>LineB2&&Close[1]<LineB2)
||(Open[1]>LineS2&&Close[1]<LineS2)
||(Open[1]>LineB3&&Close[1]<LineB3)
||(Open[1]>LineS3&&Close[1]<LineS3)
||(Open[1]>LineB4&&Close[1]<LineB4)
||(Open[1]>LineS4&&Close[1]<LineS4)
||(Open[1]>LineB5&&Close[1]<LineB5)
||(Open[1]>LineS5&&Close[1]<LineS5)
||(Open[1]>LineB6&&Close[1]<LineB6)
||(Open[1]>LineS6&&Close[1]<LineS6)
||(Open[1]>LineB7&&Close[1]<LineB7)
||(Open[1]>LineS7&&Close[1]<LineS7)
||(Open[1]>LineB8&&Close[1]<LineB8)
||(Open[1]>LineS8&&Close[1]<LineS8)
||(Open[1]>LineB9&&Close[1]<LineB9)
||(Open[1]>LineS9&&Close[1]<LineS9)
||(Open[1]>LineB10&&Close[1]<LineB10)
||(Open[1]>LineS10&&Close[1]<LineS10)
||(Open[1]>LineB11&&Close[1]<LineB11)
||(Open[1]>LineS11&&Close[1]<LineS11)
||(Open[1]>LineB12&&Close[1]<LineB12)
||(Open[1]>LineS12&&Close[1]<LineS12)
||(Open[1]>LineB13&&Close[1]<LineB13)
||(Open[1]>LineS13&&Close[1]<LineS13)
||(Open[1]>LineB14&&Close[1]<LineB14)
||(Open[1]>LineS14&&Close[1]<LineS14)
||(Open[1]>LineB15&&Close[1]<LineB15)
||(Open[1]>LineS15&&Close[1]<LineS15)
||(Open[1]>LineB16&&Close[1]<LineB16)
||(Open[1]>LineS16&&Close[1]<LineS16)
||(Open[1]>LineB17&&Close[1]<LineB17)
||(Open[1]>LineS17&&Close[1]<LineS17)
||(Open[1]>LineB18&&Close[1]<LineB18)
||(Open[1]>LineS18&&Close[1]<LineS18)
||(Open[1]>LineB19&&Close[1]<LineB19)
||(Open[1]>LineS19&&Close[1]<LineS19)
||(Open[1]>LineB20&&Close[1]<LineB20)
||(Open[1]>LineS20&&Close[1]<LineS20))
{
LimitOpenOrdersB();
}
}
ثم بهذا الشكل لم يفتح صفقاتكود PHP:
void TechnicalAnalysis1()
{
for (int i=1; i>=20; i++)
{
double LineB=ObjectGet("Bi",OBJPROP_PRICE1);
double LineS=ObjectGet("Si",OBJPROP_PRICE1);
}
if((Open[1]>LineB&&Close[1]<LineB)||(Open[1]>LineS&&Close[1]<LineS))
{
LimitOpenOrdersB();
}
}
و بهذا الشكل أيضا لم يفتح صفقاتكود PHP:
void TechnicalAnalysis1()
{
for (int i=1; i>=20; i++)
{
double LineB=ObjectGet("Bi"+i,OBJPROP_PRICE1);
double LineS=ObjectGet("Si"+i,OBJPROP_PRICE1);
}
if((Open[1]>LineB&&Close[1]<LineB)||(Open[1]>LineS&&Close[1]<LineS))
{
LimitOpenOrdersB();
}
}
أرجو المساعدة بارك الله فيكم تعبت من التعديلات على 400 سطر برمجي !!!كود PHP:
void TechnicalAnalysis1()
{
for (int i=1; i>=20; i++)
{
double LineB=ObjectGet("B"+i,OBJPROP_PRICE1);
double LineS=ObjectGet("S"+i,OBJPROP_PRICE1);
}
if((Open[1]>LineB&&Close[1]<LineB)||(Open[1]>LineS&&Close[1]<LineS))
{
LimitOpenOrdersB();
}
}
وعليكم السلام ورحمة الله وبركاته
يمكنك عمل دالة تقوم بإغلاق الصفقات المفتوحه
مثال
ثم ستضيف هذا الكود عند فتح الصفقه سواء البيع أو الشراءكود PHP:
void CloseOrders(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
مثل
مرفق الإكسبرت معدلكود PHP:
if(FastMA_1>SlowMA_1 && FastMA_2<SlowMA_2)
{ //شروط الشراء
CloseOrders(OP_SELL);
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-(Stoploss*T),Ask+(TakeProfit*T),"Abukareem",MagicNumber,0,Blue); // امر شراء
}
if(FastMA_1<SlowMA_1 && FastMA_2>SlowMA_2)
{ // شروط البيع
CloseOrders(OP_BUY);
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+(Stoploss*T),Bid-(TakeProfit*T),"Abukareem",MagicNumber,0,Red); // امر بيع
}
بارك الله فيك مستر دولار وجعله الله في ميزان حسناتك
وغفر الله لك ولوالديك وجميع اهلك
السلام عليكم اعضاء ومشرفين ومبرمجين هذا المنتدى الجميل
في هذا الاكسبيرت اريد ان يكون التيك بروفت نقطة واحدة وذلك في جميع حالات تغير الاسبريد سواء بالزيادة اوالنقصان
فقمت بعمل متغير وسميتة S واضفتة للتيك بروفت في معادلة الشراء والبيع
فهل ما قمت به صح ام خطاء .بارك الله فيكم جميعا وتقبل منا ومنكم صالح الاعمالكود PHP:
//+------------------------------------------------------------------+
//| Ahmed 1.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property strict
extern string Setting_1 = "Fast Moving Average Setting";
extern int FastMA_Period = 9;
extern int FastMA_Shift = 0;
extern int FastMA_Method = 1;
extern int FastMA_AppliedPrice = 0;
extern string Setting_2 = "Slow Moving Average Setting";
extern int SlowMA_Period = 30;
extern int SlowMA_Shift = 0;
extern int SlowMA_Method = 1;
extern int SlowMA_AppliedPrice = 0;
extern string Setting_3 = "EA Management";
extern int TakeProfit = 1;
extern int Stoploss = 10;
extern double Lot = 0.01;
extern int MagicNumber = 25478;
double T;
double S;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//----Ticksize
double Ticksize = MarketInfo (Symbol(),MODE_TICKSIZE);
if(Ticksize == 0.00001 || 0.001)
T = Ticksize*10;
else
T = Ticksize;
double Spreedsize = MarketInfo (Symbol(),MODE_SPREAD);
if(Spreedsize == 0.00001 || 0.001)
S = Spreedsize*10;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double FastMA_1 = iMA(Symbol(), 0, FastMA_Period, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, 1);
double FastMA_2 = iMA(Symbol(), 0, FastMA_Period, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, 2);
double SlowMA_1 = iMA(Symbol(), 0, SlowMA_Period, SlowMA_Shift, SlowMA_Method, SlowMA_AppliedPrice, 1);
double SlowMA_2 = iMA(Symbol(), 0, SlowMA_Period, SlowMA_Shift, SlowMA_Method, SlowMA_AppliedPrice, 2);
if(FastMA_1>SlowMA_1 && FastMA_2<SlowMA_2)
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-(Stoploss*T),Ask+(TakeProfit*T)+S,"Ahmed",MagicNumber,0,Blue);
if(FastMA_1<SlowMA_1 && FastMA_2>SlowMA_2)
if(OrdersTotal() == 0)
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+(Stoploss*T),Bid-(TakeProfit*T)+S,"Ahmed",MagicNumber,0,Red);
}
//+------------------------------------------------------------------+
وعليكم السلام ورحمة الله وبركاته
آخر طريقة هي الصحيحه
لكن لديك خطأ فقط في شرط الحلقهكود PHP:
void TechnicalAnalysis1()
{
for (int i=1; i>=20; i++)
{
double LineB=ObjectGet("B"+i,OBJPROP_PRICE1);
double LineS=ObjectGet("S"+i,OBJPROP_PRICE1);
}
if((Open[1]>LineB&&Close[1]<LineB)||(Open[1]>LineS&&Close[1]<LineS))
{
LimitOpenOrdersB();
}
الصحيح المقارنه ستكون أقل من 20 وليس أكبر من 20
كود PHP:
for (int i=1; i<=20; i++)
بارك الله فيك مستر دولار . واحسن الله جوابك
بارك الله فيك أستاذي الغالي
تمت التجربة ولم يعمل وعلى الـ 3 حالات، قلت ربما المشكلة في المؤشر، فاستخدمت خط أفقي يدويا بإسم B1 في الباكتيست وتحقق الشرط ولم يفتح الصفقة وهذا دليل على أن المؤشر لا دخل له في المشكلة
فما هو الحل فضلا لا أمرا أستاذي ؟
وشكرا جزيلا :eh_s(7):
السلام عليكم أخواني الأفاضل الرجاء مساعدتي في تصحيح الخطأ الظاهر في هذا الكود وسأكون شاكر ومقدر وترى أنا جدا غشيم في البرمج فالبراحة عليا الله يحفظكم:
الملف المرفق 402207
وهذا الكود:
int start()
{
if(AccountEquity()-AccountBalance()>=AccountBalance()*0.1) CloseAllTrades();
return(0);
}
// insert the following after int start() {} section of EA code.
void CloseAllTrades() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
if (OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,GetSlippage(),clCloseBuy);
if (OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,GetSlippage(),clCloseSell);
if (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT ||
OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
OrderDelete(OrderTicket());
}
}
}
}