تستخدم للتأكد من قبول أوردر الأكسبيرت على السيرفر فأذا كان السيرفر مشغول سيرجع فالس وأذا تقبل الأوردر بيرجع ب ثرو وتستخدم كشرط قبل الأوردر بهذه الطريقة
كود PHP:if(IsTradeAllowed()) // Buy
Printable View
يمكنك إستخدام while
مثال
لكن أنصحك بوضع توقيت Sleep بين كل محاوله وأخرى يتوقف الإكسبرت قليلا وأيضا تضع حد معين لعدد المحاولات مثلا 20 محاوله حتى لا يدخل الإكسبرت في حلقه غير منتهيه إذا لم يستطع فتح الصفقهكود PHP:int ticket;
while(ticket<0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"EA",Magic,0,Red);
}
كود PHP:int ticket;
int Tries;
while(ticket<0&&Tries<20)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"EA",Magic,0,Red);
Sleep(100);
Tries++;
}
يمكنك عمل دالة لمعرفة توقيت فتح آخر صفقه
مثال
ثم ستضع الشرطكود PHP:datetime LastOrderTime()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderOpenTime());
}
}
return(0);
}
كود PHP:if(TimeCurrent()-LastOrderTime()>=2)
{
// open
}
اخ اسامه اذا السعر عند 1.500 وصعد الى 1.600 يعني 100 نقطه اريد معرفه اذا في هذا الفتره عدل مثلا 50 نقطه او لا
انا لا اتكلم عن قمه اي انه ممكن من عند 1.600 يواصل مسيره الى 1.700 يعني ليس مهم اذا كانت 1.600 قمه او لا
كل 100 نقطه يفحص اذا السعر عدل 50 نقطه او لا هل يمكن برمجه شيئ كهذا ولك جزيل الشكر
مثلا لو حقق ال 100 نقطه في خلال 10 شمعات
سوف تبحث من هاي كل شمعه مثلا من الشمعه رقم 8 إلى لو الشموع التي تليها ( 7 - 6 - 5 - .... ) وتحسب الفرق بين هذا الهاي وأقل لو في الشموع التاليه وترى هل هبط السعر 50 نقطه أم لا
حتى تحسب الحركه بدقة أكبر يمكن أن تستخدم فريم الدقيقه في البحث
السلام عليكمكود PHP:#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
//--- plot Spread
#property indicator_label1 "Spread"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- indicator buffers
double SpreadBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,SpreadBuffer);
//---
string x = "MY First Indicator is running!!";
int countedBars = IndicatorCounted();
if (countedBars<0) return(-1);
if (countedBars>0) countedBars--;
int pos = Bars - countedBars;
while(pos>=0)
{
SpreadBuffer[pos]= High[pos]-Low[pos] ;
pos--;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
}
//+------------------------------------------------------------------+
انا جديد في تعلم هده اللغة و لكن عندي معرفة بلغات البرمجة JAVA, C
حملت دروس coders_guru وعند كتابة اول كود لم يشتغل المؤشر و السبب هو debug في هدا السطر
SpreadBuffer[pos]= High[pos]-Low[pos] ;
المرجو المساعدة و ان امكن موضوع فيه شرح للتحديتات الجديدة في لغة MQL4 build 600 بالاخص الوظائف
OnInit() OnCalculate() OnTimer() OnChartEvent()
جازكم الله خيرا
نسيت المؤشر يقوم بحساب الفرق بين الهاي و اللو
عند حساب قيم المؤشر تضعها بداخل الداله OnCalculate
ثانيا بما أن عدد الشموع على الشارت تبدأ من 0 حتى عدد الشموع -1 فالمفروض أنك ستجعل الكود
قم بتعديل الكود وسوف تختفي هذه المشكلهكود PHP:int pos = Bars - countedBars-1;
وراجع هذا الموضوع
https://forum.arabictrader.com/t191447.html
السلام عليكم ورحمة الله وبركاته
إخوتى المبرمجين كنت عايزمن حضراتكم فضلا وليس أمرا:
1-كود تعديل بروفيت صفقات الشراء لبروفيت أخر صفقة تعزيز شراء وكذلك للبيع ,
2-وكود أخر أيضا عند تفعل أوردر معلق معين يقوم بوضع أوردر معلق بمواصفات أخرى يعنى مثلا لو هناك أوردر 0.07 buy stop وتفعل هذا الأوردر يقوم بوضع أوردر معلق مثلا 0.24 sell stop
أخى مستر دولار كنت طلبت من سيادتكم إكسيبرت يقوم على أساس الكود الأول ولكنه يلزمه أن أكون فاتح شارت العملة التى يعمل عليها , فكيف ذلك وأن أضعه على أربع عملات كيف أفتحهم جميعا فى أن واحد أتمنى أن يكون الكود الذى طلبته لا يتطلب هذا الأمر لأنى أعمل على أكثر من عملة وأضطر إلى تغيير البروفيت يدويا
وجزاكم الله خيرا
أستاد MR.dollar عندي مشكلة في هدا السكربت
إدا إعتبرنا النقطة 1,3000 نقطت شراء . فهية في نفس الوقت نقطت وقف الخسار في صفقت SELL دخلت في النقطة 1,2980 .
المشكلة هنا عندما تغلق صفقت SELL و تفتح صفقت شراء في نفس النقطة فإن حجم LOTS يتضاعف حسب النقط 1,2980.ولا يتضاعف حسب النقطة 1,3000.
ولحل هده المشكلة فكرة في إنشاء دالة .حيت لا تفتح أيت صفقة إلى بعد مرور ثانية أو تانيتين من الصفقة المغلقة .
هل يمكنك أن تبرمج لي هاده الدلة في هدا السكربت من فضلك.
وإدا كان لديك حل أخر لأهده المشكلة أفضل من هدا الحل المرجو أن تخبرني به .
وشكرا لك وللمنتدي .
أستاد ماستر إن هده الدالة لم تغير أي شيئ في السكربت . ربما يجب تعديل هدا الشرط
if(TimeCurrent()-LastOrderTime()>=2) إلى هدا الشرط
if(TimeCurrent()-LastOrderTime()>=2second) حتى يعرف السكريبت أنها توقيت وليست نقاط