موفق إن شاء الله
Printable View
السلام عليكم مستر دولار
اريد ان اتعلم لو سمحت كيف اقوم بعمل ليميت لعدد الاوردرات
مثال لو فيه اكسبيرت مثلا بيفتح عمليه شراء بسعر السوق واخرى معلقه
اريد ان اعمل متغير اسمه step ومتغير اخر اسمه MaxSellOrderNom ومتغير اخر اسمه MaxBuyOrderNom
وطبعا الكلام دا سهل
ولكن ما هى الداله التى توضع قبل امر البندنج اوردر لكى ينفذ عدد معين الموجود مثلا فى المتفير MaxBuyOrderNom ويكون الفرق بينهم هو المتغير step?? انا حاولت افهمها من الاكسبيرتات المبرمجه سابقا ولكن لم اصل لشيئ
هذا كل ما توصلت اليه
عرفت متغير اسمه maxorders
عرفت متغير داخلى اسمه
int i;
ووضعت قبل الجزء الخاص بالاوامر المعلقه هذا السطر
for(i=1;i<=MaxOrders;i++)
ووضعت فى السعر الخاص بالاوامر المعلقه غيرته بحيث انه يعتمد على المتغير i
ألنتيجه ان عدد الاوردرات المعلقه يتم بشكل طبيعى ولكن بنفس سعر اول امر معلق يعنى كلهم بنفس السعر ما الحل؟
طريقتك صحيحه لكنك نسيت شيء بسيط جدا السبب في أن جميع الأوامر تكون في نفس المكان أنك لم تقم بزيادة المسافه step بعد كل أمر
كمثال في الكود التالي
سوف تجد أننا في كل مره نضرب المتغير Step * i فمثال إذا كان الأمر المعلق الأول فسوف تكون المسافه هي 1*Step ثم الأمر المعلق الثاني سوف يكون 2*Step وهكذا حتى نهاية الأوامر فسوف تجد أن الإستيب تزيد في كل مره ويتم وضع الأوامر بشكل صحيحكود PHP:
for(int i=1;i<=MaxBuyOrders;i++)
{
double price=Ask-(i*Step)*point;
OrderSend(Symbol(),OP_BUYLIMIT,NextLot(OP_BUY,OP_BUYLIMIT),price,3,0,0,"MR.dollar EA",MagicNumber,0,Blue);
}
مازالت الاوامر بنفس السعر
السلام عليكم
الأستاذ الكريم مستر دولار
أنا أحاول برمجة اكسبيرت يضع أوامر معلقة في بداية اليوم بيعا و شراءا ... و عند بداية يوم جديد يفتح أوامر جديدة و يبقي على القديمة ..
الأوامر القديمة تلغى اذا تفعل الأول على الأقل و حقق هدفه
واجهت اشكالا في أن دالة الغاء الأوامر المعلقة تلغي الكل .. و أثناء بحثي في اصداراتك وجدت هذه الدالة و أظن أنها قد تفيدني لكنني لم أفهم بنيتها إنما أعتقد أنها لتغيير الماجيك نمبر
إذا سمحت أريد معرفة وظيفتها و فهم بنيتها و لماذا وضعت في هذا الاكسبيرت ؟؟؟
و جزاك الله خيرا
هذه الدالة حسب طلب صاحب الإكسبرت اراد أن يضع من ضمن شروط الدخول في الصفقه أن يكون عدد الصفقات المفتوحه للإكسبرت أقل من العدد المحدد سواء كان لنفس العملة أو عملات مختلفه لذلك وضعت المتغير OnlyWithSameMagic بحيث إذا قام بتعطيله فسوف يحسب جميع الصفقات الموجوده في الحساب أما إذا قام بتفعيله فسوف يحسب فقط الصفقات التي قام الإكسبرت بفتحها بنفس الماجيك نمبر في حال قام بوضعه على أكثر من عمله
بالنسبه للداله التي تبحث أنت عنها يمكن أن تضع شرط إضافي لحذف الأمر المعلقه للصفقه وهو إذا كان وقت فتح الصفقه أقل من وقت إفتتاح شمعة اليوم
كمثال
كود PHP:
OrderOpenTime()<iTime(NULL,1440,0)
أستاذي الكريم
جزاك الله خيرا على الشرح الوافي
الأستاذ الكريم .. مستر دولار
أظن أن الشرط الذي اقترحته لا يناسب فكرتي لأن الاكسبيرت الذي أبرمجه يعلق أوامر بيع و شراء مع افتتاح اليوم فإذا تفعل الأمر الأول شراء مثلا فإنه يلغي كل أوامر البيع المعلقة و يبقي على اوامر الشراء المعلقة الباقية..
فإذا بدأ يوم جديد ، فإنه يعلق اوامر جديدة بيعا و شراء و يبقي على الأوامر المعلقة و المتفعلة لليوم السابق .
لألغاء الأوامر المعلقة لليوم السابق أو لأي يوم يجب أن يتحقق الهدف الأول الذي تفعل في ذلك اليوم
فمثلا أوامر اليوم السابق حسب المثال تفعل الشراء و بقي عندنا أوامر أخرى معلقة شراء بالإضافة الى أوامر اليوم المعلقة شراء و بيعا
نغلق أوامر الشراء المعلقة للأمس اذا تحقق الهدف الأول للعقد الأول ليوم أمس .
الاكسبيرت في المرفقات و هو ينفذ عقود اليوم الأول فقط و لا يستمر على هذا المنوال
اذا كان لديك وقت ..أرجو الاطلاع عليه
و بارك الله فيك
بارك الله فيك
و كل عام و أنتم بخير
وكل عام وأنتم بخير
بالنسبة لعدم فتح صفقات في اليوم التالي في حال كان يوجد صفقات في اليوم السابق بسبب هذا الشرط الذي وضعته
لذلك يجب ان تقوم بتغيير هذا الشرط ويكفي أن تضع شرط تعرف من خلاله أن اليوم السابق قد إنتهى وجاء يوم جديد ولا داعي لحساب الأوامر المعلقه بما أنك تريده أن يضع صفقات في اليوم الجديد سواء كان يوجد صفقات في اليوم السابق أو لاكود PHP:
if (MySellPendingOrdersTotal(MagicNumber)==0)
كود PHP:
if (iTime(NULL,1440,0)!=Ti)
حاليا حسب الكود التالي قد تتفعل صفقة بيع ثم يرتفع السعر أكثر وتتفعل صفقة البيع المضاعفة فإذا عادت الصفقه الثانيه وحققت الهدف فبقي صفقة أخرى لم تحقق الهدف فمتى يجب أن يلغي الأوامر المعلقه الأخرى لنفس النوع
الإكسبرت في المرفقات سوف يقوم بوضع الصفقات في كل يوم لكن يجب عليك الآن أن تعيد ترتيب شروط حذف الصفقات المعلقه وإغلاق الصفقات حتى لا تتعارض صفقات اليوم السابق مع اليوم الحالي كما شرحت لك في المشاركه السابقه جرب تعديل الإكسبرت وأخبرني عند أي نقطه تقف فيها
جزاك الله خيرا أستاذنا الكريم
قمت بالتعديل على الاكسبيرت بحيث جعلته في نهاية اليوم يقوم بإلغاء كامل الصفقات المعلقة و إغلاق الصفقات المفتوحة ، كما أضفت المضاعفات للعقود المعلقة في بداية اليوم
و كانت نتيجة الباك تست كالتالي
https://forum.arabictrader.com/uploaded/24040_md1-2.gif
https://forum.arabictrader.com/uploaded/24040_md1-3.gif
و ذلك بالإعدادات التالية
https://forum.arabictrader.com/uploaded/24040_md1-1.gif
جزاك الله خيرا أخي مستر دولار على إشرافك
أريد أن أقوم ببعض التعديلات على الاكسبيرت من باب التجربة و أيضا تنمية مهاراتي البرمجية التي استفدتها منك
التعديل الذي أريده و الذي لم أتمكن من القيام به هو أنني أجعل الاكسبيرت في نهاية اليوم و مع بداية اليوم الجديد يحافظ على الصفقات المفتوحة و على الأوامر المعلقة من نفس النوع و يلغي الأوامر المعلقة من النوع المقابل .
مثلا اذا تفعلت صفقة شراء فأنا أريده أن يحافظ عليها و يحافظ على الأوامر المعلقة للشراء و يلغي أوامر البيع طبعا في حالة لم تتفعل صفقة البيع ... و يتم الغاء الأوامر المعلقة فقط في حالة تحقق الهدف الأول .
أتمنى أن تساعدني في هذه الفكرة البرمجية