النتائج 31 إلى 45 من 175
الموضوع: دورة صناعة الاكسبيرتات
- 21-03-2008, 08:19 PM #31
رد: دورة صناعة الاكسبيرتات
المتحولات العامة Global Variable
تحتوي لغة الميتاتريدر على تقنية تسمى Global Variable
يستطيع المبرمج من خلالها تخزين واسترجاع المعلومات ومشاركتها بين جميع المؤشرات أو الاكسبيرتات أو حتى
المستخدم نفسه .
يمكنك يدويا أو برمجيا إنشاء متحول عام وإسناد قيمة ما له .
يمكنك تغيير هذه القيمة في أي وقت تريد يدويا أو برمجيا .
هذه المتحولات يمكن قراءة قيمها من أي مؤشر أو اكسبيرت آخر .
بهذه الطريقة يمكن تبادل المعلومات بين مجموعة من المؤشرات أو الاكسبيرتات .
يمكن مثلا برمجة مؤشر يقوم بحسابات معقدة ثم يعطي اشارة بيع أو شراء ويخزنها داخل متحول عام .
ثم هناك اكسبيرت يفحص هذا المتحول الذي يعرف اسمه ويرى ما هي الإشارة الأخيرة هل هي بيع أم شراء ليقوم بتنفيذ صفقة حقيقية .
هذا مثال بسيط لما يمكن عمله بواسطة هذه التقنية الرائعة .
العمل اليدوي على المتحولات العامة هو عن طريق برنامج الميتاتريدر نفسه .
من القائمة Tools اختر Global Variable أو اضغط F3 مباشرة .
ستظهر لك نافذة المتحولات العامة لتظهر لك المتحولات الحالية مع قيمها .
يمكنك إضافة متحول جديد أو حذف متحول موجود أو تغيير قيمته كما تريد .
العمل مع المتحولات العامة من خلال البرمجة :
تحتوي لغة MQL4 على كافة الوظائف المناسبة للعمل مع هذه المتحولات .
وهذه الوظائف هي :
كود PHP:bool GlobalVariableCheck( string name)
تقوم بفحص هل يوجد متحول عام له الاسم المحدد ..
تعيد هذه الوظيفة القيمة true في حال وجدت المتحول والقيمة false في حال لم يكن المتحول موجودا .
كود PHP:bool GlobalVariableDel( string name)
تقوم بحذف المتحول ذو الاسم المحدد وتعيد القيمة true في حال نجحت في عملية الحذف والقيمة false في حال لم تنجح لأي سبب من الأسباب .
كود PHP:double GlobalVariableGet( string name)
تقوم بقراءة قيمة المتحول ذو الاسم المحدد .
كود PHP:datetime GlobalVariableSet( string name, double value)
تقوم بوضع قيمة رقمية في المتحول ذو الاسم المحدد وتعيد زمن آخر قراءة تمت على هذا المتحول .
أو تعيد القيمة صفر إذا كانت هذه أول مرة يتم تخزين قيمة في هذا المتحول .
كود PHP:int GlobalVariablesDeleteAll( string prefix_name=NULL)
تعيد هذه الوظيفة عدد المتحولات التي قامت بحذفها .
كود PHP:int GlobalVariablesTotal( )
كود PHP:string GlobalVariableName( int index)
تقوم بإعادة اسم المتحول من خلال رقمه الذي يبدأ من الصفر حتى آخر متحول .
أمثلة :
كود PHP:// check variable before use
if(!GlobalVariableCheck("g1"))
GlobalVariableSet("g1",1);
يقوم هذا المثال بفحص هل يوجد متحول اسمه g1 .
في حال لم يجد هذا المتحول فإنه ينشئه ويضع فيه القيمة 1 .
كود PHP:GlobalVariableDel("gvar_1");
يقوم هذا المثال بحذف المتحول ذو الاسم gvar_1 .
كود PHP:double v1=GlobalVariableGet("g1");
يقوم هذا المثال بقراءة قيمة المتحول g1 وتخزينه في المتحول v1 .
كود PHP:int var_total=GlobalVariablesTotal();
string name;
for(int i=0;i<var_total;i++)
{
name=GlobalVariableName(i);
Print(i,": Global variable name - ",name);
}
يقوم هذا المثال بقراءة وطباعة أسماء جميع المتحولات المتوفرة حاليا
فقط أسمائها وليس قيمها .
- 22-03-2008, 01:32 AM #32
رد: دورة صناعة الاكسبيرتات
جزاك الله كل خير
- 23-03-2008, 08:05 PM #33
رد: دورة صناعة الاكسبيرتات
جزاك الله خير
وبارك الله في عملك
- 05-04-2008, 11:38 PM #34
رد: دورة صناعة الاكسبيرتات
طولت الغيبة يا مهندس وضاح
- 03-05-2008, 04:56 AM #35
رد: دورة صناعة الاكسبيرتات
اخى الحبيب وضاح
السلام عليكم
بدايه اشكرك على هذا المجهود الرائع فى الشرح ومحاوله لإفادة الأخوه والأخوات , وبكل تأكيد نترك جزائك عند المولى عز وجل فهو القادر على مكافأتك نظرا لما تبذله من جهد ثقيل فى الشرح وانا اعلم معنى شرح البرمجه
اخى الحبيب لقد قمت بتنفيذ الأوامر فى الأكسبيرت الأول الذى قمت بشرحه واللذى يعمل على وضع ارودرات معلقه على بعد معين عند اغلاق شمعه الديلى
ولقد قمت ببعض التعديلات عليه - وذلك من خلال تعلمى لشرحك الوافر ما شاء الله - لأجعله يضع أوردرات الشراء فوق الهاى لليوم السابق واوردرات البيع فوق اللو لليوم السابق ولكن ...
تظل الأوردرات المعلقه مفتوحه ويعجز الأكسبيرت عن تنفيذ اى ارودرات اخرى لحين اغلاق المعلق
وها هو الكود فأرجوا ان تقول لى ما هو الخطأ كى اتفاداه ولك جزيل الشكر
بارك الله فيك
الكود
كود PHP: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);
}
- 03-05-2008, 11:54 AM #36
رد: دورة صناعة الاكسبيرتات
اخي الكريم
بعد اذن المهندس وضاح
بعد نظرة سريعة على الكود ، هناك خطأ في دالة DeletePendingOrders
حيث يجب عليك تغيير
كود PHP:if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
كود PHP:if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUYSTOP || OrderType()!=OP_SELLSTOP))
- 03-05-2008, 03:46 PM #37
رد: دورة صناعة الاكسبيرتات
أهلا بك أخي عمرو
استبدل الوظيفة التالية بمثيلتها في الكود عندك :
كود PHP:int DeletePendingOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt > 0 ; cnt--)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
{
OrderDelete(OrderTicket());
RefreshRates();
Sleep(100);
}
}
return(0);
}
أخي وجدي شكرا لك
لكنك لم تنتبه لإشارة لا يساوي != في الوظيفة
لذلك الوظيفة برمجيا صحيحة ولكن أحيانا لبطيء السيرفر والتنفيذ لا يتم تنفيذ الوظيفة بشكل صحيح .
- 03-05-2008, 04:28 PM #38
رد: دورة صناعة الاكسبيرتات
شكرا لك اخ وجدى على اهتمامك وزوقك وحبك لأخوتك
لكن مازال الموضوع كما هو
كود PHP:[center]{
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(0,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
{
OrderDelete(OrderTicket());
RefreshRates();
Sleep(100);
}
}
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);
} <div style="text-align: center;"><font size="5"><font color="blue">الأخ الحبيب <font color="sienna">وضاح</font></font></font>
<div style="text-align: center;"><font size="5"><font color="blue">جزاك الله كل الخير على اهتمامك</font></font>
<font size="5"><font color="blue">قمت بتغيير الكود ولكن <font color="sienna">الأمر كما هو</font> ومرفق لك الكود مرة اخرى </font></font></div>
<div style="text-align: center;"><div class="bbcode_container">
<div class="bbcode_description">كود PHP:</div>
<div class="bbcode_code" style="height:36px;"><code><code><span style="color: #000000">
<span style="color: #0000BB">int start</span><span style="color: #007700">() </span><span style="color: #0000BB"></span>
</span>
</code></code></div>
</div></div></div>
- 03-05-2008, 07:05 PM #39
رد: دورة صناعة الاكسبيرتات
بعد التدقيق في الكود وجدت الخطأ
هذا هو الكود الصحيح
كود 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);
}
//+------------------------------------------------------------------+
- 04-05-2008, 01:11 AM #40
رد: دورة صناعة الاكسبيرتات
شكرا اخى وضاح وجزاك الله كل الخير
تمام الكود شغال
بإذن الله هعمل بعض التجارب عليه واوافيك بالأخبار لعل يكون فيه الخير الكثير للأخوه بأمر الله
بارك الله فيك
- 05-05-2008, 10:52 AM #41
رد: دورة صناعة الاكسبيرتات
جزاك الله عنا كل خير اخوي وضاح
و احنا معاك
- 09-05-2008, 05:07 PM #42
رد: دورة صناعة الاكسبيرتات
شكرا
- 25-05-2008, 06:01 PM #43
رد: دورة صناعة الاكسبيرتات
جزاك الله خير
وبارك الله فيك
واصلح لك النية والذرية
- 26-05-2008, 12:22 AM #44
رد: دورة صناعة الاكسبيرتات
بارك الله فيك اخي الكريم
شرح اكثر من رائع
- 26-05-2008, 09:08 PM #45
رد: دورة صناعة الاكسبيرتات
فيما يلي بعض الوظائف الهامة التي أستخدمها بكثرة في الاكسبيرتات التي أصنعها
وأعتقد أنها سوف تنفعكم أيضا
هذه الوظائف سهلة الاستخدام ومفهومة جدا وكلها تعتمد على مدخل واحد هو الرقم السحري المميز للصفقات ...
الوظيفة الأولى :
MyRealOrdersTotal
تقوم بإعادة عدد الصفقات الحقيقية المفتوحة من قبل الاكسبيرت سواء كانت بيع أو شراء :
كود PHP:int MyRealOrdersTotal(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() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c++;
}
}
return(c);
}
المواضيع المتشابهه
-
طلب صناعة إكسبرت RSI
By FOREX_WAR in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 22آخر مشاركة: 29-04-2017, 10:58 PM -
طلب = صناعة سكربت
By cobra100 in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 6آخر مشاركة: 28-10-2008, 02:41 PM -
طريقة صناعة الاكسبيرتات الاليه
By ماجد كو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 24آخر مشاركة: 05-05-2008, 03:02 PM