فعلا ياريت الأستاذ اسامه عمدتنا في هذا القسم وإدارة المنتدى يطلع لنا بجائزة تشجيعية ، ولاتنسو لي تقسمو لي معاكم .
Printable View
سنبتدي بأبسط فكرة لتعليق اوردرات وبعدها سنوسع الفكرة .
الخطوة الأولى سنكتب دالة للبيع ودالة للشراء لأوامر BUYSTOP و SELLSTOP
هذه دالة الشراء
هذا الكود سنضعه في دالة OnTick() سنعرف منه هاي ولو اليوم السابق .كود PHP:void Buy_Stop()
{
double SL=0,TP=0,NewLot=Lot;
if(Multi_Factor>0 && LastProfitH<0) NewLot=NormalizeDouble(LastLot*Multi_Factor,2);
double price=ahi_1+Step_Point*points;
if(Stoploss>0) SL=price-Stoploss*points; else SL=0;
if(Takeprofit>0) TP=price+Takeprofit*points; else TP=0;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,NewLot,price,30,SL,TP,"jmeel",MagicNo,0,clrGreen);
}
هذا الكود سنضيفه الى كود المتغيراتكود PHP:ahi_1=iHigh(NULL,1440,1);
alow_1=iLow(NULL,1440,1);
الآن يمكنكم اضافة دالة تعليق البيع من خلال المقارنة مع دالة الشراء فأذا واجهتم صعوبة سأضيفها ، كذلك قارنو بين دوال البيع والشراء ماركت واوردر تعليق . سنستفيدكود PHP:extern int Step_Point=10;
double ahi_1,alow_1;
منها لنضيف اوردرات تعليق الليمت بمجهودكم .
اذا واجهتم صعوبة اخبروني .
هو فيه شئ ناقص عندي اكيد يا استاذ جميل لأنه الاكسبيرت يفتح صفقة البيع فقط ولا يلغي الصفقات التي لم تنفذ خلال اليوم ؟؟
بل يفتح غيرها واذا احتفظنا بدالة توتال اوردار = 0 فهو لا يفتح صفقات على الايام الاخري محتفظا بامر البيع الاول حتي يتم تحقيقة ؟؟
الملف المرفق 411873
تفضل أخى الفاضل أستاذ جميل الأكسيبرت ولكنى أرى أن هناك بعض الاخطاء لا أعلم ما السبب حيث أنه يعلق أوامر عند كل شمعة فما السبب وهل دالة الإغلاق هى كما سابقتها فى الأكسيبرتات السابقة اليس من المفروض أن يعلق أمر واحد فقط على الهاى و أمر على اللو اليومى؟
لاتعمل باك تست ، فقط اسحب الأكسبيرت على الشارت فأذا نجحت بتعليق اوردر شراء وبيع على المسافة الصحيحة من الهاي واللو فهذا يكفي لهذه المرحلة ، بعدها سنضيف الشروط كما تريدون وسنتدرب على فتح اودرات مختلطة وكذلك متعددة مثل تعليق 10 اوردرات شراء ومثلها بيع وهكذا .
نعم أخى قام بوضع أوردرين باى ستوب وسل ستوب ولكنه عند كل شمعة سوف يضع اوردرين هل هذا خطأ أم سوف نقوم بتعديل الأمر لاحقا؟
انتم ماوضعتم شرط أن يكون الصفقات مجموعها 0 ليعلق اوردرات جديدة
كود PHP:if(TotalOrder==0 && dnx!=Time[0])
{
dnx=Time[0];
Buy_Stop();
Sell_Stop();
}
قمت بوضع هذا الكود لكنه علق أوردرين واحد باى ستوب والأخر سل ستوب ولكنه لم يعلق أوردرات بعد ذلك فى الأيام التالية نهائيا
طمنا عليك يا أستاذ جميل يارب تكون بخير
بعد تعديل الكود .. اذا وضعت TotalOrder==0 داخل الشروط واتخذ اتجاه الشراء تبقي صفقة البيع المعلقة ولا يفتح غيرها على الايام اللاحقة .. واذا لم توضع يفتح صفقات استوب على الهاي واللو لليوم اللاحق مع الاحتفاظ بصفقة البيع القديمة وتستمر الصفقات الغير مفعلة موجودة بدون حذف ..
ماشاء الله عاجبكم تعليق الأوامر ومستعجلين ، عموما الفكرة حتاخذ مراحل لأهميتها وابتدينا بفكرة كيف نعلق الأمر بناء على هاي ولو اليوم السابق بدون النظر لأي نتائج او اسباب اخرى، اليوم حنضيف فكرتين تنفع مع هذا الأكسبيرت ، الأولى اننا مش حنعلق اكثر من مرة وحدة في بداية اليوم ، الثانية حنقفل ونلفي الأوردرات بنهاية اليوم او في اي ساعة تحب عشان نجهز لليوم الجديد .
حنضيف هذا الشرط ليمكننا من تعليق اوردرات مع بداية كل يوم جديد
وحنضيف هذا الشرط لألغاء واغلاق الأوردرات في ساعة معينة او بنهاية اليوم .كود PHP:if(dnx!=iTime(NULL,1440,0))
{
dnx=iTime(NULL,1440,0);
Buy_Stop();
Sell_Stop();
}
دالة الأغلاق طبعا حنعدلها كلما اضفنا للفكرة شئ جديدكود PHP:if(Hour()>=23) {delStop=0; sdel=0; bdel=0; Close_Type(); }
في متغيرات طبعا حتضيفوها مع المتغيرات انا حنساها .كود PHP:void Close_Type()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo)
{
if(OrderType()==OP_BUY && bdel==0) {bool asd=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),30,Red);}
if(OrderType()==OP_SELL && sdel==0) {bool afd=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),30,Red);}
if(OrderType()>1 && delStop==0) {bool afg=OrderDelete(OrderTicket());}
}
}
sdel=0;bdel=0;delStop=0;
return;
}
جربو ونشوف النتيجة .