1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
إذا إستخدمت
كود PHP:
for(int i=OrdersHistoryTotal();i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);
فأنت تبحث في الهيستوري
لكن إذ إستخدمت
كود PHP:
for(int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
فأنت تبحث في الصفقات المفتوحه
أقل نقطة وصل لها السعر بعد فتح الصفقه سوف تحتاج إلى معرفة توقيت فتح آخر صفقه ومنها تحسب أقل لو وصلها لها
كود PHP:
datetime lasttime()
{
for(int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
datetime time=OrderOpenTime();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
return(time);
}
}
return(0);
}
ثم سيكون أقل لو
كود PHP:
int barshift=iBarShift(Symbol(),0,lasttime(),false)
double min_price=Low[iLowest(Symbol(),0,MODE_LOW,barshift,0)];
نفس الطريقة سوف تطبقها على البيع لكن ستستخدم الهاي لمعرفة أعلى هاي وتحفظ توقيت فتح صفقه البيع
شكرا جزيلا أستاذ أسامه و بارك الله فيك ...
و بعد إذنك أخي كنت أريد داله تقوم بتعديل ستوب الشراء المفعل إلى أدنى نقطة وصل لها السعر كما حددناها بالسابق
و العكس تعديل ستوب البيع المفعل لأعلى نقطة وصل لها السعر ...
و عذرا أخي لو اتعبتك معي سوف أرفق لك الإكسبيرت الذي أبرمجه و أشرح لك فكرته لتطلع عليه وتصححلي ما فيه من أخطاء :
1- الإكسبيرت يقوم بوضع أمرين معلقين سيل استوب و باي ستوب على أساس وجود مستويين مرسومين على الشارت أعلى و أدنى السعر ... وقيمة اللوت تكون لوت1 .. و إستوب و هدف لكل أمر معلق المسافه بين المستويين .
2-إذا تفعل البيع لوت1 يتم مسح أمر الشراء وتعليق أمر معلق شراء بلوت2 عند المستوى العلوى و الهدف و الإستوب المسافه بين المستويين .(و العكس في حال تفعل الشراء لكن سأمشي في الشرح مع هذه الصفقه ).
(في حالة تم ضرب الهدف يتم إلغاء الأوامر و يتوقف الإكسبيرت)
3- إذا تم ضرب ستوب البيع بلوت1 وتفعل الشراء بلوت2 يتم تعليق أمر بيع بلوت3 عند أدنى نقطه وصل لها السعر قبل تفعل الشراء المفعل و الهدف و الإستوب الفرق بين المستوى العلوي السابق المرسوم على الشارت وأدنى نقطه وصل لها السعر ... و يتم أيضا تعديل ستوب الشراء المفعل إلى أدنى نقطه وصل لها السعر .
4- إذا تم ضرب ستوب الشراء بلوت2 و تفعل البيع بلوت3 .. يتم تعليق أمر شراء بلوت 4 عند أعلى نقطه وصل لها السعر قبل تفعل صفقة البيع الحاليه و الهدف و الإستوب يكون الفرق بين أعلى نقطه وصل لها السعر و قيمة ستوب آخر صفقه مغلقة ... و يتم أيضا تعديل ستوب البيع المفعل إلى أعلى نقطة وصل لها السعر .
.. أنوي عمل حتى لوت 10 بهذه الطريقه .. و قمت ببرمجة حتى الخطوة الرابعه إلى الآن و لكن هناك بعض الأخطاء أرجو الإطلاع عليها و تصحيح أي شئ آخر قبل أن أكمل ..
شكرا جزيلا أخي أسامه و بارك الله فيك .
الإكسبيرت
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة dentist_hussein
و عذرا أخي لو اتعبتك معي سوف أرفق لك الإكسبيرت الذي أبرمجه و أشرح لك فكرته لتطلع عليه وتصححلي ما فيه من أخطاء :
1- الإكسبيرت يقوم بوضع أمرين معلقين سيل استوب و باي ستوب على أساس وجود مستويين مرسومين على الشارت أعلى و أدنى السعر ... وقيمة اللوت تكون لوت1 .. و إستوب و هدف لكل أمر معلق المسافه بين المستويين .
2-إذا تفعل البيع لوت1 يتم مسح أمر الشراء وتعليق أمر معلق شراء بلوت2 عند المستوى العلوى و الهدف و الإستوب المسافه بين المستويين .(و العكس في حال تفعل الشراء لكن سأمشي في الشرح مع هذه الصفقه ).
(في حالة تم ضرب الهدف يتم إلغاء الأوامر و يتوقف الإكسبيرت)
3- إذا تم ضرب ستوب البيع بلوت1 وتفعل الشراء بلوت2 يتم تعليق أمر بيع بلوت3 عند أدنى نقطه وصل لها السعر قبل تفعل الشراء المفعل و الهدف و الإستوب الفرق بين المستوى العلوي السابق المرسوم على الشارت وأدنى نقطه وصل لها السعر ... و يتم أيضا تعديل ستوب الشراء المفعل إلى أدنى نقطه وصل لها السعر .
4- إذا تم ضرب ستوب الشراء بلوت2 و تفعل البيع بلوت3 .. يتم تعليق أمر شراء بلوت 4 عند أعلى نقطه وصل لها السعر قبل تفعل صفقة البيع الحاليه و الهدف و الإستوب يكون الفرق بين أعلى نقطه وصل لها السعر و قيمة ستوب آخر صفقه مغلقة ... و يتم أيضا تعديل ستوب البيع المفعل إلى أعلى نقطة وصل لها السعر .
.. أنوي عمل حتى لوت 10 بهذه الطريقه .. و قمت ببرمجة حتى الخطوة الرابعه إلى الآن و لكن هناك بعض الأخطاء أرجو الإطلاع عليها و تصحيح أي شئ آخر قبل أن أكمل ..
شكرا جزيلا أخي أسامه و بارك الله فيك .
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
إذا أردت عمل مودفاي للأمر
مثال
كود PHP:
void Modify_Order(double newStopLoss)
{
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderStopLoss()!=newStopLoss)OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0);
}
}
}
ثم إستدعاء الداله
كود PHP:
Modify_Order(SL);
المتغير SL هو قيمة الاستوب لوز الجديد
بالنسبه للإكسبرت فهو ممتاز لكن لدي إستفسار فقط بخصوص الخطوة 2
كود PHP:
if( orderscnt(OP_SELL)==1 && (TimeCurrent()-LastClosedOrderTime())/60/60>=Hours){
DeleteBuyPendingOrders( MagicNumber);}
فماذا إذا تفعل الأمر المعلق لكن لم يتحقق شرط الوقت في هذه الحاله لن يتم حذف الأمر المعلق الآخر حتى تضع الأمر بحجم 2 لوت
لذلك بدلا من وضع شرط التوقيت يمكنك عمل داله تحسب حجم لوت الأمر المعلق الآخر إذا كان حجم اللوت مساوي لحجم لوت الصفقه التي فتحت في هذه الحاله تحذف الأمر وتضع الأمر المعلق
أو
يمكنك تغيير الكومنت للصفقات الرئيسيه وعمل داله تقارن إذا تفعل الأمر المعلق وكان الأمر المعلق الآخر بنفس كومنت الصفقات الرئيسيه يتم حذف الأمر ووضع الأمر المضاعف
الله يبارك فيك أخي أسامه و شكرا جزيلا ..
بخصوص إستفسارك أخي فمعك حق فعلا .. لقد تناسيت أن هذا الكود يقوم بالوظيفه التي أريدها فقط عند فتح أول صفقه فقط و كنت أريد من الكود عدم تكرار الأمر إذا توافرت الشروط مره أخرى ..
أنا قمت بإضافة داله تعديل الستوب و وضعت الشرط في الخطوه رقم 3 و 4 .. و رجاء أستاذي لو تطلع بتمعن في تعريفات الستوب و نقاط تعليق الأوامر وحسابات أقل لو و أعلى هاي وصل إليه السعر لأنه يعطيني أخطاء و أريد التأكد من سلامة هذه الخطوات ..
بالنسبه لتغيير الكومنت للصفقات الرئيسيه وعمل داله تقارن إذا تفعل الأمر المعلق وإذا كان الأمر المعلق الآخر بنفس كومنت الصفقات الرئيسيه يتم حذف الأمر ووضع الأمر المضاعف .. فهذه الفكره جميله و أعتقد كان من الممكن إستخدام الكومنت لكل أمر بدلا من إستخدام حجم اللوتات و المقارنه بين كومنت كل أمر و أيضا أتت في بالي فكرة إستخدام رقم الصفقات كذلك بنفس الطريقة .. فرجاء لو تشرح لي مثال لتغيير الكومنت و الداله التي تقارن تشابه الكومنتات و كذلك الشرط الذي سوف أضعه ...
و بارك الله فيك .
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم استاذ اسامة واسعد الله ايامك ...
فقط اريد التوضيح من حضرتك ... فانا والشباب المشاركين معي في الموضوع https://forum.arabictrader.com/t141767.html
نعاني من مشكلة وحيدة حيث ان الاكسبيرت في اخر نسخة له لا يعمل على اي منصة من منصات الخمس ارقام 5 digits
انا شخصيا حاولت على جميع المنصات مثل AFBFX ALpari UK NoorCM لم يعمل على اي من هذه المنصات ... ولكن يعمل على الباك تيست
يرجى التكرم من حضرتك ان تجد له حل علما باني وضعت اخر النتائج له واثبت الاكسبيرت جدارته في فترات طويلة ولله الحمد.
ولي عندك طلب ثاني بسيط ارجو ان يتسع صدرك له... الاكسبيرت مصمم لكي يعمل على اساس النسبة المئوية التي تحددها وفقا للرينج اليومي وعند الوصول الى تلك النسبة التي حددتها يتحقق شرط الدخول .... فهل من الممكن ان يتم استبدال النسبة المئوية لتكون عدد نقاط الحركة اليومية ، على سبيل المثال :-
عندما احدد له رقم 150 .. يعني عندما تصل حركة الباوند في اليوم الى 150 نقطة يتحقق شرط الدخول وليس كما هو الحال عند وضع رقم 150 تعني %150*الرينج اليومي
وارجو ان يكون هناك متغير لوقف الخسارة متعلق بعدد النقاط وليست نسبة مئوية كما طلبوا مني الاخوة المشاركين في الموضوع
مرفق النسخة الاخيرة من الاكسبيرت ... وجزاك الله كل خير عني وعن كل من يستخدم هذا الاكسبيرت ويرزقك من حيث لا تحتسب
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله تعالى وبركاته
فالمؤشرات إلي بتعرض السعر بحجم كبير بيستخدموا الكود ده عشان يغيروا اللون مع كل تك لفوق وتحت
كود PHP:
double price;
int start()
{
if (Bid > price)// نفذ
if (Bid < price)// نفذ
price=Bid;
return(0);
}
طب الكود ده في منصات الخمس أرقام بيشتغل مع كل جزء من النقطة , انا عايزه يشتغل مع كل نقطة كاملة وللأسف ماقدرتش أعمله مع إني حاسس إن الحل بسيط :(
وشكرا مقدما :eh_s(7):
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة dentist_hussein
و أشرح لك فكرته لتطلع عليه وتصححلي ما فيه من أخطاء :
1- الإكسبيرت يقوم بوضع أمرين معلقين سيل استوب و باي ستوب على أساس وجود مستويين مرسومين على الشارت أعلى و أدنى السعر ... وقيمة اللوت تكون لوت1 .. و إستوب و هدف لكل أمر معلق المسافه بين المستويين .
2-إذا تفعل البيع لوت1 يتم مسح أمر الشراء وتعليق أمر معلق شراء بلوت2 عند المستوى العلوى و الهدف و الإستوب المسافه بين المستويين .(و العكس في حال تفعل الشراء لكن سأمشي في الشرح مع هذه الصفقه ).
(في حالة تم ضرب الهدف يتم إلغاء الأوامر و يتوقف الإكسبيرت)
3- إذا تم ضرب ستوب البيع بلوت1 وتفعل الشراء بلوت2 يتم تعليق أمر بيع بلوت3 عند أدنى نقطه وصل لها السعر قبل تفعل الشراء المفعل و الهدف و الإستوب الفرق بين المستوى العلوي السابق المرسوم على الشارت وأدنى نقطه وصل لها السعر ... و يتم أيضا تعديل ستوب الشراء المفعل إلى أدنى نقطه وصل لها السعر .
4- إذا تم ضرب ستوب الشراء بلوت2 و تفعل البيع بلوت3 .. يتم تعليق أمر شراء بلوت 4 عند أعلى نقطه وصل لها السعر قبل تفعل صفقة البيع الحاليه و الهدف و الإستوب يكون الفرق بين أعلى نقطه وصل لها السعر و قيمة ستوب آخر صفقه مغلقة ... و يتم أيضا تعديل ستوب البيع المفعل إلى أعلى نقطة وصل لها السعر .
.. أنوي عمل حتى لوت 10 بهذه الطريقه .. و قمت ببرمجة حتى الخطوة الرابعه إلى الآن و لكن هناك بعض الأخطاء أرجو الإطلاع عليها و تصحيح أي شئ آخر قبل أن أكمل ..
شكرا جزيلا أخي أسامه و بارك الله فيك .
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لديك أخطاء في حساب الهدف والأستوب لوز
فمثلا أنت حسب عدد نقاط الفرق بين البيع والشراء
كود PHP:
double TP_R=MathAbs ( buy - sell ) ;
على سبيل المثال إذا كان الشراء 1.5030 والبيع 1.4030
فإن الناتج سيكون 1.5030-1.4030 = 0.0100
الخطأ لديك الآن في تحديد قيم الهدف والأستوب لوز
كود PHP:
if(UseRecTP)TP=(sell-TP_R*point);
if(UseRecSL)SL=(sell+SL_R*point);
فلن تحتاج إلى أن تضرب الناتج في قيمة النقطه point لأنها هي أساسا قيمتها بالنقطه (0.0100)
فسوف تجعلها فقط
كود PHP:
if(UseRecTP)TP=(sell-TP_R);
if(UseRecSL)SL=(sell+SL_R);
سوف تطبق هذا التعديل على باقي الأخطاء من نفس النوع
----------
بالنسبه لتغيير الكومنت فسوف تقوم أولا بتعديل الكومنت للصفقات الرئيسيه ولنفرض
مثلا
كود PHP:
OrderSend(Symbol(),OP_BUYSTOP,Lots1,buy,3,SL,TP,"first order",MagicNumber,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots1,sell,3,SL,TP,"first order" ,MagicNumber,0,Green);
ثم عمل الداله
كود PHP:
string getcomment()
{
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()>OP_SELL){
return(OrderComment());
}
}
return("none");
}
ثم ستضع في المقارنه
كود PHP:
if(getcomment()=="first order")
{
// delete order
}
تمام أخي سامه .. تم تعديل الإستوب و التارجت كما شرحت بارك الله فيك ..
وتم إستخدام دالة الكومنت ..
و لكن مازال يظهر أخطاء بعدم تعريف ال low_price
وهذه الأخطاء تظهر في هذه التعريفات :
كود PHP:
///حساب أقل لو وصل إليه السعر بعد توقيت فتآخر صفقة
int barshift=iBarShift(Symbol(),0,lasttime(),false)
double low_price=Low[iLowest(Symbol(),0,MODE_LOW,barshift,0)];
double sell2=low_price;
double sell3=low_price;
///---
///حساب اعلى هاي وصل له السعر بعد فتح آخر صفقه
double high_price=High[iHighest(Symbol(),0,MODE_HIGH,barshift,0)];
double buy2=high_price;
double buy3=high_price;
///---
double TP_R2=MathAbs ( buy - sell2 ) ;
double SL_R2=MathAbs ( buy - sell2 ) ;
double TP_R22=MathAbs ( sell - buy2 ) ;
double SL_R22=MathAbs ( sell - buy2 ) ;
///-
double TP_R3=MathAbs ( buy3 - Last_SL ) ;
double SL_R3=MathAbs ( buy3 - Last_SL ) ;
double TP_R33=MathAbs ( sell3 - Last_SL ) ;
double SL_R33=MathAbs ( sell3 - Last_SL ) ;
///-
رجاء الإطلاع و جزاك الله خيرا .
الإكسبيـــــــــــــــــــــرت