الأستاذ مستر دولار
السلام عليكم
كيف يمكن وضع أمر للأكسبرت بأن لا يفتح صفقة ثانية حتي تغلق الاصفقة الأولي
يعني عدد الصفقات المفتوحة لا تزيد عن صفقة واحدة
Printable View
الأستاذ مستر دولار
السلام عليكم
كيف يمكن وضع أمر للأكسبرت بأن لا يفتح صفقة ثانية حتي تغلق الاصفقة الأولي
يعني عدد الصفقات المفتوحة لا تزيد عن صفقة واحدة
الأستاذ الكريم مستردولار
ما وظيفة هذا الأمر و ماهو مهمته؟
اقتباس:
int init()
{
lastbar = Time[0];
return ;
}
bool NewBar()
{
datetime curbar = iTime(Symbol(),0,0);
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}
}
يجب أن تقوم بعمل دالة تحدد بها عدد الصفقات الحاليه ثم ستضع من ضمن شروط الدخول إذا كان عدد الصفقات الحاليه يساوي 0 على سبيل المثال
ثم ستضع من ضمن شروط الدخولكود PHP:int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
هذه الداله تقوم بمعرفة هل تغيرت الشمعه الحاليه أم لا فالداله NewBar تعود بالقيمه true إذا إنتهت الشمعه الحاليه وظهرت شمعه جديده وتعود بالقيمه false إذا ما زالت الشمعه الحاليه لم تنتهي بعد يمكنك إستخدام هذه الداله على سبيل المثال إذا أردت تنفيذ أمر واحد فقط في كل شمعهكود PHP:f(orderscnt()<1)
نتائج جيده ما شاء الله
بالنسبة لفكرتك لنلقي نظرة على الداله التاليه
في الداله السابقه سوف يقوم بالبحث في الصفقات المفتوحه عن الأوامر المعلقه ثم يضع من ضمن الشروط لحذف أوامر الشراء المعلقه إذا كان عدد أوامر الشراء تساوي صفر وأيضا في حالة البيعكود PHP:void DeleteNextDay(){
for(int i=0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderOpenTime()<iTime(NULL,1440,0)){
if(MySellRealOrdersTotal(MagicNumber)>0&&OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP)OrderDelete(OrderTicket());
if(MyBuyRealOrdersTotal(MagicNumber)>0&&OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP)OrderDelete(OrderTicket());
}
}
}
كود PHP:MyBuyRealOrdersTotal(MagicNumber)==0
والشرط الأهم حتى نتأكد من أن الأوامر المعلقه تم وضعها في اليوم السابق وهوكود PHP:MySellRealOrdersTotal(MagicNumber)==0
ثم سنضع بداخل الداله startكود PHP:OrderOpenTime()<iTime(NULL,1440,0)
الإكسبرت في المرفقاتكود PHP:if(Timed!=iTime(NULL,1440,0)){DeleteNextDay();Timed=iTime(NULL,1440,0);}
أستاذي الكريم مستر دولار ... جزاك الله خيرا على المجهود المتواصل
و أنا أطور مهاراتي البرمجية باستمرار و ذلك بفضل الله ثم بفضل متابعتك و اشرافك
شكرا جزيلا لك أستاذ مستر دولار
اخوي اسامه لي طلبين
ارجو ان يسمح وقت بتلبيتها
شرح طريقه بناء اكسبيرت بناء على الامر iCustom
( استخدم بعض المؤشرات الرقميه واريد ان اركب اكسبيرت لها )
فتح موضوع بعنوان دوره صناعه الاكسبيرتات 2
لكي تكون مواصله للطريق الذي بداه الاستاذ وضاح عطار
تقبل تقديري
العفو أخي الكريم بالتوفيق إن شاء الله
سوف تجد أننا شرحنا بالتفصيل الداله iCustom وكيفية إستدعائها في هذا الموضوع وإن شاء الله نستمر في الموضوع ونقوم بعمل تطبيق عملي لتصميم إكسبرت
https://forum.arabictrader.com/t93679.html#post1651054
نعم لا يمكن إستدعاء المؤشرات إلا إذا كانت على هيئة Buffer
لكن إذا كان المؤشر يرسمها على هيئة خطوط أو متغيرات نصية فلا يمكن إستدعائها لكن أفضل طريقة هي إستدعائها من على الشارت مباشرة بعض وضع الشارت على المؤشر مثلا بعض المؤشرات ترسم خطوط على هيئة Objects في هذه الحاله يمكنك إستدعاء قيمتها بإستخدام الأمر ObjectGet أو أيضا المتغيرات النصية التي يتم كتابتها على الشارت بطريقة أخرى يمكنك التعديل في المؤشر بحيث عندما يقوم المؤشر بكتابة رقم نصي مثلا على الشارت تجعله أيضا يحفظه في ذاكرة الميتاتريدر
بإستخدام الأمر GlobalVariableSet وتقوم بإستدعائه بإستخدام الأمر GlobalVariableGet
اخوي اسامه
شوف كود الاكسبيرت التالي
الاكسبيرت اساساً هو اكسبيرت الاستاذ وضاح عطار
قمت بتعديله
وضيفه الاكسبيرت
عند بدايه يوم جديد يقوم بالتالي
حذف الصفقات المفتوحه سواء معلقه او مفعله
وضع امرين معلقه
ولكن عند تشغيل الاكسبيرت
لا يقوم بحذف الاوامر المعلقه او الصفقات المفتوحه
يفتح صفقه واحده فقط
بالنسبة لدالة حذف الأوامر المعلقه
يجب أن تقوم بتغيير علامة || وتجعلها && ليصبحكود PHP:if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
كود PHP:if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY && OrderType()!=OP_SELL))