رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة محمد آل مسيري
سؤال برمجي آخر .. الاكسبيرت السابق الذي وضعته يضع أوامر .. وأخذ الربح فيها متغير مثلاً يمكن أن يكون 5 و 10 و 20 نقطة .. في بعض الأحيان بعض البروكرات لا يسمح لك بتعليق أوامر يكون أخذ الربح فيها 5 نقاط ، لكن حينما يكون العقد مفتوحاً وتم تنفيذه يمكنك أن تغير أخذ الربح إلى 5 نقاط .. فهل يمكننا وضع دالة بداخل Start() تقوم بفحص الأوامر المفتوحة وجعل أخذ الربح في كل عقد 5 نقاط سواء كان شراء أو بيع ؟
أو أن هناك فكرة أفضل لمعالجة هذه المشكلة ؟
تفضل هذه الطريقة لأخفاء الهدف عن البروكر فأذا وصل فرق السعر عن سعر الدخول للرقم المطلوب سيغلق الصفقة وهذه مقتبسة من استاذي الفاضل اسامة تضع الدالة خارج ستارت .
كود PHP:
int CloseBuyOrdersHiddenTP()
{
int total=OrdersTotal();
for (int cnt=total;cnt>=0;cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY&&Bid>(OrderOpenPrice()+TakeProfit*PipValue*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
return(0);
}
ثم تضع الشرط في ستارت
كود PHP:
if(HideTP&&TakeProfit>0){CloseBuyOrdersHiddenTP();CloseSellOrdersHiddenTP();}
وتضع هذا المتغير في بداية الأكسبيرت مع المتغيرات
كود PHP:
extern bool HideTP=true;
extern int TakeProfit=5;
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة so3ode33
ولو كان هناك طريقه بأن يكون الاكسبيرت مفتوح وقابل للتعديل في اي وقت
يمكن أن تقوم بإضافة شروط في الإكسبرت بحيث إذا كان التاريخ مثلا أكبر من 2013 يتوقف عن العمل مثل
كود PHP:
if(TimeCurrent()>=StrToTime("2013.01.20 00:00"))
{
Print("Time End");
return(0);
}
طبعا طريقة وضع الكود نفسه ستختلف سواء تريد حمايته بطريقه معينه بحيث لا يمكن تعديل القيمه أو ستجعل القيمه في متغير .. إلخ
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
يمكن أن تقوم بإضافة شروط في الإكسبرت بحيث إذا كان التاريخ مثلا أكبر من 2013 يتوقف عن العمل مثل
كود PHP:
if(TimeCurrent()>=StrToTime("2013.01.20 00:00"))
{
Print("Time End");
return(0);
}
طبعا طريقة وضع الكود نفسه ستختلف سواء تريد حمايته بطريقه معينه بحيث لا يمكن تعديل القيمه أو ستجعل القيمه في متغير .. إلخ
بارك الله فيك أستاذنا الفاضل على هذه المعلومة القيمة
هل هذا الكود ينفع في إخفاء الاكسبيرت عن البروكر أم ماذا؟
كود:
int init()
{
NDigits = Digits;
string comment=DoubleToStr(MathRand(),0);
}
وما هي أنسب طريقة لاخفاء الاكسبيرت عن البروكر؟
عيد مبارك سعيد
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة محمد آل مسيري
الأخوة الأعزاء MR.dollar ، Jmeel .. اعتذر اذا أكثرت من الأسئلة واطمع مجدداً في كرمكم
في الاكسبيرت السابق استطعت بنجاح تنفيذ صفقات بأنواع مختلفة تحت شروط معينة ( زمن ، يوم ، ساعة ) وبهدف وستوب ثابتين
لو قام الاكسبيرت بفتح عدد من الصفقات مثلاً 6 صفقات ( وهنا كلها سوف تفتح بنفس الهدف والستوب الأساسي في الاكسبيرت مثلاً 50 نقطة هدف و50 نقطة ستوب وبالطبع الصفقات مختلفة في الوقت والسعر والزمن )
هل استطيع كتابة دالة .. تعطيني الصفقات المفتوحة والتي وصلت الخسارة فيها لعدد معين من النقاط يتم تحديده في الإكسبيرت بحيث يقوم الاكسبيرت بفتح صفقة تبريد ( في نفس الاتجاه للصفقة السابقة اذا كانت شراء فالجديدة شراء )ولكن بهدف وستوب جديدين ؟
شكراً مرة أخرى لكما .
اهلا بك ، الطرق متعددة وكل مبرمج ينفذها بطريقة تناسبة وهذه ابسطها وأوضحها ، في البداية ستحتاج دالة لتعرف قيمة افتتاح الصفقة الأخيرة :
كود PHP:
double LastOrderOpen(int type){
for(int i=OrdersTotal()-1; i>=0; i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&type==OrderType()){
return(OrderOpenPrice());
}
}
return(0);
}
ثم ستضع الشرط في قائمة ستارت
كود PHP:
if(Ask+(Cooling_Step*Pips*Point) <= LastOrderOpen(OP_BUY)) {Buy_Cooling();}
Buy_Cooling هذه دالة شراء وتستطيع استخدام دالة الشراء لديك مع تغيير الأسم .
وستضع المسافة التي تريدها بين العقود في بداية الأكسبيرت مع المتغيرات
طبعا المثال لحال الشراء وقس عليها حالة البيع .