شكرا أستاذ يوسف
Printable View
شكرا أستاذ يوسف
ممكن حل بالنسبه للمضاعفات
عندى تعمل مع الاشارة العكسيه ولكن المشكله
عند تحقيق نقاط اقل من الهدف وظهور اشارة عكسيه يغلق
دون ان يكمل المضاعفات ويعود الى اللوت الاساسى
المطلوب ان يعمل مضاعفات حتى يحقق الهدف
وبالتوفيق للجميع
سؤال للاساتذة المبرمجين لدي اكسبيرت احاول ان اتعلم البرمجة من خلاله ولكن لدي مشكلة لم اجد لها حل وارجوا منكم اعطائي المعادلة اللازمة : المشكلة هي عندي تحقق شروط الدخول للصفقة شراء او بيع الاكسبيرت يفتح صفقة وعند وصول الصفقة للهدف لا يتوقف الاكسبيرت عن فتح الصفقات لان مازالت جميع الشروط متحققة للبيع او للشراء ارجوا منكم المساعدة وشكرا .
وعليكم السلام ورحمة الله وبركاته
لا يوجد في لغة mq4 دالة أو كود يسمح بالإتصال وتنزيل ملف من على النت وهذه فائدة دمج لغات البرمجه مع بعضها وهذا ما توفره لغة mq4 تسمح بإستدعاء أي مكتبات والتعامل معها
فالداله الموجوده في المكتبه (DLL) تسحب الملف من الموقع وتنزله على الجهاز ثم يقوم المؤشر أو الإكسبرت بقراءة الملف معرفة بيانات وتواريخ الأخبار
مثال
سوف أقوم بعمل دالة لمعرفة حجم لوت بكل صفقات خاسرة
ثم تقوم بعمل دالة تعود بكل صفقات ربحكود PHP:double LastLost()
{
for(int i=OrdersHistoryTotal()=1;i>=0;i--)
{
double profit;
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()<0)profit+=OrderProfit();
}
}
return(profit);
}
ثم ستضع في المقارنه إذا كانت الخساره أكبر من الربح بالتالي أن آخر صفقه لم تعوض خسارة الصفقات فيتم المضاعفهكود PHP:double LastProfit()
{
for(int i=OrdersHistoryTotal()=1;i>=0;i--)
{
double profit;
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()>0)profit+=OrderProfit();
}
}
return(profit);
}
أو يمكنك وضع شرط آخر مع الشرط السابق إذا كانت آخر صفقه رابحه لكن الخساره الكليه أكبر من الربح الكلي فالصفقه التاليه تكون بنفس حجم آخر مضاعفهكود PHP:if(LastLost()>LastProfit())
{
//newlot=lots*2;
}
تأكد من طريقة كتابتك للشروط فمثلا إذا كان الإكسبرت لتقاطع الموفينج أفريج
فعند المقارنه لا تضع شرط أن الموفينج السريع أكبر من البطيء بالتالي شراء
مثل
الشرط السابق خاطئ لأنه في حال أغلقت الصفقه فسوف يظل الشرط محقق لكن الصحيح أن تقارن بين الشمعه السابقه والشمعه التي قبلها حتى يتأكد التقاطع مثلكود PHP:double FastMa=iMA(Symbol(),0,8,0,0,PRICE_CLOSE,1);
double SlowMa=iMA(Symbol(),0,21,0,0,PRICE_CLOSE,1);
if(FastMa>SlowMa)
{
//open buy
}
وقس على ذلك باقي المؤشرات ما عدا طبعا مؤشرات الأسهمكود PHP:double FastMa=iMA(Symbol(),0,8,0,0,PRICE_CLOSE,1);
double SlowMa=iMA(Symbol(),0,21,0,0,PRICE_CLOSE,1);
double FastMaPr=iMA(Symbol(),0,8,0,0,PRICE_CLOSE,2);
double SlowMaPr=iMA(Symbol(),0,21,0,0,PRICE_CLOSE,2);
if(FastMa>SlowMa&&FastMaPr<SlowMaPr)
{
//open buy
}
السلام عليكم رحمة الله وبركاته
اشكر مشرفنا مستر دولار على جهوده
عندي مشكله في ايجاد كود يجلب اغلاق اعلى شمعه هاي في 24 شمعه سابقه فريم الساعه هذه الجزئيه عملتها
بس المشكله اللي عندي لو تكررت شمعة الهاي مرتين او اكثر كيف اجلب اعلى اغلاق بينهم
وشاكر لكم تعاونكم
السلام عليكم استاذى الكريم
جزاك الله خير على المساعدة الكريمة من شخصك الكريم
طيب استاذى
ممكن المساعدة فى تعلم هذه الطريقة
بوضع مثلا فى المرفقات مكتبة DLL
التى تسحب البيانات من النت
وكيف يتم رابطه فى الاكسبيرت او المؤشر
وهذا هايكون موضوع تعليمى كبير جدا لكل واحد بيتعلم لغة البرمجة
او حضرتك ممكن تفتح موضوع مثبت وتشرح هذه الطريقة
حتى تكون الاستفادة للجميع
وجزاك عنا كل خير
تحياتى لشخصك الكريم
أنا عن نفسي مش مقتنع بتكرار الهاي مرتين خلال 24 شمعة ( لإن المنصات كلها تقريبا بقت 5 أرقام )
لكن فرضا لو تكرر الهاي فعلا في 24 شمعة أعتقد الحل هيكون بإستخدام الحلقات
---------------
في حل جاه في دماغي كده بس مش متأكد من صحته
وعموماً أنا منتظر معاك رأي أستاذ أسامة :)كود PHP:double Higher_Close;
int Highr_H24 = iHighest(Symbol(),PERIOD_H1,MODE_HIGH,24,0);
int another_HH = iHighest(Symbol(),PERIOD_H1,MODE_HIGH,24,Highr_H24+1);
if(High[Highr_H24]== High[another_HH])
Higher_Close = MathMax(Close[Highr_H24],Close[another_HH]);
else{Higher_Close=iClose(Symbol(),PERIOD_H1,Highr_H24);}
بدلا من إستخدام الداله iHighest لمعرفة الهاي إستخدم الحلقه for للبحث عن أعلى هاي وإذا تساوى شمعتين في الهاي تضع شرط أعلى إغلاق
مثال
كود PHP:double MaxHigh,CloseCandle;
for(int i=1;i<=24;i++)
{
if(High[i]>MaxHigh)
{
CLoseCandle=Close[i];
}
else if(High[i]==MaxHigh&&Close[i]>CloseCandle)
{
CloseCandle=Close[i];
}
}
وعليكم السلام ورحمة الله وبركاته
أبسط مثال كنت قد ذكرته سابقا مؤشر FFCal للأخبار ويستخدم مكتبة wininet.dll وهي دائما تكون موجوده مع ملفات الويندوز
راجع هذا الموضوع لحين تجهيز شرح كامل له
http://codebase.mql4.com/ru/1064
دكتور اسمح لي بالمساعدة على بال يرد الأستاذ أسامة ، بالنسبة لأول دالتين ربما لاترتد الدالة بماتريد ، تفضل دالة تعود بآخر لوت ودالة تعود بآخر تيك بروفت جربها ربما تحل باقي المشاكل في الأكسبيرت .
كود PHP:double LastOrderLot(int type){
for(int i=OrdersTotal()-1; i>=0; i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber && OrderType()==type){
return(OrderLots());
}
}
return(0);
}
double LastOrderTP(int type){
for(int i=OrdersTotal()-1; i>=0; i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber && OrderType()==type){
return(OrderTakeProfit());
}
}
return(0);
}
يوجد حلين
إما أن تجعل الإكسبرت يقارن إذا كان حجم اللوت الجديد أكبر من أقصى حجم لوت مسموح فإنه يجعل حجم اللوت يساوي أكبر حجم مسموح
مثال
الحل الثاني أن يقوم بتقسيم حجم اللوت الجديد إلى أكثر من صفقه بحيث مجموعها يكون حجم اللوت للمضاعفه المطلوبهكود PHP:if(newLot>MarketInfo(Symbol(),MODE_MAXLOT))newLot=MarketInfo(Symbol(),MODE_MAXLOT);
مثال
كود PHP:while(newLot>0)
{
double lot=NewLot;
if(NewLot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+50*Point,3,0,0,"EA",Magic,0,Blue);
newLot-=MarketInfo(Symbol(),MODE_MAXLOT);
}