1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
تحية طيبة أستاذي العزيز مستر دولار وأتمنى أن تكون في أفضل صحة وحال وجزاك الله خيرا على مجهودك الجبار في مساعدة إخوانك
الاكسبيرت بالمرفقات عمله كالتالي :
عند إغلاق الشمعة الحمراء يقوم بفتح صفقة بيع ماركت ومعه أمرين معلقين سيل ستوب
والعكس عند إغلاق الشمعة الخضراء يفتح شراء ماركت ومعه أمرين معلقين باي ستوب
الاغلاق هو إغلاق عكسي للشمعة أي
إغلاق البيع والأوامر المعلقة عند إغلاق الشمعة الخضراء والعكس بالنسبة للشراء
قمت بإضافة المضاعفات لكنها لا تعمل
وأريدها بمجرد الاغلاق على خسارة آخر صفقة يدخل صفقة عكسية مضاعفة ماركت وطبعا معه أمرين معلقين بنفس اللوت الأساسي
جربت هذا الكود ولم يعمل :
كود:
double profit = 0;
datetime lastCloseTime = 0;
int cnt = OrdersHistoryTotal();
for (int i=cnt-1; i > 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderType() == OP_BUY && OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo && lastCloseTime < OrderCloseTime())
{
lastCloseTime = OrderCloseTime();
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
}
}
وأيضا هذا الكود لم يعمل : كود:
double profit = 0;
datetime lastCloseTime = 0;
int cnt = OrdersHistoryTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderType() == OP_BUY && OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo && lastCloseTime < OrderCloseTime())
{
lastCloseTime = OrderCloseTime();
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
}
}
وأيضا قمت باختصار الكود كالتالي في كلا الحالتين ولم يعمل : كود:
double profit = 0;
datetime lastCloseTime = 0;
int cnt = OrdersHistoryTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo && lastCloseTime < OrderCloseTime())
{
lastCloseTime = OrderCloseTime();
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
}
}
فأرجو الحل بالتعديل المطلوب ضمن الاكسبيرت بالمرفقات
تحية ود وتقدير أستاذي الغالي وشكرا جزيلا على عطائك الرائع :eh_s(7):
2 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
لا يوجد داعي لإستخدام الشرط
كود PHP:
lastCloseTime < OrderCloseTime()
ويكفي أن تستخدم الأمر break عند تحقق شرط معرفة آخر صفقة
سوف يصبح الكود في النهاية
كود PHP:
double profit = 0;
int cnt = OrdersHistoryTotal();
for (int i=cnt-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderType() == OP_BUY && OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
{
lastCloseTime = OrderCloseTime();
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
break;
}
}
بارك الله فيك أستاذي العزيز
قمت بالتعديل المطلوب مع حذف الكود كود:
lastCloseTime = OrderCloseTime();
وبالتالي لا يوجد أخطاء عند عمل الكمبايل
وتمت التجربة بالباكتيست وللأسف لا تعمل المضاعفات وأظن أن الاكسبيرت لا يستطيع استخراج آخر صفقة خاسرة لأنه بمجرد الاغلاق على خسارة يتم الدخول صفقة معاكسة وأوامر معلقة (حسب شرط الدخول) وبالتالي عند الدخول تكون الصفقة الخاسرة غير موجودة بالهيستوري ربما !!
أيضا الأوامر المعلقة التي تغلق على تعادل وهو آخر أمر تم إغلاقه بالهيستوري (حسب الاغلاق العكسي)
إليك الصورة بالمرفقات أخي العزيز حتى تتضح فكرة الاكسبيرت وما أريده
ولك جزيل الشكر :eh_s(7): وربنا يجازيك كل خير أخي
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لديك خطأ آخر
كود PHP:
if (OrderType() == OP_BUY && OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
فكيف يمكن أن يكون نوقع الصفقه بيع وشراء في نفس الوقت بما إنك إستخدمت &&
الصحيح أن تستخدم ||
بارك الله فيك أستاذي الكريم
فعلا يجب أن أفرق بين نوع الصفقات وليس دمجهم،
طيب هل مثلا عند تفعيل الأمر المعلق شراء يعتبر بعدها بالنسبة للاكسبيرت أمر OP_BUY ؟؟؟
إذا كان الجواب لا فلا حاجة لعمل الكود OrderType أليس كذلك؟
غدا سأعمل التعديل والباكتيست إن شاء الله
شكرا يا غالي :eh_s(7):
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
إذا تفعل الأمر المعلق بالتأكيد سوف يتحول إلى OP_BUY أو OP_SELL حسب نوعه
شكرا جزيلا أستاذي الغالي :eh_s(7):
الاكسبيرت على لايف يعمل جيدا والحمد لله
جزاك الله خيرا دنيا وآخرة
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله
استاذنا الكريم ....كيف اجعل الاكسبرت يفتح عقدين شراء او بيع او اكثر في نفس الوقت عند تحقق الشروط هل بتكرار كود الشراء مثلا لاني جربتها ولم تنجح....ام هناك طريقة اخرى......وشكرا جزيلا
كود:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"wahab",MagicNumber,0,Blue);
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله
اخذت المؤشر المشهور SuperTrend الذي لا يغير اشارته كمؤشرات الاسهم مثلا وهو عبارة عن خط واحد يتلون من اخضر الى احمر .والفكرة كالتالي عند تلون الخط باللون الاخضر على فريم الربع ساعة يدخل شراء لكن مع توافق فريم النصف ساعة (اي ان يكون على النصف ساعة لونه اخضر ايضا) والا فلا يدخل حتى يتلون بالاخضر .والعكس بالنسبة للبيع. واليك الكود :
كود PHP:
supertrendb30=iCustom(NULL,30,"SuperTrend",0,1);
supertrends30=iCustom(NULL,30,"SuperTrend",1,1);
supertrendb15=iCustom(NULL,15,"SuperTrend",0,1);
supertrends15=iCustom(NULL,15,"SuperTrend",1,1);
//----
if(supertrendb30<5000&&supertrends30>5000){
if (supertrendb15<5000&&supertrends15>5000){
CloseSellOrders();
if (orderstotal()<2){
if(!LastOrderProfit()&& DoubleLot==true){
Lots=LastLot()+0.2;
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"wahab",MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,TP,"wahab",MagicNumber,0,Blue);
Lots=lot;
}
else {
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"wahab",MagicNumber,0,Blue);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,TP,"wahab",MagicNumber,0,Blue);
}
}
}
}
الكود يبدو لي صحيح لكن عند التطبيق لا ياخذ بالاعتبار تحقق الشرط في فريم النص ساعة .ارجو المساعدة وشكرا جزيلا.
2 مرفق
رد:موضوع مخصص للأسئلة البرمجية
بعد تنصيب منصة جديدة وتحميل البيانات كما بالصورة ...وعند بدء اختبار الاكسبرت تظهر في الجورنال الرسالة التالية
الملف المرفق 352508الملف المرفق 352509