رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
تمام
طيب خلينا في الطريقة السهلة لو اكتب set 1 و set 2 و set3 ازاي لو كنت مش هستدعيهم وهخليهم في كود الاكسبرت مباشرة
مثال لو عندي ثلاث متغيرات خارجيه للإكسبرت
كود PHP:
extern int Period1=14;
extern int Period2=8;
extern int Period3=6;
بداخل الداله start في أول الكود ستكون الشروط
كود PHP:
if(DayOfWeek()==1||DayOfWeek()==2)
{
Period1=8;
Period2=3;
Period3=5;
}
else if(DayOfWeek()==3||DayOfWeek()==4)
{
Period1=21;
Period2=1;
Period3=17;
}
else
{
Period1=14;
Period2=8;
Period3=6;
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة fxsmartsniper
شكرا اخي اسامة بارك الله فيك جاري التجربة
سوال صغير كمان ممكن الاكسبرت دا يقرا مواعيد الاخبار الهامة فقط لليورو والدولار والاسترليني فقط ويعرف مواعيدها بالايام بحيث اليوم الي فيه اخبار مرتفعة الخطورة او الاهمية(المحتمل عمل رالي بها) يعمل علي set1 الايام العادية يعمل علي set2 والله انا متشكر جدا لك استاذنا اسامة
مثال هذه دالة تقوم بإستدعاء الأخبار وتستخدم مؤشر الأخبار FFCal الشهير
كود PHP:
bool NewsFilterCheck()
{
if(!IsTesting())
{
int minutesUntilNextEvent=iCustom(NULL,0,"FFCal news indicatore",true,true,false,true,true,1,1);
int minutesSincePrecEvent=iCustom(NULL,0,"FFCal news indicatore",true,true,false,true,true,1,0);
int impactOfPrecEvent=iCustom(NULL,0,"FFCal news indicatore",true,true,false,true,true,2,0);
datetime dTime=minutesUntilNextEvent*60;
string sTime=TimeToStr(dTime,TIME_MINUTES);
string sText;
bool TradeAllowed=true;
if((minutesUntilNextEvent>MinsBeforeNews&&(impactOfPrecEvent<3||(impactOfPrecEvent>=3&&minutesSincePrecEvent>MinsAfterNews))&&HighNewsImpact==true)||
(minutesUntilNextEvent>MinsBeforeNews&&(impactOfPrecEvent<2||(impactOfPrecEvent>=2&&minutesSincePrecEvent>MinsAfterNews))&&MediumNewsImpact==true))
{
sText=StringConcatenate("No News within the next ",sTime);
}
else
{
int impactOfNextEvent=iCustom(NULL,0,"FFCal news indicatore",true,true,false,true,true,2,1);
string sImpact=Num2Impact(impactOfNextEvent);
if(StringLen(sImpact)>0)sImpact="["+sImpact+"] ";
sText=sImpact+"News in "+sTime;
if((impactOfNextEvent>=3&&HighNewsImpact==true)||(impactOfNextEvent>=2&&MediumNewsImpact==true))
{
TradeAllowed=false;
if(CloseProfitableTrades && OrdersTotal()>0)CloseProfitableTradesBeforeNews();
}
}
return(TradeAllowed);
}
}
وسوف تكون المتغيرات الخارجيه لتحديد وقت توقف الإكسبرت عن العمل
كود PHP:
extern bool UseNewsFilter=true;
extern int MinsBeforeNews=60;
extern int MinsAfterNews=60;
extern bool HighNewsImpact=true;
extern bool MediumNewsImpact=false;
ثم ستكون شروط العمل على الإعدادات المعينه
مثال على نفس المشاركه السابقه
كود PHP:
if(!NewsFilterCheck())
{
Period1=8;
Period2=3;
Period3=5;
}
else
{
Period1=21;
Period2=1;
Period3=17;
}
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله
كنت باشتغل في اكسبيرت مطلوب فيه البيع تحت سعر اففتاح الشمعة والشراء فوق الأفتتاح بعدد من النقاط وهذا لامشكلة فيه لكن واجهت مشكلتين ، الأولى كيف ينفذ عقد شراء واحد في كل مرة يمر فيها بنقطة الشراء خلال الشمعة الواحدة فقد يمر على النقطة مرة واحدة وربما اكثر من مرة في شمعة الفريم الكبير ، ماحصل معي اما ان يفتح عشرات العقود بملامسة النقطة أو اني احدد عقد واحد بأستخدام دالة وكل الحالتين لاتحقق المطلوب .
المشكلة الثانية مطلوب ان يعمل مضاعفات لكن في تفس عقود الشمعة فقط لكن مع افتتاح الشمعة الجديدة يبتدي باللوت الأساسي ولايبني مضاعفات على عقود شمعة سابقة .
هذا الكود المستخدم في شرط الشراء وهو سليم يحقق الدخول الصحيح في الصفقة
كود PHP:
void BuyTechnical()
{
aOpen = iOpen(0,0,0);
if(Ask==aOpen+Buy_Step*PipValue*Point)
{
Go BUY
}
}
وهذا شرط المضاعفات وفيه الخطاء
كود PHP:
if (orderscnt() && OrderLots()>0 )CurrentLotss = OrderLots();
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة mostafa400
هو رقم الصفقة
مثلا لدينا 6 صفقات مفتوحة الصفقة الأولى كانت 2 لوت وتم غلق جزء منها 1 لوت فأصبحت هى آخر صفقة بعد ان أخذت رقم تكت جديد وحدث نفس الشئ مع الصفقة الثانية فيتعامل معهم الإكسيبرت على انهم آخر الصفقات التى تم فتحها وليست أولها - انا اريد اذا كتبت مكان y رقم 2 يتعامل مع الصفقة الثانية الفعلية التى تم غلق جزء منها ولذلك فكرت فى التعامل مع وقت فتح الصفقة .
قمت بعمل دالة تقوم بحذف توقيت فتح جميع الصفقات في مصفوفه وتقوم بترتيبهم من الأصغر إلى الأكبر
كود PHP:
datetime Order_Time(int num)
{
int Number;
int temp;
datetime TimeArray[];
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
datetime time=OrderOpenTime();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
ArrayResize(TimeArray,Number+1);
TimeArray[Number]=time;
Number++;
for(int i=0;i<Number;i++)
{
for(int j=0;j<Number;j++)
{
if(TimeArray[i]<TimeArray[j])
{
temp=TimeArray[j];
TimeArray[j]=TimeArray[i];
TimeArray[i]=temp;
}
}
}
}
}
return(timeArray[num]);
}
الآن لإختيار توقيت إفتتاح أصغر صفقه ستكون
وثاني صفقه
وهكذا
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
السلام عليكم ورحمة الله
كنت باشتغل في اكسبيرت مطلوب فيه البيع تحت سعر اففتاح الشمعة والشراء فوق الأفتتاح بعدد من النقاط وهذا لامشكلة فيه لكن واجهت مشكلتين ، الأولى كيف ينفذ عقد شراء واحد في كل مرة يمر فيها بنقطة الشراء خلال الشمعة الواحدة فقد يمر على النقطة مرة واحدة وربما اكثر من مرة في شمعة الفريم الكبير ، ماحصل معي اما ان يفتح عشرات العقود بملامسة النقطة أو اني احدد عقد واحد بأستخدام دالة وكل الحالتين لاتحقق المطلوب .
المشكلة الثانية مطلوب ان يعمل مضاعفات لكن في تفس عقود الشمعة فقط لكن مع افتتاح الشمعة الجديدة يبتدي باللوت الأساسي ولايبني مضاعفات على عقود شمعة سابقة .
هذا الكود المستخدم في شرط الشراء وهو سليم يحقق الدخول الصحيح في الصفقة
كود PHP:
void BuyTechnical()
{
aOpen = iOpen(0,0,0);
if(Ask==aOpen+Buy_Step*PipValue*Point)
{
Go BUY
}
}
وهذا شرط المضاعفات وفيه الخطاء
كود PHP:
if (orderscnt() && OrderLots()>0 )CurrentLotss = OrderLots();
وعليكم السلام ورحمة الله وبركاته
بالنسبه للجزء الأول تريد أن يكون العقد الأساسي للشروط مره واحده
قم بعمل دالة لحساب عدد الصفقات المفتوحه لكن بشروط معينه
أن يكون توقيت إفتتاح الصفقه أكبر من أو يساوي توقيت إفتتاح الشمعه
قم بتسمية الكومنت للصفقات الأساسيه بإسم توقيت إفتتاح الشمعه
مثال
كود PHP:
int MainOrdersNum(datetime time)
{
int Num;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderComment()=="MainOrder")
{
Num++;
}
}
return(Num);
}
وسوف يكون الشرط
كود PHP:
void BuyTechnical()
{
aOpen = iOpen(0,0,0);
double time=Time[0];
if(Ask==aOpen+Buy_Step*PipValue*Point&&MainOrders(time)<1)
{
Go BUY
}
}
ثم سيكون تحديد حجم لوت المضاعفات تقوم بعمل دالة أيضا تبحث عن حجم آخر لوت لكن بنفس كومنت إفتتاح الشمعه الحاليه
كود PHP:
double LastOrderLot()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderComment()==DoubleToStr(time,0))
{
return(OrderLots());
}
}
return(0);
}
فإذا كان قيمة الداله 0 هذا يعني أن شمعة جديده تكونت ولم تفتح الصفقه الأساسيه لها بعد بالتالي لن يعمل بالمضاعفات
طبعا لا تنسى ان تجعل كومنت الصفقات التي تفتحها تضع توقيت إفتتاح الشمعه في الكومنت
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
أستاذي الفاضل أضفت الدوال والشروط لكن اعطاني رسائل خطاء لبعض المتغيرات فأرفقت لك الأكسبيرت برجاء التعديل فيه حتى يكون مرجع تعليمي لي جزاك الله خير .
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
أستاذي الفاضل أضفت الدوال والشروط لكن اعطاني رسائل خطاء لبعض المتغيرات فأرفقت لك الأكسبيرت برجاء التعديل فيه حتى يكون مرجع تعليمي لي جزاك الله خير .
مرفق الإكسبرت بعد تعديله
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم
ما هو الكود المستخدم لكي اعمل
خطوط على اماكن معينة في الشارت
مثلا خط على عرض 7 شمعان في الاعلى
او خط في اسفل 5 شمعات
انا احتاج الكود فقط ؟؟؟
وشكرا جزيلا
مرفق صورة للطلب