جزاك الله كل خير استاذ جرير
و بارك الله لك فى ذوريتك و مالك
و تسلم الايادى
:015::015::015:
Printable View
بسم الله
سناخذ اليوم اكسبريت نستطيع من خلاله عمل مئات الأكسبيرتات بادنى مجهود الكود هو
كود PHP:
//+------------------------------------------------------------------+
//| Amro high low.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int Step=20;
extern int Takeprofit=50;
extern int Stoploss=50;
extern double Lots=1;
int Magicnumber=234561;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Hour()==0 && Minute()<5 && MyOrdersTotal(Magicnumber)>0)
{
DeletePendingOrders(Magicnumber);
CloseOrders(Magicnumber);
}
if(Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
double Dayhigh=iHigh(Symbol(),PERIOD_D1,1);
double Daylow=iLow(Symbol(),PERIOD_D1,1);
double BuyPrice=Dayhigh+Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=Daylow-Step*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Red);
}
return(0);
}
int MyOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt >= 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
{
OrderDelete(OrderTicket());
}
}
return(0);
}
int CloseOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt >= 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
هذا الكود هو عبارة عن اكسبيرت يضع اوامر معلقة (شراء وقف وبيع وقف ) فوق الهاى لشمعة الدايلى وتحت اللو لشمعة الدايلى بعدد step من النقاط . وعند تفعيل امر يقوم بالغاء الأمر المعاكس . واذا لم ينفذا الأثنان فيقوم الأكسبيرت بحذفهما فى بداية اليوم التالى واعطاء اوامر جديدة
اما عن الكود المسئول عن تعرف الأكسبيرت بهاى ولو شمعة الدايلى وعملية الشراء والبيع هو
هذا هو اكثر كود سيكون العمل عليه واسهل كود يمكن العمل عليه وسنشرح بعضا منه بشىء من الأيجازكود PHP:
double Dayhigh=iHigh(Symbol(),PERIOD_D1,1);
double Daylow=iLow(Symbol(),PERIOD_D1,1);
double BuyPrice=Dayhigh+Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=Daylow-Step*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Red);
عرفنا الأكسبيرت اننا سوف نستخدم هاى ولو الشمعة السابقة . ولكننا نريد ان نضيف فوق الهاى عددا من النقاطكود PHP:
double Dayhigh=iHigh(Symbol(),PERIOD_D1,1);
double Daylow=iLow(Symbol(),PERIOD_D1,1);
اضفنا للهاى عدد step من النقاط . ولكن ماهى ستيب .. هية عدد النقاط الموجود بالباراميتر والذى يمكننا تغييره فى اى وقت نريدهكود PHP:
double BuyPrice=Dayhigh+Step*Point;
ونريد ان نعمل تيك بروفيت ونضعه بالباراميتر ..وبما اننا اشترينا فسوف يكون الربح اعلى من سعر الشراء اى سيكون تيك بروفيت للشراء = سعر الشراء + عدد نقاط التيك بروفيت اى :كود PHP:
extern int Step=20;
ونضعه بالباراميتر لكى يمكننا التحكم بالتيك بروفيت ليكونكود PHP:
double BuyTP=BuyPrice+Takeprofit*Point;
وهكذا بالنسبة للستوب لوز فنقوم بطرحه من سعر الشراء ووضعه بالباراميتركود PHP:
extern int Takeprofit=50;
الآن وبعد ان فهمنا ...نريد اكسبيرت يعمل امر سيل ستوب وامر باى ستوب على بعد 50 نقطة من الأغلاق اليومى :
سيكون كالتالى :
انزع الكود الأصلى من الأكسبيرت وضع هذا مكانه ليصبح عندك الآن اكسبيرت يقوم بفتح صفقات معلقة بعدد step من النقاطكود PHP:
double Dayclose=iClose(Symbol(),PERIOD_D1,1);
double BuyPrice=Dayclose+Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=Dayclose-Step*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
ماذا لو اردت ان اضع امر البيع على بعد 100 نقطة وامر الشراء على بعد 50 نقطة من سعر الأغلاق اليومى :
اذن ساضع step1 للشراء و step2 2 للبيع ليكون الكود
ونلغى step من الباراميتر ونضع كل من step1 & step2 لتكونكود PHP:
double Dayclose=iClose(Symbol(),PERIOD_D1,1);
double BuyPrice=Dayclose+Step1*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=Dayclose-Step2*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
الآن عايزين نعمل اكسبيرت يعتمد على خطى البايفوت S3 & R3كود PHP:
extern int Step1=50;
extern int Step2=100;
يقوم بوضع اوامر وقف معلقة عند الخطين . فسيكون الكود كالتالى :
ننزع هذا الكود ونحله ببديله فى الأكسبيرت ..ليصبح عندى الآن اكسبيرت بايفوت :eh_s(7):كود PHP:
double DayClose=iClose(Symbol(),PERIOD_D1,1);
double Dayhigh=iHigh(Symbol(), PERIOD_D1, 1);
double Daylow=iLow(Symbol(), PERIOD_D1, 1);
double pivot=NormalizeDouble((Dayhigh + Daylow + DayClose) / 3.0, Digits);
double R3=Dayhigh+2.0*(pivot-Daylow);
double S3=Daylow-2.0*(Dayhigh-pivot);
double BuyPrice=R3;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=S3;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
طب عايزين نبيع من عند خط البايفوت العلوى ونشترى من السفلى ..يبقى هنعمل سيل ليميت وباى ليميت وتكون كالآت :
واتمنى ان يكون الأمر سهلا ..كود PHP:
double DayClose=iClose(Symbol(),PERIOD_D1,1);
double Dayhigh=iHigh(Symbol(), PERIOD_D1, 1);
double Daylow=iLow(Symbol(), PERIOD_D1, 1);
double pivot=NormalizeDouble((Dayhigh + Daylow + DayClose) / 3.0, Digits);
double R3=Dayhigh+2.0*(pivot-Daylow);
double S3=Daylow-2.0*(Dayhigh-pivot);
double BuyPrice=S3;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=R3;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
OrderSend(Symbol(),OP_BUYLIMIT,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Green);