مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4
الصفحات :
1
2
3
4
[
5]
6
7
8
9
10
11
12
13
14
15
kira-h
18-02-2018, 06:00 PM
لا اخي حسن اقصد مثلا هناك مؤشرات لا تعمل على الذهب فيقوم المبرمجون باضافه على الكود لتعمل مثل هذه الازواج
وهي تسمى digits اي يقوم المؤشر اتوماتيكيا بالتكيف مع الارقام قبل الفاصله وبعدها بحيث يعطي نفس النتيجه على كل الازواج والمعادن والنفط
نعم هذا هو المقصود دراسة الديجيت وعلاقته بقيمة البوينت الافتراضي وقيمة البوينت الحقيقية للزوج
sal_moh85
20-02-2018, 12:52 PM
سلام عليكم استاذ حسن انا عم استخدم هذا الكود لتعديل الامر المعلق
//-----------------void pandingTringbuy2(int Magic ){for(int iii=0;iii<OrdersTotal();iii++){
if(OrderSelect(iii,SELECT_BY_POS,MODE_TRADES)) string sy=OrderSymbol(); int tk=OrderTicket(), ot=OrderType(), mn=OrderMagicNumber(); double op=OrderOpenPrice(), sl=OrderStopLoss(), tp=OrderTakeProfit(); double ppoint=MarketInfo(OrderSymbol(), MODE_POINT); double pBid=MarketInfo(OrderSymbol(), MODE_BID); double pAsk=MarketInfo(OrderSymbol(), MODE_ASK); {if(OrderType()==OP_BUYSTOP&&OrderMagicNumber() == Magic){ double Spread1=MarketInfo(Symbol(),MODE_SPREAD); double prb= Ask+(Limitpip*Point); double SLB = NormalizeDouble(prb-(Stoploss*point),Digits); double TPB = NormalizeDouble(prb+(Takeprofit*point),Digits);if( Ask+(Limitpip*Point)<op){bool buy=OrderModify(tk,prb,SLB,TPB,0,Red);}}}}}
في خانة الجورنال يظهر لي هذا الخطاء OrderModify error 1
شو هوه سبب هاد الخطاء وشكرا يعني في الكود هل يوجد خطاء
Waddah
20-02-2018, 03:00 PM
السلام عليكم
ممكن المساعدة في تنفيذ التالي :
بعد تحقيق ربح معين يتم إغلاق نصف العقد ووضع الستوب على الدخول (تم تحقيقها )...المطلوب بعد أن يصبح الستوب على الدخول تتفعل دالة التريلنغ ستوب وكلما تحرك السعر باالإتجاه الرابح نقطة يرفع الستوب نقطة ......مع جزيل الشكر
Waddah
20-02-2018, 03:38 PM
السلام عليكم
ممكن المساعدة في تنفيذ التالي :
بعد تحقيق ربح معين يتم إغلاق نصف العقد ووضع الستوب على الدخول (تم تحقيقها )...المطلوب بعد أن يصبح الستوب على الدخول تتفعل دالة التريلنغ ستوب وكلما تحرك السعر باالإتجاه الرابح نقطة يرفع الستوب نقطة ......مع جزيل الشكر
kira-h
20-02-2018, 04:14 PM
سلام عليكم استاذ حسن انا عم استخدم هذا الكود لتعديل الامر المعلق
//-----------------void pandingTringbuy2(int Magic ){for(int iii=0;iii<OrdersTotal();iii++){
if(OrderSelect(iii,SELECT_BY_POS,MODE_TRADES)) string sy=OrderSymbol(); int tk=OrderTicket(), ot=OrderType(), mn=OrderMagicNumber(); double op=OrderOpenPrice(), sl=OrderStopLoss(), tp=OrderTakeProfit(); double ppoint=MarketInfo(OrderSymbol(), MODE_POINT); double pBid=MarketInfo(OrderSymbol(), MODE_BID); double pAsk=MarketInfo(OrderSymbol(), MODE_ASK); {if(OrderType()==OP_BUYSTOP&&OrderMagicNumber() == Magic){ double Spread1=MarketInfo(Symbol(),MODE_SPREAD); double prb= Ask+(Limitpip*Point); double SLB = NormalizeDouble(prb-(Stoploss*point),Digits); double TPB = NormalizeDouble(prb+(Takeprofit*point),Digits);if( Ask+(Limitpip*Point)<op){bool buy=OrderModify(tk,prb,SLB,TPB,0,Red);}}}}}
في خانة الجورنال يظهر لي هذا الخطاء OrderModify error 1
شو هوه سبب هاد الخطاء وشكرا يعني في الكود هل يوجد خطاء
وعليكم السلام
تم الرد بالمشاركة رقم 1007 (https://www.fxprg.com/vb/showthread.php?t=31457&p=878269&viewfull=1#post878269)
sal_moh85
20-02-2018, 05:01 PM
وعليكم السلام
لا يمكن تعديل سعر افتتاح الاوامر سواء ماركت او معلقة
مشكور اخي على اجابتك بس الامر المعلق عم يتعدل سعر فتح صفقه وستوب وتك بروفت صح كلام الماركت خالص فتحت الصفقه
شو معنها هاد الخطاء
OrderModify error 1
kira-h
20-02-2018, 08:39 PM
مشكور اخي على اجابتك بس الامر المعلق عم يتعدل سعر فتح صفقه وستوب وتك بروفت صح كلام الماركت خالص فتحت الصفقه
شو معنها هاد الخطاء
OrderModify error 1
قلت انه لا يمكن تعديل سعر فتح الأمر المعلق وهذا لأن بعض شركات الوساطة كانت لا تقوم بتنفيذه مثل fxcm.
عموما التصحيح كالتالي :
void pandingTringbuy2(int Magic)
{
for(int iii=0;iii<OrdersTotal();iii++)
{
if(OrderSelect(iii,SELECT_BY_POS,MODE_TRADES))
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&ot==OP_BUYSTOP&&mn==Magic)
{
double prb = Ask+Limitpip*point;
double SLB = prb-Stoploss*point;
double TPB = prb+Takeprofit*point;
if(prb<op)
{
bool buy=OrderModify(tk,prb,SLB,TPB,0,Red);
}
}
}
}
الخطأ معناه خطأ بدالة تعديل الصفقة إما بسعر الفتح أو الهدف او الوقف...،
kira-h
20-02-2018, 08:53 PM
السلام عليكم
ممكن المساعدة في تنفيذ التالي :
بعد تحقيق ربح معين يتم إغلاق نصف العقد ووضع الستوب على الدخول (تم تحقيقها )...المطلوب بعد أن يصبح الستوب على الدخول تتفعل دالة التريلنغ ستوب وكلما تحرك السعر باالإتجاه الرابح نقطة يرفع الستوب نقطة ......مع جزيل الشكر
وعليكم السلام
ستقوم بعمل دالة تحسب عدد الاغلاقات الجزئية للصفقة كالتالي :
int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
}
return(closecount);
}
ثم الشروط بدالة منفصلة وتستدعيها بالدالة الرئيسية OnTick كالتالي :
void OnTick()
{
TrailingAfterClose();
}
void TrailingAfterClose()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime ot=OrderOpenTime();
double op=OrderOpenPrice(),
ol=OrderLots(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber(),
closecount=OrderCloseCount(op,ot);
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_BUY)
{
if(closecount>0)
{
MoveTrailingStop(OP_BUY);
}
}
if(ty==OP_SELL)
{
if(closecount>0)
{
MoveTrailingStop(OP_SELL);
}
}
}
}
}
بحيث دالة التريلينغ تصبح بدلالة النوع كالتالي :
void MoveTrailingStop(int type)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(TrailingStop>0&&sy==Symbol()&&mn==MagicNo&&ot==type)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop*point),Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop*point),Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop*point),Digits)) )||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop*point),Digits),tp,0,Red);
}
}
}
}
}
}
لم افهم اوريد انا افهم اكثر
kira-h
24-02-2018, 09:59 PM
ماهيا الأسئلة
لم افهم اوريد انا افهم اكثر
الموضوع مخصص للأسئلة البرمجية يقوم بطرحها الأعضاء،
daherxdaher
25-02-2018, 07:13 PM
السلام عليكم
أرجو الافادة فيما يخص التالي.
أستعمل خبير Excel RTD لاستجلاب ثم تحليل المعلومات الواردة في الملف المرفق من الميتاترايدر الى الاكسل.
للأسف ليس لدى أدنى علم بلغة الميتاترايدر، فما هي الصيغة (Formula) التي أستطيع عبرها الاحتفاظ بقيم السبريد الدنيا و القصوى لزوج العملة الذي أختاره خلال اطار زمني أختاره، ذلك بشكل متواصل طالما المنصة مفتوحة.
مثال:
سبريد الـEURUSD في كل شمعة دقيقة و توقيت كل سعر بالثانية، و ليس فقط بالساعة و الدقيقة.
(أي خلال ساعة سيكون لدي 60 قيمة دنيا للسبريد و مثلهم قصوى).
ملاحظة: المهمة ينفذها المؤشر المرفق مع عيب كبير. ببساطة المؤشر مربوط بالتشارت و ليس بالـ Market Watch، بمعنى أن تصدير المعلومات يتوقف ليس فقط لو تم اغلاق التشارت و لكن أيضا لو غيرت البروفايل في المنصة، حتى لو كان التشارت مفتوحا.
كل الشكر و المحبة
خالد بن وليد
25-02-2018, 11:42 PM
السلام عليكم
أخي حسن تحية طيبة لك أما بعد
لدي أستفسار بسيط لو سمحت وأرجو منك افادتي بعلمك
هل من الممكن عمل أمر معلق غير مرتبط بسعر بال بالوقت
فكما يتم تحديد مستوى أذا وصله السعر يفتح صفقة في الأمر المعلق العادي
فهل يمكن عمل أمر معلق على وقت محدد عند الوصول له يفتح صفقة ؟؟
وأذا أمكن هل يتمتع هذا الأمر المعلق بنفس أمتيازات الأمر العتيادي ؟؟
أي هل أستطيع أغلاق الmt4 ويبقى الأمر فعال ؟؟
شكراً لك تحياتي
kira-h
26-02-2018, 01:42 AM
السلام عليكم
أخي حسن تحية طيبة لك أما بعد
لدي أستفسار بسيط لو سمحت وأرجو منك افادتي بعلمك
هل من الممكن عمل أمر معلق غير مرتبط بسعر بال بالوقت
فكما يتم تحديد مستوى أذا وصله السعر يفتح صفقة في الأمر المعلق العادي
فهل يمكن عمل أمر معلق على وقت محدد عند الوصول له يفتح صفقة ؟؟
وأذا أمكن هل يتمتع هذا الأمر المعلق بنفس أمتيازات الأمر العتيادي ؟؟
أي هل أستطيع أغلاق الmt4 ويبقى الأمر فعال ؟؟
شكراً لك تحياتي
وعليكم السلام
أمر معلق أي انه أمر يوضع عند سعر معين محدد سلفا بسيرفر الشركة بمجرد وصوله السعر الحالي يتفعل،
أما لو تريده بتوقيت محدد فهذا غير ممكن إلا إذا سمحت الشركة بذلك أي لا يوجد أقصى فرق مسافة مشروط بين السعر الحالي وسعر الأمر المعلق، وبهذه الحالة بمجرد وضع الأمر المعلق سيتفعل مباشرة.
لكن بذل كل هذا فقط استخدم شرط التوقيت وعند تحققه يفتح صفقة ماركت مباشرة
مثلا :
if(TimeHour(TimeCurrent())==8)//OpenBuyOrder
يعني عند الساعة 8 صباحا افتح امر ماركت شراء
الأوامر المعلقة تتفعل حتى لو المنصة مغلقة لأنها طلبات معلقة بأسعار محددة لزاما على الشركة تنفيذها
sal_moh85
28-02-2018, 12:49 PM
سلام عليكم اخ حسن بدي اسالك عن كود في ايكوتي
شرح الفكره عندما يبتعد ايكوتي عن بالنس بنسبه تحدد من اعدادات 20 في مائه او اكثر ومن ثم يعود ايكوتي الى بالنس بقارق يحدد من اعدادات10ي مائه يغلق جميع انواع الصفقات
هل هذا ممكن لانو ما كنت لاقي طريقه اربطهون في بعض وشكرا
kira-h
28-02-2018, 08:10 PM
سلام عليكم اخ حسن بدي اسالك عن كود في ايكوتي
شرح الفكره عندما يبتعد ايكوتي عن بالنس بنسبه تحدد من اعدادات 20 في مائه او اكثر ومن ثم يعود ايكوتي الى بالنس بقارق يحدد من اعدادات10ي مائه يغلق جميع انواع الصفقات
هل هذا ممكن لانو ما كنت لاقي طريقه اربطهون في بعض وشكرا
وعليكم السلام
الدالة كالتالي :
void BreakEquityPercent()
{
bool c;
double Pt=AccountProfit()/AccountBalance()*100;
if(Pt>=MaxEquityPercent)
{
GlobalVariableSet("BEP",1);
}
if(Pt<=MinEquityPercent&&GlobalVariableGet("BEP")==1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
c=OrderClose(OrderTicket(),OrderLots(),MarketInfo( OrderSymbol(),MODE_BID),30);
}
if(OrderType()==OP_SELL)
{
c=OrderClose(OrderTicket(),OrderLots(),MarketInfo( OrderSymbol(),MODE_ASK),30);
}
}
GlobalVariableDel("BEP");
}
}
بحيث : MaxEquityPercent و MinEquityPercent متغيرين خارجيين من نوع double
MaxEquityPercent أقصى نسبة الربح بالاكويتي وهي في هذه الحالة ستضع 20
MinEquityPercent أقل نسبة الربح بالاكويتي عند عودة النسبة من الماكس اكويتي، هنا ستضعها 10
وبالتالي عندما ستجاوز نسبة الربح قيمة الماكس اكويتي سيتم حجز نسبة قيمة المين اكويتي وعند عودة نسبة الربح الى المين اكويتي سيتم إغلاق كل الصفقات لكل الأزواج بالحساب
forex
28-02-2018, 10:30 PM
مشكور أخي حسن فهمت الان
sabil
01-03-2018, 01:29 AM
عايز دالة صلاحية الاكسبرت برقم الحساب الحقيقي ومفتوح للديمو
sal_moh85
01-03-2018, 01:13 PM
وعليكم السلام
الدالة كالتالي :
void BreakEquityPercent()
{
bool c;
double Pt=AccountProfit()/AccountBalance()*100;
if(Pt>=MaxEquityPercent)
{
GlobalVariableSet("BEP",1);
}
if(Pt<=MinEquityPercent&&GlobalVariableGet("BEP")==1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
c=OrderClose(OrderTicket(),OrderLots(),MarketInfo( OrderSymbol(),MODE_BID),30);
}
if(OrderType()==OP_SELL)
{
c=OrderClose(OrderTicket(),OrderLots(),MarketInfo( OrderSymbol(),MODE_ASK),30);
}
}
GlobalVariableDel("BEP");
}
}
بحيث : MaxEquityPercent و MinEquityPercent متغيرين خارجيين من نوع double
MaxEquityPercent أقصى نسبة الربح بالاكويتي وهي في هذه الحالة ستضع 20
MinEquityPercent أقل نسبة الربح بالاكويتي عند عودة النسبة من الماكس اكويتي، هنا ستضعها 10
وبالتالي عندما ستجاوز نسبة الربح قيمة الماكس اكويتي سيتم حجز نسبة قيمة المين اكويتي وعند عودة نسبة الربح الى المين اكويتي سيتم إغلاق كل الصفقات لكل الأزواج بالحساب
شكرا جزيلا اخ حسن
kira-h
01-03-2018, 05:58 PM
مشكور أخي حسن فهمت الان
بالتوفيق إن شاء الله
kira-h
01-03-2018, 05:58 PM
شكرا جزيلا اخ حسن
بالتوفيق إن شاء الله
kira-h
01-03-2018, 05:59 PM
عايز دالة صلاحية الاكسبرت برقم الحساب الحقيقي ومفتوح للديمو
السلام عليكم
مثال :
if(!IsDemo()&&TimeCurrent()>=StrToTime("2018.03.01 00:00"))return;
sabil
01-03-2018, 06:09 PM
السلام عليكم
مثال :
if(!IsDemo()&&TimeCurrent()>=StrToTime("2018.03.01 00:00"))return;
شكرا اساذ حسن انا اعرف هذه الدالة لكن اقصد
برقم الحساب الحقيقي مع تاريخ انتهاء صلاحية مش التاريخ بس
kira-h
01-03-2018, 10:00 PM
شكرا اساذ حسن انا اعرف هذه الدالة لكن اقصد
برقم الحساب الحقيقي مع تاريخ انتهاء صلاحية مش التاريخ بس
العفو اخي
قم بإضافة شرط رقم الحساب
مثال
if(!IsDemo()&&AccountNumber()!=123456&&TimeCurrent()>=StrToTime("2018.03.01 00:00"))return;
sabil
02-03-2018, 10:03 AM
العفو اخي
قم بإضافة شرط رقم الحساب
مثال
if(!IsDemo()&&AccountNumber()!=123456&&TimeCurrent()>=StrToTime("2018.03.01 00:00"))return;
تمام
الف شكر ياغالي
sal_moh85
02-03-2018, 03:37 PM
سلام عليكم اخ حسن بدي طريقه خبر فيها اكسبريت عند قفل الصفقات على ترينغ ستوب يتم حذف جميع الاوامر المعلقه ويعاد شغل اكسبريت من جديد
وطلب تاني دالة توقيت الايام
input string Var1="_______________Time Filter Day"; extern bool UseDayTradeDay1 = false; enum DAYShow {Mo=1,Tu=2,We=3,Th=4,Fr=5}; extern DAYShow DAY1 = Mo; extern int CloseHourDay1 = 7;
وهاد شرط في دالة
void OnTick()
{
if(UseDayTradeDay1==true&&DayOfWeek()==DAY1&&Hour()>=CloseHourDay1){CloseOrders(); DeletePendingOrders();}
هي شروط انا حاطتها انو في اليوم الذي يحدد والساعه التي تحدد يتم حذف الاومر المعلقه وماركت كلوه صح لهون بس عم يتم خلال هذه ساعه يفتح ويقفل صفقات حتى يقطع هذا التوقيت
هلق في شي ناقص
انا بدي من هل داله مثلا يوم الاربعاء ساعه 12 يقفل جميع الصفقات وبداء من جديد من نفس الساعه واليوم يعني عملية اغلاق هي بمثابة رستارت لي اكسبريت
وشكرا جزيلا
kira-h
02-03-2018, 08:14 PM
تمام
الف شكر ياغالي
العفو أخي
sabil
03-03-2018, 12:10 AM
باشمهندس حسن
بعد اذنك انا عملت كذا اكسبرت وركبته على نظام ادارة راس المال
بس من ساعتها ولا اكسبرت راضي يشتغل على الباكتيست
مش عارف ايه اللي حصل جربت الاكسبرتات الافتراضية المرفقة مع الميتاتريدر
لقيتها شغالة كويس انما اكسبرتاتي لا تعمل ابدا
لكن شغالة على الديمو والحقيقي عادي لكن بردو فيه مشكلة بسيطة وهو ان فيه صفقات بتفوت الاكسبرت مش بيفتحها الا اذا رسترت المنصة غير كده بيضيع فرص كتير دا غير توفر شروط الاغلاق والاكسبرت مش بيقفلها !
اول مرة يحصل الكلام ده مع اكسبرتاتي ومش عارف ايه المشكلة ؟!!
معلش هاخد من وقتك دقيقة تشوفلي المشكلة منين
الاكسبرت في المرفقات
kira-h
03-03-2018, 08:34 PM
باشمهندس حسن
بعد اذنك انا عملت كذا اكسبرت وركبته على نظام ادارة راس المال
بس من ساعتها ولا اكسبرت راضي يشتغل على الباكتيست
مش عارف ايه اللي حصل جربت الاكسبرتات الافتراضية المرفقة مع الميتاتريدر
لقيتها شغالة كويس انما اكسبرتاتي لا تعمل ابدا
لكن شغالة على الديمو والحقيقي عادي لكن بردو فيه مشكلة بسيطة وهو ان فيه صفقات بتفوت الاكسبرت مش بيفتحها الا اذا رسترت المنصة غير كده بيضيع فرص كتير دا غير توفر شروط الاغلاق والاكسبرت مش بيقفلها !
اول مرة يحصل الكلام ده مع اكسبرتاتي ومش عارف ايه المشكلة ؟!!
معلش هاخد من وقتك دقيقة تشوفلي المشكلة منين
الاكسبرت في المرفقات
الخطأ نتيجة خطأ مؤثر جدا لا يتحمله الكود، موجود بعمليات القسمة التي استخدمتها بحيث المقسوم عليه غير مشترط على أنه أكبر من الصفر
راجع الكود المرفق لتفهم قصدي
كما تم اصلاح بعض الاخطاء التقنية الأخرى
sabil
04-03-2018, 12:49 AM
الخطأ نتيجة خطأ مؤثر جدا لا يتحمله الكود، موجود بعمليات القسمة التي استخدمتها بحيث المقسوم عليه غير مشترط على أنه أكبر من الصفر
راجع الكود المرفق لتفهم قصدي
كما تم اصلاح بعض الاخطاء التقنية الأخرى
الف شكر ياغالي
اشتغل في الباكتست اخيراً
kira-h
04-03-2018, 01:54 AM
الف شكر ياغالي
اشتغل في الباكتست اخيراً
بالتوفيق إن شاء الله
Rushdi
05-03-2018, 12:53 PM
صباح الخير اساتذتي الكرام.
انا متداول واحاول ان اعمل اكسبرت لكن كوني بعيد عن منطق البرمجة القي صعوبة في التقدم لكن بفضل الخيرين مثلكم احاول حل المشكلة.
اعمل على برمجة سكبرت يدخل عبر مؤشر sar بالتاكد من adx والكود شغال بشكل جيد ويعطي نتائج مقبولة كما في الصورة 1.
5681
لكن المشكلة تكمن حينما ياتي اشارة adx بعد sar فلا يدخل كما موضح في الصور2.
5682
وهنا اعتقد وجود مشكلة في اني وضعت عدد الصفقات 1 فقط التي تكون مفتوحة ففي بعض الاحيان يقفل صفقة ويفتح اخرى وقد يضيع الاشارة في ذلك الفترة.
ارجو من الاخوة الخبراء مساعدتي لاتمكن من اكمال الاكسبرت ومشاركته في المنتدى.
كما افكر في عمل ستوب متحرك ياخذ عبر sar في خطوة ثانية
شكراً مقدماً
الكود في المرفق
sal_moh85
05-03-2018, 06:49 PM
سلام عليكم اخ حسن سالتك سوال رقم المشاركه #1026 (https://www.fxprg.com/vb/showthread.php?t=31457&p=878609&viewfull=1#post878609)
هل يوجد حل
سوال تاني
هل يوجد داله تقوم بحساب اخر 10 صفقات هل هي رايحه ام خاسره وشكرا
kira-h
05-03-2018, 07:56 PM
صباح الخير اساتذتي الكرام.
انا متداول واحاول ان اعمل اكسبرت لكن كوني بعيد عن منطق البرمجة القي صعوبة في التقدم لكن بفضل الخيرين مثلكم احاول حل المشكلة.
اعمل على برمجة سكبرت يدخل عبر مؤشر sar بالتاكد من adx والكود شغال بشكل جيد ويعطي نتائج مقبولة كما في الصورة 1.
5681
لكن المشكلة تكمن حينما ياتي اشارة adx بعد sar فلا يدخل كما موضح في الصور2.
5682
وهنا اعتقد وجود مشكلة في اني وضعت عدد الصفقات 1 فقط التي تكون مفتوحة ففي بعض الاحيان يقفل صفقة ويفتح اخرى وقد يضيع الاشارة في ذلك الفترة.
ارجو من الاخوة الخبراء مساعدتي لاتمكن من اكمال الاكسبرت ومشاركته في المنتدى.
كما افكر في عمل ستوب متحرك ياخذ عبر sar في خطوة ثانية
شكراً مقدماً
الكود في المرفق
السلام عليكم
جرب الاكسبيرت المرفق
Rushdi
06-03-2018, 12:03 AM
السلام عليكم
جرب الاكسبيرت المرفق
شكراً على الاهتمام والمساعدة
الذي يحصل في بعض الاحيان يعمل التعديل على trailing stop loss عبر قيمة SAR بشكل طبيعي لكن في اغلب الاحيان ياتي بقيمة SL الى منطقة قريبة جداً من السعر بعيداً عن قيمة SAR من ما يؤدي الى ضرب الاستوب فوراً مثل الصورة ادناه. حيث نرى في 1 و 2 بان trailing stop loss اتى بالستوب الى نقطة قريبة من السعر وضرب الاستوب بعيداً عن قيمة SAR.
5699
اما موضوع فتح الصفقات في تقاطع ADX ايضاً مع الرجوع الى SAR فلا اعرف كيف اقوم به مثل ما في الصورة ادناه حيث اعطى SAR اشارة في 1 ولم يفتح صفقة لان ADX لم يكن في اشارة البيع ولم يكتمل الشروط لكن في 2 لم يفتح صفقة رغم تطابق الشروط واتى الاشارة من ADX و SAR معاً.
5700
اسف على الاطالة والسؤال الكثير لكن تعلم البرمجة وتحويل اسلوبي في التداول الى اكسبرت مهم بالنسبة اللي لكون ضيق وقتي وقد اجبر الى ترك التداول اذا لم اتعلمه.
kira-h
06-03-2018, 07:08 PM
شكراً على الاهتمام والمساعدة
الذي يحصل في بعض الاحيان يعمل التعديل على trailing stop loss عبر قيمة SAR بشكل طبيعي لكن في اغلب الاحيان ياتي بقيمة SL الى منطقة قريبة جداً من السعر بعيداً عن قيمة SAR من ما يؤدي الى ضرب الاستوب فوراً مثل الصورة ادناه. حيث نرى في 1 و 2 بان trailing stop loss اتى بالستوب الى نقطة قريبة من السعر وضرب الاستوب بعيداً عن قيمة SAR.
5699
اما موضوع فتح الصفقات في تقاطع ADX ايضاً مع الرجوع الى SAR فلا اعرف كيف اقوم به مثل ما في الصورة ادناه حيث اعطى SAR اشارة في 1 ولم يفتح صفقة لان ADX لم يكن في اشارة البيع ولم يكتمل الشروط لكن في 2 لم يفتح صفقة رغم تطابق الشروط واتى الاشارة من ADX و SAR معاً.
5700
اسف على الاطالة والسؤال الكثير لكن تعلم البرمجة وتحويل اسلوبي في التداول الى اكسبرت مهم بالنسبة اللي لكون ضيق وقتي وقد اجبر الى ترك التداول اذا لم اتعلمه.
اخي الكريم حسب ما فهمت انك تقارن نقطة السار مع الموفينج (وليس مع اغلاق الشمعة) + مقارنة خطي الأدكس
تم إضافة الحالة الثانية لتقاطع الأدكس بالاكسبيرت المرفق
Rushdi
07-03-2018, 12:40 AM
شكراً جداً استاذ انقذتني بموضوع التريلنج ستوب والايدي اكس. لم استطع برمجة السار باقفال الشموع ووجدت بديل عبر مقارنته بموفينج صغير فيعطي نفس النتائج لكن بطريقة ملتوية :)
الاكسبرت يعمل بشكل جيد ومقبول على النطاق السنوي مع المجنون حيث يجني متوسط 2000 نقطة بالسنة لكن له مشكلة عندما يكون السوق عرضي. حاولت ان اضع خط الترند الازرق الخاص بال adx كشرط دخول لكن هذا المرة واجهني مشكلة انهو يوافق على فتح الصفحات في بداية الاشارة فقط وعدما يرتفع الخط الازرق بعد اشارة السار والايدي اكس لا يفتح صفقات كونه ينظر في بداية الاشارة فقط. كما في الصورة حيث اتى اشارة السار والايدي اكس في 1 ولكن خط الترند الخاص بالايدي اكس كان اسفل مستوى 22 الذي حددته. لكن في 2 ارتفع ليتجاوز المستوى المحدد لكن لم يفتح صفقة كونه ينظر في اول الاشارة فقط ولم اعرف كيف احل هذا الامر.
5728
فكرة الاكسبرت ناجح بشكل عام في المدى الطويل فالصورة ادناه يظهر باك تست قبل اضافة الخط الازرق لل adx من بداية 2016 الى نهاية 2017 في فريم الاربع ساعات. في بعض السنين يصل التست ارباحه الى 4000 نقطة وفي بعض السنين ينخفظ الارباح الى 1000 نقطة على المدى السنوي. اذا عملنا على تطويره قليلاً يمكن ان نصل الى نتيجة جيدة لاكسبريت يعمل طول السنة.
5730
ا
kira-h
07-03-2018, 03:25 AM
شكراً جداً استاذ انقذتني بموضوع التريلنج ستوب والايدي اكس. لم استطع برمجة السار باقفال الشموع ووجدت بديل عبر مقارنته بموفينج صغير فيعطي نفس النتائج لكن بطريقة ملتوية :)
الاكسبرت يعمل بشكل جيد ومقبول على النطاق السنوي مع المجنون حيث يجني متوسط 2000 نقطة بالسنة لكن له مشكلة عندما يكون السوق عرضي. حاولت ان اضع خط الترند الازرق الخاص بال adx كشرط دخول لكن هذا المرة واجهني مشكلة انهو يوافق على فتح الصفحات في بداية الاشارة فقط وعدما يرتفع الخط الازرق بعد اشارة السار والايدي اكس لا يفتح صفقات كونه ينظر في بداية الاشارة فقط. كما في الصورة حيث اتى اشارة السار والايدي اكس في 1 ولكن خط الترند الخاص بالايدي اكس كان اسفل مستوى 22 الذي حددته. لكن في 2 ارتفع ليتجاوز المستوى المحدد لكن لم يفتح صفقة كونه ينظر في اول الاشارة فقط ولم اعرف كيف احل هذا الامر.
فكرة الاكسبرت ناجح بشكل عام في المدى الطويل فالصورة ادناه يظهر باك تست قبل اضافة الخط الازرق لل adx من بداية 2016 الى نهاية 2017 في فريم الاربع ساعات. في بعض السنين يصل التست ارباحه الى 4000 نقطة وفي بعض السنين ينخفظ الارباح الى 1000 نقطة على المدى السنوي. اذا عملنا على تطويره قليلاً يمكن ان نصل الى نتيجة جيدة لاكسبريت يعمل طول السنة.
ا
مرفق الاكسبيرت
Rushdi
07-03-2018, 08:36 AM
شكراً على المساعدة القيمة سوف احاول ان اطوره قدر الامكان ومشاركته في المنتدى
Ahmed
07-03-2018, 10:05 AM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت ياخد صورة للشارت في كل مرة يفتح فيها صفقة جديده
ويحتفظ الصور في مجلد Files في الميتاتريد
بارك الله فيك
محمد ابو الشيح
07-03-2018, 10:55 AM
سلام عليكم اخ حسن سالتك سوال رقم المشاركه #1026 (https://www.fxprg.com/vb/showthread.php?t=31457&p=878609&viewfull=1#post878609)
هل يوجد حل
سوال تاني
هل يوجد داله تقوم بحساب اخر 10 صفقات هل هي رايحه ام خاسره وشكرا
نفس السؤال اخ حسن هل يوجد دالة تحسب اجمالي اخر 10 صفقات هل هي رابحة او خاسره بالدولار وليس بالنقاط
kira-h
07-03-2018, 08:11 PM
شكراً على المساعدة القيمة سوف احاول ان اطوره قدر الامكان ومشاركته في المنتدى
بالتوفيق إن شاء الله
kira-h
07-03-2018, 08:20 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت ياخد صورة للشارت في كل مرة يفتح فيها صفقة جديده
ويحتفظ الصور في مجلد Files في الميتاتريد
بارك الله فيك
وعليكم السلام
لالتقاط صورة من الشاشة يمكنك استخام الدالة التالية :
bool ChartScreenShot(
long chart_id, // Chart ID رقم الشارت
string filename, // Symbol name اسم الزوج
int width, // Width مسافة العرض بالبيكسل
int height, // Height مسافة الطول بالبيكسل
ENUM_ALIGN_MODE align_mode=ALIGN_RIGHT // Alignment type نوع المحاذاة
);
ولمعرفة طول وعرض الشارت تلقائيا يمكنك استخدام الدالة ChartGetInteger
مثال :
int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0) ,
width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
ChartScreenShot(0,Symbol()+".gif",width,height);
وطبعا يمكنك استخدام أي مقاسات أخرى للصورة على حسب الشاشة لديك
ستستخدم الدالة ChartScreenShot أسفل دالة فتح الصفقة مباشرة (OrderSend)
أما حفظ الصورة بمسار آخر غير ممكن إلا باستخدام لغة أخرى أو مكتبة خارجية
Ahmed
08-03-2018, 08:35 PM
وعليكم السلام
لالتقاط صورة من الشاشة يمكنك استخام الدالة التالية :
bool ChartScreenShot(
long chart_id, // Chart ID رقم الشارت
string filename, // Symbol name اسم الزوج
int width, // Width مسافة العرض بالبيكسل
int height, // Height مسافة الطول بالبيكسل
ENUM_ALIGN_MODE align_mode=ALIGN_RIGHT // Alignment type نوع المحاذاة
);
ولمعرفة طول وعرض الشارت تلقائيا يمكنك استخدام الدالة ChartGetInteger
مثال :
int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0) ,
width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
ChartScreenShot(0,Symbol()+".gif",width,height);
وطبعا يمكنك استخدام أي مقاسات أخرى للصورة على حسب الشاشة لديك
ستستخدم الدالة ChartScreenShot أسفل دالة فتح الصفقة مباشرة (OrderSend)
أما حفظ الصورة بمسار آخر غير ممكن إلا باستخدام لغة أخرى أو مكتبة خارجية
بارك الله فيك اخي حسن ووسع الله في رزقك
Ahmed
08-03-2018, 09:15 PM
بارك الله فيك اخي حسن
نجحت طريقة اخذ صورة من الشارت
اخي حسن هل يمكن اخذ صورة لجميع التايم فريم لهذا الزوج
فمثلا انا فاتح شارت الدقيقة والخمس دقايق والربع ساعه
هل يمكن للاكسبيرت اخذ صورة لجميع هذه الشارتات اذا فتحت صفقة على هذا الزوج
بارك الله فيك
kira-h
08-03-2018, 09:39 PM
بارك الله فيك اخي حسن
نجحت طريقة اخذ صورة من الشارت
اخي حسن هل يمكن اخذ صورة لجميع التايم فريم لهذا الزوج
فمثلا انا فاتح شارت الدقيقة والخمس دقايق والربع ساعه
هل يمكن للاكسبيرت اخذ صورة لجميع هذه الشارتات اذا فتحت صفقة على هذا الزوج
بارك الله فيك
وإياك اخي
يجب ان تضع الاكسبيرت على كل فريم تريد أخذ صورة منه
kira-h
08-03-2018, 10:05 PM
نفس السؤال اخ حسن هل يوجد دالة تحسب اجمالي اخر 10 صفقات هل هي رابحة او خاسره بالدولار وليس بالنقاط
السلام عليكم
بداية سنقوم بعمل دالة لمعرفة توقيت إغلاق الصفقة حسب رقمها بالترتيب يعني بدلالة bars كالتالي :
datetime BarTime(int bars)
{
int cnt;
for(int i=OrdersHistoryTotal();i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
cnt++;
if(cnt==bars)return(OrderCloseTime());
}
}
}
return(0);
}
ثم دالة تحسب اجمالي الربح بداية من توقيت إغلاق الصفقة نتيجة الدالة السابقة كالتالي :
double Profit(int bars)
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit();
if(sy==Symbol()&&mn==MagicNo&&OrderCloseTime()>=BarTime(bars))
{
pts+=pt;
}
}
return(pts);
}
فيكون الربح لاجمالي آخر 5 صفقات كالتالي :
Profit(5);
sabil
09-03-2018, 12:23 AM
اخي حسن اريد مساعدة ضروري
هل يوجد دالة او طريقة تجعل الاكسبرت يغير رقم الماجيك نمبر كل مرة يفتح فيها صفقات
على سبيل المثال :
ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 1
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 1
ثم ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 2
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 2
ثم ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 3
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 3
وهكذا وهكذا مع امكانية وضع حد اقصى لعدد الماجيك نمبر .....
ارجو الافادة
kira-h
09-03-2018, 05:58 PM
اخي حسن اريد مساعدة ضروري
هل يوجد دالة او طريقة تجعل الاكسبرت يغير رقم الماجيك نمبر كل مرة يفتح فيها صفقات
على سبيل المثال :
ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 1
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 1
ثم ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 2
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 2
ثم ظهر اشارة شراء فيقوم الاكسبرت بفتح صفقة شراء بماجيك نمبر رقمه 3
ثم ظهر اشارة بيع فيقوم الاكسبرت بفتح صفقة بيع بماجيك نمبر رقمه 3
وهكذا وهكذا مع امكانية وضع حد اقصى لعدد الماجيك نمبر .....
ارجو الافادة
سنقوم بعمل دالة حساب الصفقات بدلالة الماجك نمبر والنوع كالتالي :
int Orderscnt(int Magic,int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
cnt++;
}
}
}
return(cnt);
}
ودالة تستخرج ماجك نمبر آخر صفقة مفتوحة بدلالة النوع كالتالي :
int LastMagic(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
string cm=OrderComment();
if(sy==Symbol()&&cm=="Kira-h"&&ty==type)
{
return(mn);
}
}
return(0);
}
ثم الشروط كالتالي :
input int MaxMagicNo=5;//أقصى ماجك نمبر
void OnTick()
{
if(Orderscnt(LastMagic(OP_BUY)+1,OP_BUY)==0&&(LastMagic(OP_BUY)+1)<MaxMagicNo)
{
int tk1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),5*Q,0,0,"Kira-h",LastMagic(OP_BUY)+1,0,Blue);
}
if(Orderscnt(LastMagic(OP_SELL)+1,OP_SELL)==0&&(LastMagic(OP_SELL)+1)<MaxMagicNo)
{
int tk2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoubl e(Bid,Digits),5*Q,0,0,"Kira-h",LastMagic(OP_SELL)+1,0,Red);
}
}
sabil
09-03-2018, 06:13 PM
سنقوم بعمل دالة حساب الصفقات بدلالة الماجك نمبر والنوع كالتالي :
int Orderscnt(int Magic,int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
cnt++;
}
}
}
return(cnt);
}
ودالة تستخرج ماجك نمبر آخر صفقة مفتوحة بدلالة النوع كالتالي :
int LastMagic(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
string cm=OrderComment();
if(sy==Symbol()&&cm=="Kira-h"&&ty==type)
{
return(mn);
}
}
return(0);
}
ثم الشروط كالتالي :
input int MaxMagicNo=5;//أقصى ماجك نمبر
void OnTick()
{
if(Orderscnt(LastMagic(OP_BUY)+1,OP_BUY)==0&&(LastMagic(OP_BUY)+1)<MaxMagicNo)
{
int tk1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),5*Q,0,0,"Kira-h",LastMagic(OP_BUY)+1,0,Blue);
}
if(Orderscnt(LastMagic(OP_SELL)+1,OP_SELL)==0&&(LastMagic(OP_SELL)+1)<MaxMagicNo)
{
int tk2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoubl e(Bid,Digits),5*Q,0,0,"Kira-h",LastMagic(OP_SELL)+1,0,Red);
}
}
الف شكر ياغالي
طيب هل بعد ما يوصل للحد الاقصى من الماجيك نمبر سيعيد فتح الصفقات مرة اخرى من بداية الماجيك نمبر؟
بمعنى
لو انا حددت الماجيك برقم 5
ثم وصلت الصفقات للماجيك رقم 5
هل سيتوقف الاكسبرت عن فتح الصفقات ام سيقوم باعادة الفتح من جديد بماجيك رقم 1 ؟
لاني اريده يعيد الامر من جديد بعد وصوله الحد الاقصى
kira-h
09-03-2018, 06:44 PM
الف شكر ياغالي
طيب هل بعد ما يوصل للحد الاقصى من الماجيك نمبر سيعيد فتح الصفقات مرة اخرى من بداية الماجيك نمبر؟
بمعنى
لو انا حددت الماجيك برقم 5
ثم وصلت الصفقات للماجيك رقم 5
هل سيتوقف الاكسبرت عن فتح الصفقات ام سيقوم باعادة الفتح من جديد بماجيك رقم 1 ؟
لاني اريده يعيد الامر من جديد بعد وصوله الحد الاقصى
نعم سيتوقف عن فتح الصفقة ولكن سيتم فتح الصفقات من جديد بعد إغلاق آخر صفقة
sabil
09-03-2018, 08:23 PM
نعم سيتوقف عن فتح الصفقة ولكن سيتم فتح الصفقات من جديد بعد إغلاق آخر صفقة
للاسف هذا ما لا اريده
انا عايز يفتح كالاتي بنظام الدورة
لو قلنا الحد الاقصى من الماجيك نمبر يساوي 3
يبقى يفتح الصفقات كالاتي :-
الاوردر الشراء الاول = ماجيك نمبر 1
الاوردرالشراء الثاني = ماجيك نمبر 2
الاوردر الشراء الثالث = ماجيك نمبر 3
الاوردر الشراء الرابع = ماجيك نمبر 1
الاوردرالشراء الخامس = ماجيك نمبر 2
الاوردر الشراء السادس = ماجيك نمبر 3
الاوردر الشراء السابع = ماجيك نمبر 1
الاوردرالشراء الثامن = ماجيك نمبر 2
الاوردر الشراء التاسع = ماجيك نمبر 3
وهكذا مع صفقات البيع ...
ملحوظة : نحسب الماجيك على الصفقات المفتوحة فقط ولا علاقة لنا بما اغلقت
kira-h
09-03-2018, 10:39 PM
للاسف هذا ما لا اريده
انا عايز يفتح كالاتي بنظام الدورة
لو قلنا الحد الاقصى من الماجيك نمبر يساوي 3
يبقى يفتح الصفقات كالاتي :-
الاوردر الشراء الاول = ماجيك نمبر 1
الاوردرالشراء الثاني = ماجيك نمبر 2
الاوردر الشراء الثالث = ماجيك نمبر 3
الاوردر الشراء الرابع = ماجيك نمبر 1
الاوردرالشراء الخامس = ماجيك نمبر 2
الاوردر الشراء السادس = ماجيك نمبر 3
الاوردر الشراء السابع = ماجيك نمبر 1
الاوردرالشراء الثامن = ماجيك نمبر 2
الاوردر الشراء التاسع = ماجيك نمبر 3
وهكذا مع صفقات البيع ...
ملحوظة : نحسب الماجيك على الصفقات المفتوحة فقط ولا علاقة لنا بما اغلقت
إذن ستصبح الشروط كالتالي :
void OnTick()
{
int magicB=LastMagic(OP_BUY)+1,
magicS=LastMagic(OP_SELL)+1;
if(magicB==MaxMagicNo)magicB=1;
if(magicS==MaxMagicNo)magicS=1;
if(Orderscnt(magicB,OP_BUY)==0)
{
int tk1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),5*Q,0,0,"Kira-h",magicB,0,Blue);
}
if(Orderscnt(magicS,OP_SELL)==0)
{
int tk2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoubl e(Bid,Digits),5*Q,0,0,"Kira-h",magicS,0,Red);
}
}
sabil
09-03-2018, 11:24 PM
إذن ستصبح الشروط كالتالي :
void OnTick()
{
int magicB=LastMagic(OP_BUY)+1,
magicS=LastMagic(OP_SELL)+1;
if(magicB==MaxMagicNo)magicB=1;
if(magicS==MaxMagicNo)magicS=1;
if(Orderscnt(magicB,OP_BUY)==0)
{
int tk1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),5*Q,0,0,"Kira-h",magicB,0,Blue);
}
if(Orderscnt(magicS,OP_SELL)==0)
{
int tk2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoubl e(Bid,Digits),5*Q,0,0,"Kira-h",magicS,0,Red);
}
}
شكراً ياغالي
جاري التجربة
sabil
10-03-2018, 12:03 AM
إذن ستصبح الشروط كالتالي :
void OnTick()
{
int magicB=LastMagic(OP_BUY)+1,
magicS=LastMagic(OP_SELL)+1;
if(magicB==MaxMagicNo)magicB=1;
if(magicS==MaxMagicNo)magicS=1;
if(Orderscnt(magicB,OP_BUY)==0)
{
int tk1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),5*Q,0,0,"Kira-h",magicB,0,Blue);
}
if(Orderscnt(magicS,OP_SELL)==0)
{
int tk2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoubl e(Bid,Digits),5*Q,0,0,"Kira-h",magicS,0,Red);
}
}
بس اتأكد من الماجيك نمبر ازاي؟
واعرف منين الماجيك نمبر بتاع كل صفقة؟
kira-h
10-03-2018, 05:06 PM
بس اتأكد من الماجيك نمبر ازاي؟
واعرف منين الماجيك نمبر بتاع كل صفقة؟
ستضع الماوس على اشارة (سهم) الصفقة المفتوحة وسترى تفاصيل الصفقة من بينها الكومنت والماجك نمبر
أما بالهيستوري يمكنك اضافة خانة الكومنت بالتفاصيل
sabil
10-03-2018, 11:01 PM
ستضع الماوس على اشارة (سهم) الصفقة المفتوحة وسترى تفاصيل الصفقة من بينها الكومنت والماجك نمبر
أما بالهيستوري يمكنك اضافة خانة الكومنت بالتفاصيل
معلش هغلبك معايا شوية
ممكن توضيح بالاسكرين شوت
sabil
10-03-2018, 11:05 PM
ستضع الماوس على اشارة (سهم) الصفقة المفتوحة وسترى تفاصيل الصفقة من بينها الكومنت والماجك نمبر
أما بالهيستوري يمكنك اضافة خانة الكومنت بالتفاصيل
خلاص جبتها
اصلي كنت مسحت الاوبجكت ليست فمش فهمت قصدك
لكن فتحت شارت اخر يحتوي على الاشارة ووضعت السهم فاتضحت التفاصيل
شكراً يابرنس
جاري التجربة عند افتتاح السوق
sabil
10-03-2018, 11:19 PM
قمت بعمل باكتيست سريع ووضعت مؤشر الماوس على السهم وفتح اكثر من 4 صفقات لكل نوع وكلهم بماجيك نمبر 1 فقط لم يغيرها ارفقتلك الاكسبرت مفتوح لتعديل الخطأ
samizhraldeen
11-03-2018, 05:00 PM
السلام عليكم اخي كيرا
لا يوجد مشكلة اذا رد علي احد الاعضاء
احاول ان ابرمج اكسبيرت وكود المؤشر في داخله
اريد ان يكون المؤشر مندمج مع الاكسبيرت
يعني لا اريد ان استدعيه من الخارج
هل يمكنك مساعدتي في اعطائي مثال لاحد الاكسبيرتات مع شرحك ليه بالعربي
شكرا ليك اخي كيرا
kira-h
11-03-2018, 05:21 PM
قمت بعمل باكتيست سريع ووضعت مؤشر الماوس على السهم وفتح اكثر من 4 صفقات لكل نوع وكلهم بماجيك نمبر 1 فقط لم يغيرها ارفقتلك الاكسبرت مفتوح لتعديل الخطأ
يوجد لديك خطأ بسيط حيث لم تستخدم الكومنت الخاص بك والموجود بدالة فتح الصفقة
الصحيح بدالة الماجك نمبر كالتالي:
cm=="Aymoon1"
لماذا استخدمنا شرط الكومنت بالدالة؟
حتى يتعامل الاكسبيرت مع صفقاته الخاصة ذات الكومنت المستخدم، ولا ينظر لصفقات أخرى مفتوحة سواء يدوية او لاكسبيرت آخر بكومنت مختلف
مرفق الاكسبيرت
Aminox
11-03-2018, 06:50 PM
مرحبا أخي حسن
قمت ببرمجة إكسبيرت يقوم بفتح صفقة buy
إذا كانت الشمعة التانية حمراء والأولى خضراء
والعكس إذا كانت الشمعة التانية خضراء والأولى حمراء
يقوم بفتح صفقة sell
المشكل لدي في الستوب و التيك أريده أن ينتهي من الصفقة
عند إغلاق الشمعة التي فتحت عليها الصفقة على ربح أو خسارة
-- يقوم الإكسبيرت بفتح صفقة بيع أو الشراء وعند إغلاق الشمعة
تغلق الصفقة أيضا في إنتضظار صفقة أخرى الإكسبيرت في المرفقات
يعمل على فريم الأربع ساعات شكرا لك كثيرا أستاذ حسن
sabil
11-03-2018, 08:48 PM
يوجد لديك خطأ بسيط حيث لم تستخدم الكومنت الخاص بك والموجود بدالة فتح الصفقة
الصحيح بدالة الماجك نمبر كالتالي:
cm=="Aymoon1"
لماذا استخدمنا شرط الكومنت بالدالة؟
حتى يتعامل الاكسبيرت مع صفقاته الخاصة ذات الكومنت المستخدم، ولا ينظر لصفقات أخرى مفتوحة سواء يدوية او لاكسبيرت آخر بكومنت مختلف
مرفق الاكسبيرت
جزاك الله خيرا
اشتغل تمام في الباكتست
جاري التجربة ..
kira-h
11-03-2018, 11:00 PM
جزاك الله خيرا
اشتغل تمام في الباكتست
جاري التجربة ..
بالتوفيق إن شاء الله
sabil
12-03-2018, 12:00 AM
بقولك ياغالي
لو انا راسم خط ترند يدوي
او خط افقي يدوي
وايضا في حالة لو رسمت خطين ترند وخطين افقيين
ينفع اخلي الاكسبرت يشتغل عليه عند كسره ؟
والدالة تتكتب ازاي؟
mr.forex
12-03-2018, 12:18 AM
بقولك ياغالي
لو انا راسم خط ترند يدوي
او خط افقي يدوي
وايضا في حالة لو رسمت خطين ترند وخطين افقيين
ينفع اخلي الاكسبرت يشتغل عليه عند كسره ؟
والدالة تتكتب ازاي؟
حسب ما قرأت سابقا للأستاذ حسن ينفع إن شاء الله
راجع المشاركة رقم 740 في موضوع أهم الدوال البرمجية
حاولت أرفق رابط المشاركة لكن لم يضبط الامر
Aminox
14-03-2018, 02:10 AM
مرحبا أخي حسن
قمت ببرمجة إكسبيرت يقوم بفتح صفقة buy
إذا كانت الشمعة التانية حمراء والأولى خضراء
والعكس إذا كانت الشمعة التانية خضراء والأولى حمراء
يقوم بفتح صفقة sell
المشكل لدي في الستوب و التيك أريده أن ينتهي من الصفقة
عند إغلاق الشمعة التي فتحت عليها الصفقة على ربح أو خسارة
-- يقوم الإكسبيرت بفتح صفقة بيع أو الشراء وعند إغلاق الشمعة
تغلق الصفقة أيضا في إنتضظار صفقة أخرى الإكسبيرت في المرفقات
يعمل على فريم الأربع ساعات شكرا لك كثيرا أستاذ حسن
هل من جواب أخي حسن جزاك الله خيرا
kira-h
14-03-2018, 02:47 AM
هل من جواب أخي حسن جزاك الله خيرا
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31456&p=844590&viewfull=1#post844590
Aminox
14-03-2018, 03:30 AM
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31456&p=844590&viewfull=1#post844590
جزاك الله خيرا أخي حسن
kira-h
14-03-2018, 05:44 PM
جزاك الله خيرا أخي حسن
وإياك أخي
والله الموفق
samizhraldeen
15-03-2018, 12:42 AM
السلام عليكم هل يمكنك الرد علي اخي كيرا
المشاركة رقمها 1060#
kira-h
15-03-2018, 01:32 AM
السلام عليكم اخي كيرا
لا يوجد مشكلة اذا رد علي احد الاعضاء
احاول ان ابرمج اكسبيرت وكود المؤشر في داخله
اريد ان يكون المؤشر مندمج مع الاكسبيرت
يعني لا اريد ان استدعيه من الخارج
هل يمكنك مساعدتي في اعطائي مثال لاحد الاكسبيرتات مع شرحك ليه بالعربي
شكرا ليك اخي كيرا
وعليكم السلام
ستقوم بنقل شروط الاشارة بالمؤشر الى الشروط بالاكسبيرت
اما إذا معادلات المؤشر معقدة فالافضل ان يتم استدعاؤها
samizhraldeen
15-03-2018, 01:40 AM
اي اخي ممكن مثال من عندك لاكسبيرت يوجد به المؤشر مندمج الكود مع الاكسبيرت
ويفضل يكون مؤشر من خارج المنصة وفقك الله
kira-h
15-03-2018, 06:13 PM
اي اخي ممكن مثال من عندك لاكسبيرت يوجد به المؤشر مندمج الكود مع الاكسبيرت
ويفضل يكون مؤشر من خارج المنصة وفقك الله
لا يوجد مثال لهذا
الفكرة واضحة وهي نسخ شروط الاشارة بالمؤشر ضمن شروط الاكسبيرت حسب ما تريد
وهناك الكثير من المؤشرات الخارجية لا تقبل هذا الأمر
sabil
16-03-2018, 11:41 AM
بقولك ياغالي
لو انا راسم خط ترند يدوي
او خط افقي يدوي
وايضا في حالة لو رسمت خطين ترند وخطين افقيين
ينفع اخلي الاكسبرت يشتغل عليه عند كسره ؟
والدالة تتكتب ازاي؟
ما زلت لم احصل على اجابة سؤالي
kira-h
16-03-2018, 05:58 PM
بقولك ياغالي
لو انا راسم خط ترند يدوي
او خط افقي يدوي
وايضا في حالة لو رسمت خطين ترند وخطين افقيين
ينفع اخلي الاكسبرت يشتغل عليه عند كسره ؟
والدالة تتكتب ازاي؟
لمعرفة سعر الترند ستستخدم الوظيفة
ObjectGetValueByShift(string name,int shift);
بحيث name اسم الترند و shift رقم الشمعة بمعنى قيمة الترند عند الشمعة shift
مثلا سعر ترند اسمه Trend عند الشمعة 1 هو
ObjectGetValueByShift("Trend",1);
لمعرفة سعر الخط الأفقى ستستخدم الوظيفة
ObjectGet(string name,int index)
بحيث name اسم الخط الأفقي، و index قيمة الخط مثلا OBJPROP_PRICE1 قيمة سعر الخط عند الشمعة 1
مثلا سعر خط اسمه Line عند الشمعة 1 هو
ObjectGet("Line",OBJPROP_PRICE1)
bahoma31
18-03-2018, 05:34 PM
السلام عليكم جميعا من فضلكم اخوتي انا واقع في مشكل منذ اكثر من اسبوع وجربت كل ما وقعت عليه عيني ولكن ولم اجد له حل والمشكلة هي كالتالي :
دخول الصفقة ويتم تحديد التيكت بروفيت ولا يتم تحديد الستوب لوس في كلا الحالتين سواء بيع او شراء
الان في الصفقة الاولى عندما يكون السعر عكس الشراء او البيع يتم الدخول في صفقة اخرى بنفس النوع عند تحقق الشروط وايضا بدون ستوب لوز ولكن بلوت مضاعف
الان عندما يكون هناك صفقتين اريد ان اجمع سعر دخول الصفقة الاولى مع سعر دخول الصفقة الثانية من نفس النوع واقسمه على اثنين فيصبح المتوسط نقط اقاف الصفقة الاخير على ربح والاولى على خسارة ولكن تتم تغطيتها من قبل الثانية لاننا دخبنا بلوت مضاعف
كيف انفذ هذا الامر اذا كانت هناك ثلاث او اربع صفقات من نفس النوع وشكرا مقدما
mr.forex
19-03-2018, 11:05 AM
السلام عليكم جميعا من فضلكم اخوتي انا واقع في مشكل منذ اكثر من اسبوع وجربت كل ما وقعت عليه عيني ولكن ولم اجد له حل والمشكلة هي كالتالي :
دخول الصفقة ويتم تحديد التيكت بروفيت ولا يتم تحديد الستوب لوس في كلا الحالتين سواء بيع او شراء
الان في الصفقة الاولى عندما يكون السعر عكس الشراء او البيع يتم الدخول في صفقة اخرى بنفس النوع عند تحقق الشروط وايضا بدون ستوب لوز ولكن بلوت مضاعف
الان عندما يكون هناك صفقتين اريد ان اجمع سعر دخول الصفقة الاولى مع سعر دخول الصفقة الثانية من نفس النوع واقسمه على اثنين فيصبح المتوسط نقط اقاف الصفقة الاخير على ربح والاولى على خسارة ولكن تتم تغطيتها من قبل الثانية لاننا دخبنا بلوت مضاعف
كيف انفذ هذا الامر اذا كانت هناك ثلاث او اربع صفقات من نفس النوع وشكرا مقدما
وعليكم السلام ورحمة الله وبركاته
أهلا أخي
حسب ما فهمت منك المقصود هو طريقة المضاعفات المعروفة
في موضوع الأستاذ حسن " أهم الدوال البرمجية " موجود شرح للطريقة
https://www.fxprg.com/vb/showthread.php?t=31456&page=2&p=844594&viewfull=1#post844594
bahoma31
19-03-2018, 12:28 PM
وعليكم السلام ورحمة الله وبركاته
أهلا أخي
حسب ما فهمت منك المقصود هو طريقة المضاعفات المعروفة
في موضوع الأستاذ حسن " أهم الدوال البرمجية " موجود شرح للطريقة
https://www.fxprg.com/vb/showthread.php?t=31456&page=2&p=844594&viewfull=1#post844594
شكرا اخي على اهتمامك ولكن المضاعفات وجدت لها حلا اريد فقط كيف اجد متوسط نقاط دخول الصفقات التي هي من نوع واحد واغلاقهم سواء كانوا ربح او خسارة
mr.forex
19-03-2018, 01:01 PM
شكرا اخي على اهتمامك ولكن المضاعفات وجدت لها حلا اريد فقط كيف اجد متوسط نقاط دخول الصفقات التي هي من نوع واحد واغلاقهم سواء كانوا ربح او خسارة
أنا مثلك أتعلم أخي ولسا أنا في البداية وبتعلم الأبجديات
لكن أتوقع متوسط نقاط دخول الصفقات هو جمع أسعار الإفتتاح لكل صفقة ثم أقسمها على عددها
الناتج هو عبارة عن متوسط نقطة الدخول للصفقات
إذا وصل السعر إلى هذا المتوسط استخدم أمر الإغلاق سواء على ربح أو خسارة
bahoma31
19-03-2018, 01:38 PM
أنا مثلك أتعلم أخي ولسا أنا في البداية وبتعلم الأبجديات
لكن أتوقع متوسط نقاط دخول الصفقات هو جمع أسعار الإفتتاح لكل صفقة ثم أقسمها على عددها
الناتج هو عبارة عن متوسط نقطة الدخول للصفقات
إذا وصل السعر إلى هذا المتوسط استخدم أمر الإغلاق سواء على ربح أو خسارة
نعم بالنسبة للجانب الحسابي تكفلت به الان بقيت المشكلة في كتابة الامر هذه هي مشكلة اخي
mr.forex
19-03-2018, 02:22 PM
نعم بالنسبة للجانب الحسابي تكفلت به الان بقيت المشكلة في كتابة الامر هذه هي مشكلة اخي
الحمد لله الجانب الحسابي صحيح
بالنسبة للجانب العملي كان نفسي أساعد بس والله أنا في البداية وبتعلم أخي خصوصا نقطة جمع أسعار كل الصفقات المفتوحة
إن شاء الله يفيدك الأستاذ حسن ومنها كمان أتعلم وأستفيد من كيفية كتابة الكود
bahoma31
19-03-2018, 02:35 PM
الحمد لله الجانب الحسابي صحيح
بالنسبة للجانب العملي كان نفسي أساعد بس والله أنا في البداية وبتعلم أخي خصوصا نقطة جمع أسعار كل الصفقات المفتوحة
إن شاء الله يفيدك الأستاذ حسن ومنها كمان أتعلم وأستفيد من كيفية كتابة الكود
الله يعطيك الف صحة وعافية وانا متأكد انك ستصبح مبرمج محترف بعد فترة قليلة
kira-h
19-03-2018, 05:47 PM
السلام عليكم جميعا من فضلكم اخوتي انا واقع في مشكل منذ اكثر من اسبوع وجربت كل ما وقعت عليه عيني ولكن ولم اجد له حل والمشكلة هي كالتالي :
دخول الصفقة ويتم تحديد التيكت بروفيت ولا يتم تحديد الستوب لوس في كلا الحالتين سواء بيع او شراء
الان في الصفقة الاولى عندما يكون السعر عكس الشراء او البيع يتم الدخول في صفقة اخرى بنفس النوع عند تحقق الشروط وايضا بدون ستوب لوز ولكن بلوت مضاعف
الان عندما يكون هناك صفقتين اريد ان اجمع سعر دخول الصفقة الاولى مع سعر دخول الصفقة الثانية من نفس النوع واقسمه على اثنين فيصبح المتوسط نقط اقاف الصفقة الاخير على ربح والاولى على خسارة ولكن تتم تغطيتها من قبل الثانية لاننا دخبنا بلوت مضاعف
كيف انفذ هذا الامر اذا كانت هناك ثلاث او اربع صفقات من نفس النوع وشكرا مقدما
وعليكم السلام
ستقوم بعمل دالة تحسب المتوسط السعري بدلالة نوع الصفقات كالتالي :
double Av_Prices(int type)
{
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(type)>0)return(Price/Orderscnt(type));
else return(0);
}
بحيث
Orderscnt(type) دالة عدد الصفقات المفتوحة بدلالة النوع كالتالي :
int Orderscnt(int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()==type)
{
cnt++;
}
}
}
return(cnt);
}
فيكون المتوسط السعري لصفقات الشراء
Av_Prices(OP_BUY);
والمتوسط السعري لصفقات البيع
Av_Prices(OP_SELL);
الان سنحتاج إلى دالة الموديفاي لتعديل الاهداف والستوبات عند المتوسط السعري وهي كالتالي :
void AvTakeProfit(int type)
{
double SLS=Av_Prices(OP_SELL);
double SLB=Av_Prices(OP_BUY);
double TPS=Av_Prices(OP_SELL);
double TPB=Av_Prices(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPB ,Digits)&&Bid<TPB)m2=OrderModify(tk,op,sl,TPB,0,Red);
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPS ,Digits)&&Ask>TPS)m1=OrderModify(tk,op,sl,TPS,0,Blue);
}
}
}
}
وتقوم باستدعائها بالدالة الرئيسية كالتالي :
void OnTick()
{
if(Orderscnt(OP_BUY)>1)AvTakeProfit(OP_BUY);
if(Orderscnt(OP_SELL)>1)AvTakeProfit(OP_SELL);
}
Aminox
19-03-2018, 06:02 PM
السلام عليكم
أخي حسن إستعصى علي أمرا في برمجة إكسبيرت
وهو على الشكل التالي عند تنزيل الإكسبيرت على الشارت
يقوم بفتح صفقة buy - ستوب 50نقطة وأمر معلق buystop على بعد 50نقطة
عندما يقوم بضرب الأور معلق إذن 50 نقطة ربح يقوم بتحريك الستوب 50 نقطة أيضا
أي عند الستوب للصفقة الجديدة و هكذا إلى حين رجوع السعر وضرب الستوب في هذه الحالة
يكون ضرب الستوب للصفقات كلها ويقوم بفتح صفقة sell ستوب 50 نقطة و أمر معلق sellstop
حاولت وحاولت لكن دون جدوى ... أتمنا أن تساعدني في حل هذا الإكسبيرت
صورة للتوضيح و الإكسبيرت في المرفقات جزاك الله خيرا
5978
bahoma31
19-03-2018, 07:35 PM
شكرا لك لقد فعلتها ونجح الامر بارك الله فيك
mr.forex
20-03-2018, 08:24 AM
وعليكم السلام
ستقوم بعمل دالة تحسب المتوسط السعري بدلالة نوع الصفقات كالتالي :
double Av_Prices(int type)
{
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(type)>0)return(Price/Orderscnt(type));
else return(0);
}
بحيث
Orderscnt(type) دالة عدد الصفقات المفتوحة بدلالة النوع كالتالي :
int Orderscnt(int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()==type)
{
cnt++;
}
}
}
return(cnt);
}
فيكون المتوسط السعري لصفقات الشراء
Av_Prices(OP_BUY);
والمتوسط السعري لصفقات البيع
Av_Prices(OP_SELL);
الان سنحتاج إلى دالة الموديفاي لتعديل الاهداف والستوبات عند المتوسط السعري وهي كالتالي :
void AvTakeProfit(int type)
{
double SLS=Av_Prices(OP_SELL);
double SLB=Av_Prices(OP_BUY);
double TPS=Av_Prices(OP_SELL);
double TPB=Av_Prices(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPB ,Digits)&&Bid<TPB)m2=OrderModify(tk,op,sl,TPB,0,Red);
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPS ,Digits)&&Ask>TPS)m1=OrderModify(tk,op,sl,TPS,0,Blue);
}
}
}
}
وتقوم باستدعائها بالدالة الرئيسية كالتالي :
void OnTick()
{
if(Orderscnt(OP_BUY)>1)AvTakeProfit(OP_BUY);
if(Orderscnt(OP_SELL)>1)AvTakeProfit(OP_SELL);
}
ماشاء الله تبارك الله كود إحترافي مشرفنا العزيز حسن
الله يزيدك من علمه يا رب ويخليك لنا
kira-h
20-03-2018, 06:25 PM
شكرا لك لقد فعلتها ونجح الامر بارك الله فيك
ماشاء الله تبارك الله كود إحترافي مشرفنا العزيز حسن
الله يزيدك من علمه يا رب ويخليك لنا
وإياكم
والله الموفق
Aminox
20-03-2018, 06:43 PM
السلام عليكم
أخي حسن إستعصى علي أمرا في برمجة إكسبيرت
وهو على الشكل التالي عند تنزيل الإكسبيرت على الشارت
يقوم بفتح صفقة buy - ستوب 50نقطة وأمر معلق buystop على بعد 50نقطة
عندما يقوم بضرب الأور معلق إذن 50 نقطة ربح يقوم بتحريك الستوب 50 نقطة أيضا
أي عند الستوب للصفقة الجديدة و هكذا إلى حين رجوع السعر وضرب الستوب في هذه الحالة
يكون ضرب الستوب للصفقات كلها ويقوم بفتح صفقة sell ستوب 50 نقطة و أمر معلق sellstop
حاولت وحاولت لكن دون جدوى ... أتمنا أن تساعدني في حل هذا الإكسبيرت
صورة للتوضيح و الإكسبيرت في المرفقات جزاك الله خيرا
5978
هل من مساعدة أخي حسن
جزاك الله خيرا
kira-h
20-03-2018, 08:41 PM
السلام عليكم
أخي حسن إستعصى علي أمرا في برمجة إكسبيرت
وهو على الشكل التالي عند تنزيل الإكسبيرت على الشارت
يقوم بفتح صفقة buy - ستوب 50نقطة وأمر معلق buystop على بعد 50نقطة
عندما يقوم بضرب الأور معلق إذن 50 نقطة ربح يقوم بتحريك الستوب 50 نقطة أيضا
أي عند الستوب للصفقة الجديدة و هكذا إلى حين رجوع السعر وضرب الستوب في هذه الحالة
يكون ضرب الستوب للصفقات كلها ويقوم بفتح صفقة sell ستوب 50 نقطة و أمر معلق sellstop
حاولت وحاولت لكن دون جدوى ... أتمنا أن تساعدني في حل هذا الإكسبيرت
صورة للتوضيح و الإكسبيرت في المرفقات جزاك الله خيرا
وعليكم السلام
مرفق الاكسبيرت
abOmar
20-03-2018, 09:10 PM
مرحبا اخى حسن
لقد تابعت الدروس التعليمية الخاصه بك وهى اكثر من رائعة وبين سطورها الكثير من الاشياء المفيده
ولي بعض الاستفسارات واتمنى ان تتحملنى حتى استكمال هذه الدورة وجميع اسئلتى منها وما عليك آمر
سؤالى الاول ( ماهو الفرق بين دالة void و الدالة المنفصلة الاخيره return )
سؤالى الثانى ( عن البحث عن نوع الصفقة فى دالة لماذا نجعلها نعرفها int وهى كلمة محجوزه وليس رقم صحيح )
سؤالى الثالث (
double LastOpenPrice() { for(int i=OrdersTotal()‐1;i>=0;i‐‐) { bool s1=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo) { return(OrderOpenPrice)); } } return(0); }
ممكن تشرح لى من فضلك هذه الدالة
هل البحث بنبحث عن اخر صفقة برقم مثلا ولا ايه عشان مش فاهم دورة for هنا
Aminox
20-03-2018, 09:39 PM
وعليكم السلام
مرفق الاكسبيرت
شكرا لك كثيرا أخي حسن على متابعتك
ومساعدتك لنا وأعتدر منك كثيرا على الإزعاج
--- الإكسبيرت يقوم بفتح صفقة buy sell
في نقطة واحدة لا يتتبع المطلوب هل كان شرحي
للفكرة غير واضح أقوم بشرحه بطريقة أفضل سيدي ؟
جزاك الله خيرا
kira-h
21-03-2018, 02:46 AM
شكرا لك كثيرا أخي حسن على متابعتك
ومساعدتك لنا وأعتدر منك كثيرا على الإزعاج
--- الإكسبيرت يقوم بفتح صفقة buy sell
في نقطة واحدة لا يتتبع المطلوب هل كان شرحي
للفكرة غير واضح أقوم بشرحه بطريقة أفضل سيدي ؟
جزاك الله خيرا
ستقوم فقط باضافة شروط الدخول لكل من الشراء والبيع
غير ذلك يمكنك شرح الشروط
bahoma31
21-03-2018, 03:28 PM
السلام عليكم اخي كيرا من فظلك انا واقع في مشكل ولم اعرف كيف احله
انا اتعمد على الصفقات المعلقة اكثر من العادية ولهذا
اذا تحققت شروط الشراء وكانت هناك صفقة معلقة او مفتوحة من نفس النوع على مقربة مثلا 50 نقطة من مكان الذي يريد ان يضع فيه الصفقة الجديدة ... اريده ان يضعها
ونفس الشيئ بالنسبة للبيع
اذا تحققت شروط البيع وكانت هناك صفقة بيع معلقة او مفتوحة على مقربة مثلا 50 نقطة من مكان الصفقة الجديدة .... لا يفتحها ايضا ولك جزييييييييييييل الشكر وبارك الله فيك
kira-h
21-03-2018, 04:07 PM
السلام عليكم اخي كيرا من فظلك انا واقع في مشكل ولم اعرف كيف احله
انا اتعمد على الصفقات المعلقة اكثر من العادية ولهذا
اذا تحققت شروط الشراء وكانت هناك صفقة معلقة او مفتوحة من نفس النوع على مقربة مثلا 50 نقطة من مكان الذي يريد ان يضع فيه الصفقة الجديدة ... اريده ان يضعها
ونفس الشيئ بالنسبة للبيع
اذا تحققت شروط البيع وكانت هناك صفقة بيع معلقة او مفتوحة على مقربة مثلا 50 نقطة من مكان الصفقة الجديدة .... لا يفتحها ايضا ولك جزييييييييييييل الشكر وبارك الله فيك
وعليكم السلام
السؤال او المطلوب غير واضح اخي
bahoma31
21-03-2018, 04:15 PM
وعليكم السلام
السؤال او المطلوب غير واضح اخي
انا اتبع استراتيجية وضع buylimit على مستوى 50 فيبوناتشي
واضع مضاعفات ان كانت الصفقة السابقة خاسرة
والان اريد اذا تحققت شروط وضع buylimit على مستوى 50 في موجة اخرى وكان بين هذه الباي ليميت والصفقة المفتوحة التي قبلها على سبيل المثال 50 بيبس ................. لا اريده ان يفتحها
bahoma31
21-03-2018, 04:30 PM
انا اتبع استراتيجية وضع buylimit على مستوى 50 فيبوناتشي
واضع مضاعفات ان كانت الصفقة السابقة خاسرة
والان اريد اذا تحققت شروط وضع buylimit على مستوى 50 في موجة اخرى وكان بين هذه الباي ليميت والصفقة المفتوحة التي قبلها على سبيل المثال 50 بيبس ................. لا اريده ان يفتحها
تفضل الصورة التوضيحية اخي
6011
kira-h
21-03-2018, 05:56 PM
انا اتبع استراتيجية وضع buylimit على مستوى 50 فيبوناتشي
واضع مضاعفات ان كانت الصفقة السابقة خاسرة
والان اريد اذا تحققت شروط وضع buylimit على مستوى 50 في موجة اخرى وكان بين هذه الباي ليميت والصفقة المفتوحة التي قبلها على سبيل المثال 50 بيبس ................. لا اريده ان يفتحها
تفضل الصورة التوضيحية اخي
تقصد حذف الأمر المعلق عندما تكون المسافة بين السعر الحالي وسعر الأمر أكبر من او يساوي 50 نقطة ؟
bahoma31
21-03-2018, 06:35 PM
تقصد حذف الأمر المعلق عندما تكون المسافة بين السعر الحالي وسعر الأمر أكبر من او يساوي 50 نقطة ؟
نعم نعم نعم
يا اما حذفه او عدم تنفيذه اصلا وشكراااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا ااااااا
kira-h
21-03-2018, 11:51 PM
نعم نعم نعم
يا اما حذفه او عدم تنفيذه اصلا وشكراااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا اااااااااااااااااااااااااااااااااااااااااااااااااا ااااااا
ارفق الكود الذي قمت بعمله للتعديل عليه، فلا اعلم ماهية الدوال التي استخدمتها
fxover
22-03-2018, 01:15 AM
اخي العزيز حسن
كيف يمكن عمل تنبيه لمؤشر يرسم هستوجرام على التشارت
التنبيه عند وصول او ملامسة الهستوجرام ...
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_DASHDOT,5,clr Red)
bahoma31
22-03-2018, 01:32 AM
حولت بهذه الطريقة لكنها لم تنجح
espace=large*Point;
sasanow=MathAbs(LastOrderCurrent("OpenPrice",OP_SELL)-ma_50); //if(sasanow<Point*degit){sasanow=0;}
babanow=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-ma_50); //if(babanow<Point*degit){babanow=0;}
sasalimit=MathAbs(LastOrderCurrent("OpenPrice",OP_SELLLIMIT)-ma_50); //if(sasalimit<Point*degit){sasalimit=0;}
babalimit=MathAbs(LastOrderCurrent("OpenPrice",OP_BUYLIMIT)-ma_50); //if(babalimit<Point*degit){babalimit=0;}
large هي عدد النقاط التي احددها انا
و ma_50 هو مستوى 50 فيبوناتشي
if(Orderscnt(OP_BUY)>1 && (babanow && babalimit)> espace) orderdeletbuy();if(Orderscnt(OP_SELL)>1 && (sasanow && sasalimit)> espace)orderdeletsell();
وضعت هذه الشروط لكنها لم تنجح
kira-h
22-03-2018, 06:45 AM
حولت بهذه الطريقة لكنها لم تنجح
espace=large*Point;
sasanow=MathAbs(LastOrderCurrent("OpenPrice",OP_SELL)-ma_50); //if(sasanow<Point*degit){sasanow=0;}
babanow=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-ma_50); //if(babanow<Point*degit){babanow=0;}
sasalimit=MathAbs(LastOrderCurrent("OpenPrice",OP_SELLLIMIT)-ma_50); //if(sasalimit<Point*degit){sasalimit=0;}
babalimit=MathAbs(LastOrderCurrent("OpenPrice",OP_BUYLIMIT)-ma_50); //if(babalimit<Point*degit){babalimit=0;}
large هي عدد النقاط التي احددها انا
و ma_50 هو مستوى 50 فيبوناتشي
if(Orderscnt(OP_BUY)>1 && (babanow && babalimit)> espace) orderdeletbuy();if(Orderscnt(OP_SELL)>1 && (sasanow && sasalimit)> espace)orderdeletsell();
وضعت هذه الشروط لكنها لم تنجح
الصحيح كالتالي:
sasa=MathAbs(LastOrderCurrent("OpenPrice",OP_SELL)-LastOrderCurrent("OpenPrice",OP_SELLLIMIT));
baba=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_BUYLIMIT));
if(Orderscnt(OP_BUY)>0&&Orderscnt(OP_BUYLIMIT)>0&&bab>espace*Point)orderdeletbuy();
if(Orderscnt(OP_SELL)>0&&Orderscnt(OP_SELLLIMIT)>0&&sasa>espace*Point)orderdeletsell();
kira-h
22-03-2018, 06:47 AM
اخي العزيز حسن
كيف يمكن عمل تنبيه لمؤشر يرسم هستوجرام على التشارت
التنبيه عند وصول او ملامسة الهستوجرام ...
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_DASHDOT,5,clr Red)
السلام عليكم
راجع المشاركة التالية رقم 740
https://www.fxprg.com/vb/showthread.php?t=31457&page=19&p=874388&viewfull=1#post874388
bahoma31
22-03-2018, 02:50 PM
الصحيح كالتالي:
sasa=MathAbs(LastOrderCurrent("OpenPrice",OP_SELL)-LastOrderCurrent("OpenPrice",OP_SELLLIMIT));
baba=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_BUYLIMIT));
if(Orderscnt(OP_BUY)>0&&Orderscnt(OP_BUYLIMIT)>0&&bab>espace*Point)orderdeletbuy();
if(Orderscnt(OP_SELL)>0&&Orderscnt(OP_SELLLIMIT)>0&&sasa>espace*Point)orderdeletsell();
اخي حسن لم تنجح معي ولكني عرفت السبب والان
اريد دالة تعطيني اقرب صفقة بيع مفتوحة الى ma_50 حتى لو لم تكن آخر صفقة بيع
بمعنى مثلا عندنا صفقة بيع رقم 38 وحاول الاكسبرت ان يفتح صفقات بيع ولكنه اغلقها لسبب آخر وهو الان يريد ان يفتح صفقة بيع رقم 50.
الان انا لا اريده ان يحدد لي الفراغ بين 50 و 49 التي اغلقت وانما اريده ان يحسب لي الفراغ بين 50 و 38
وآسف على الازعاج وبارك الله فيك
bahoma31
22-03-2018, 02:59 PM
اتمنى ان اكون قد وفقت في شرح المشكلة واعظرني على اسلوبي في الشرح وشكرا جزيلا
6033
kira-h
24-03-2018, 03:15 AM
اخي حسن لم تنجح معي ولكني عرفت السبب والان
اريد دالة تعطيني اقرب صفقة بيع مفتوحة الى ma_50 حتى لو لم تكن آخر صفقة بيع
بمعنى مثلا عندنا صفقة بيع رقم 38 وحاول الاكسبرت ان يفتح صفقات بيع ولكنه اغلقها لسبب آخر وهو الان يريد ان يفتح صفقة بيع رقم 50.
الان انا لا اريده ان يحدد لي الفراغ بين 50 و 49 التي اغلقت وانما اريده ان يحسب لي الفراغ بين 50 و 38
وآسف على الازعاج وبارك الله فيك
هذه الدالة تستخرج سعر أقرب صفقة أعلى من ma_50 بدلالة النوع كالتالي:
double LowestPrice(int type)
{
double c=EMPTY_VALUE;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()<c&&OrderOpenPrice()>ma_50)c=OrderOpenPrice();
}
}
}
return(c);
}
وهذه تستخرج سعر أقرب صفقة أقل من ma_50 بدلالة النوع كالتالي:
double HighestPrice(int type)
{
double c=0;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()>c&&OrderOpenPrice()<ma_50)c=OrderOpenPrice();
}
}
}
return(c);
}
السلام عليكم ورحمة الله وبركاته
هل يمكن برمجيا عمل اكسبيرت يفحص موقع معين لمعرفة قوة العملات وبناءا عليه يقوم بفتح الصفقات
وشكرا
kira-h
24-03-2018, 09:38 PM
السلام عليكم ورحمة الله وبركاته
هل يمكن برمجيا عمل اكسبيرت يفحص موقع معين لمعرفة قوة العملات وبناءا عليه يقوم بفتح الصفقات
وشكرا
وعليكم السلام
نعم ممكن ولكن باستخدام لغة برمجية أخرى مثل ++c أو من خلال مكتبات خارجية جاهزة
bahoma31
25-03-2018, 04:50 PM
هذه الدالة تستخرج سعر أقرب صفقة أعلى من ma_50 بدلالة النوع كالتالي:
double LowestPrice(int type)
{
double c=EMPTY_VALUE;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()<c&&OrderOpenPrice()>ma_50)c=OrderOpenPrice();
}
}
}
return(c);
}
وهذه تستخرج سعر أقرب صفقة أقل من ma_50 بدلالة النوع كالتالي:
double HighestPrice(int type)
{
double c=0;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()>c&&OrderOpenPrice()<ma_50)c=OrderOpenPrice();
}
}
}
return(c);
}
السلام عليكم استاذ حسن بارك الله فيك واعجز عن شكرك والله
سامحني ان اثقلت عليك استاذ حسن بأسئلتي ولكني والله احاول ان ابحث قبل ان اتجه اليك حتى اتعلم ولا ازعجك ايضا ولكن لا اجد ما احتاج اليه فأرجو ان تتحملنا قليلا
لقد استعملت الدالتين التي اعطيتني اياهما ونجح الامر مع الصفقة الاولى والثانية ، الحمدالله يحترم المسافة ولكن بعد الصفقة الثانية لا يحترم المسافة ويضع 3اوامر شراء واحد واراء الاخرى ب3نقاط بدون احتراء اي امر شراء يضع فقط وانا واضع نظام مضاعفات استاذ حسن وجربت ان اعرف المشكلة اين ولم انجح فممكن لو سمحت اعطيك الاكسبرت هذه المرة وتعالج لي المشكلة وتضيف اليه بعض لمساتك وارجوا ان تقول لي رأيك فيه واسأل الله ان يرزقك الفردوس الاعلى
Rushdi
25-03-2018, 05:00 PM
مساء الاخير اساتذتي الكرام لدي استفسار بسيط.
كيف استطيع كتابة كود ياخذ الاشارة من تقاطع الموفينك مع مؤشر اخر مثلاً كيف استطيع ان اكتب جملة يدمج الموفينك مع cci.
وشكراً مقدماً.
bahoma31
25-03-2018, 09:09 PM
مساء الاخير اساتذتي الكرام لدي استفسار بسيط.
كيف استطيع كتابة كود ياخذ الاشارة من تقاطع الموفينك مع مؤشر اخر مثلاً كيف استطيع ان اكتب جملة يدمج الموفينك مع cci.
وشكراً مقدماً.
السلام عليك صديقي انا استطيع ان افيدك فيما يخص شروط الموفينج وحدها اذا اردت وهي كالتالي
extern int TakeProfite=500;extern int StopLoss=100;
extern int magic_number=1234;
extern int fastma=21,slowma=5;
extern double pips;
double MarginPercent = 100;
double RiskPercent = 10;
double FixLots = 0.0;
double MaxLots = 3.0;
extern double LotSize;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
double tiket = Point;
pips=tiket;
double lot=MarketInfo(Symbol(),MODE_MINLOT);
if(lot<=1)LotSize=lot;
else LotSize= lot/1000;
Alert (lot);
int i=MarketInfo(SYMBOL_ASK,MODE_FREEZELEVEL);
//---
return(INIT_SUCCEEDED);
}
//
void OnTick()
{
//---
if(isnewcandle())chekformatrade();
}
bool isnewcandle()
{
static int barsOncart=0;
if(Bars == barsOncart)
return(false);
barsOncart=Bars;
return(true);
}
void chekformatrade()
{
double currentmovingfast=iMA(NULL,0,fastma,0,0,0,2);
double previousemovingfast=iMA(NULL,0,fastma,0,0,0,1);
double currentmovingslow=iMA(NULL,0,slowma,0,0,0,2);
double previousemovingslow=iMA(NULL,0,slowma,0,0,0,1);
if(previousemovingfast<previousemovingslow&¤tmovingfast>currentmovingslow)OrderEntry(0);
if(previousemovingfast>previousemovingslow&¤tmovingfast<currentmovingslow)OrderEntry(1);
}
void OrderEntry (int direction)
{
if(OrdersTotal()==0)
if(direction==0)
int buy=OrderSend(NULL,OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfite*pips),NULL,magic_ number,0,clrGreen);
if(OrdersTotal()==0)
if(direction==1)
int sell=OrderSend(NULL,OP_SELL,LotSize,Bid,3,Bid+(Sto pLoss*pips),Bid-(TakeProfite*pips),NULL,magic_number,0,clrRed);
}
اما فيما يخص المؤشر الاخر فلم استعمله في حياتي البرمجية
samizhraldeen
25-03-2018, 09:29 PM
السلام عليكم
مع انني فاتح موضوع برمجة بس حبيت اسال
شو هو كود الولنغر باند
اذا شمعة واحدة كان الهاي تاعها اعلى من العلوي باند واللو تاعها ادنى اللوالمتوسط شراء
وبالعكس للبع
اذا اللوالشمعة ادنى من المتوسط للباند والهاي للشمعة اعلى من العلوي بيع
اتشكركم
kira-h
25-03-2018, 09:36 PM
السلام عليكم
مع انني فاتح موضوع برمجة بس حبيت اسال
شو هو كود الولنغر باند
اذا شمعة واحدة كان الهاي تاعها اعلى من العلوي باند واللو تاعها ادنى اللوالمتوسط شراء
وبالعكس للبع
اذا اللوالشمعة ادنى من المتوسط للباند والهاي للشمعة اعلى من العلوي بيع
اتشكركم
وعليكم السلام
وضح بصورة من الشارت
Hatam
25-03-2018, 09:51 PM
السلام عليكم
انا جديد في المنتدى و لدي سؤال
كنت اعمل على اكسبرت خاص بي و لكن المشكلة انه يفتح صفقات كثيرة في نفس الشمعة
فهل من الممكن من احد الاخوة ان يعطينا دالة العمل مرة واحد في كل شمعة(يعمل عن افتتاح شمعة جديدة)
و هذا هو الكود الى حد الان6104
وشكرا جزيلا لكم
Hatam
25-03-2018, 10:57 PM
السلام عليكم
انا جديد في المنتدى و لدي سؤال
كنت اعمل على اكسبرت خاص بي و لكن المشكلة انه يفتح صفقات كثيرة في نفس الشمعة
فهل من الممكن من احد الاخوة ان يعطينا دالة العمل مرة واحد في كل شمعة(يعمل عن افتتاح شمعة جديدة)
و هذا هو الكود الى حد الان6104
وشكرا جزيلا لكم
خلاص عرفت كيف اعملها
ولكن لم انجح في اضافة خاصية مضاعفة اللوت عند الصفقة الخاسرة و العودة للوت البدائي عند الربح
مرفق الكود الجديد
6109
يرجى شرح كيفية اضافة خاصية المضاعفات
و لو امكن اضافتها للكود اعلاه مع وضع تعليق على الزيادة لكي افهم
و بارك الله فيكم
samizhraldeen
26-03-2018, 01:35 AM
وعليكم السلام
وضح بصورة من الشارت
اخي كيرا حفظك الله
الكود الي اريده لا يهم اذا الشمعة شرائية او بيعية
المهم ماذا تكون في الاول
اذا تكون في الاول لوو اسفل البولنغر المتوسط ثم تكون بعده هاي اعلى البولنغر العلوي يبقى اشارة بيع
واذا تكون هاي اعلى البولنغر العلوي ثم هبط السعر وتكون لو اسفل البولنغر المتوسط يبقى شراء
وهي صورة للتوضيح الشموع كلها التي وجدتها لن تفيد الى بعد الباك تيست
حتى اعرف اي الشمعة هي التي كونت هاي اعلى البولنغرالاعلى ثم لو اسفل البولنغر المتوسط
kira-h
26-03-2018, 03:42 AM
السلام عليك صديقي انا استطيع ان افيدك فيما يخص شروط الموفينج وحدها اذا اردت وهي كالتالي
extern int TakeProfite=500;extern int StopLoss=100;
extern int magic_number=1234;
extern int fastma=21,slowma=5;
extern double pips;
double MarginPercent = 100;
double RiskPercent = 10;
double FixLots = 0.0;
double MaxLots = 3.0;
extern double LotSize;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
double tiket = Point;
pips=tiket;
double lot=MarketInfo(Symbol(),MODE_MINLOT);
if(lot<=1)LotSize=lot;
else LotSize= lot/1000;
Alert (lot);
int i=MarketInfo(SYMBOL_ASK,MODE_FREEZELEVEL);
//---
return(INIT_SUCCEEDED);
}
//
void OnTick()
{
//---
if(isnewcandle())chekformatrade();
}
bool isnewcandle()
{
static int barsOncart=0;
if(Bars == barsOncart)
return(false);
barsOncart=Bars;
return(true);
}
void chekformatrade()
{
double currentmovingfast=iMA(NULL,0,fastma,0,0,0,2);
double previousemovingfast=iMA(NULL,0,fastma,0,0,0,1);
double currentmovingslow=iMA(NULL,0,slowma,0,0,0,2);
double previousemovingslow=iMA(NULL,0,slowma,0,0,0,1);
if(previousemovingfast<previousemovingslow&¤tmovingfast>currentmovingslow)OrderEntry(0);
if(previousemovingfast>previousemovingslow&¤tmovingfast<currentmovingslow)OrderEntry(1);
}
void OrderEntry (int direction)
{
if(OrdersTotal()==0)
if(direction==0)
int buy=OrderSend(NULL,OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfite*pips),NULL,magic_ number,0,clrGreen);
if(OrdersTotal()==0)
if(direction==1)
int sell=OrderSend(NULL,OP_SELL,LotSize,Bid,3,Bid+(Sto pLoss*pips),Bid-(TakeProfite*pips),NULL,magic_number,0,clrRed);
}
اما فيما يخص المؤشر الاخر فلم استعمله في حياتي البرمجية
راجع موضوع التطبيقات ستجد دوال معظم المؤشرات الرئيسية المعروفة
kira-h
26-03-2018, 03:44 AM
مساء الاخير اساتذتي الكرام لدي استفسار بسيط.
كيف استطيع كتابة كود ياخذ الاشارة من تقاطع الموفينك مع مؤشر اخر مثلاً كيف استطيع ان اكتب جملة يدمج الموفينك مع cci.
وشكراً مقدماً.
السلام عليكم
لا يمكن دمج مؤشر منفصل مع مؤشر على الشارت
وحتى لو مؤشرين منفصلين عن الشارت صعب الدمج بينهما خصوصا إذا القيم مختلفة
kira-h
26-03-2018, 03:57 AM
خلاص عرفت كيف اعملها
ولكن لم انجح في اضافة خاصية مضاعفة اللوت عند الصفقة الخاسرة و العودة للوت البدائي عند الربح
مرفق الكود الجديد
6109
يرجى شرح كيفية اضافة خاصية المضاعفات
و لو امكن اضافتها للكود اعلاه مع وضع تعليق على الزيادة لكي افهم
و بارك الله فيكم
تم التصحيح بالكود المرفق
ويمكنك معرفة المزيد بالموضوع المخصص لـأهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
kira-h
26-03-2018, 04:03 AM
اخي كيرا حفظك الله
الكود الي اريده لا يهم اذا الشمعة شرائية او بيعية
المهم ماذا تكون في الاول
اذا تكون في الاول لوو اسفل البولنغر المتوسط ثم تكون بعده هاي اعلى البولنغر العلوي يبقى اشارة بيع
واذا تكون هاي اعلى البولنغر العلوي ثم هبط السعر وتكون لو اسفل البولنغر المتوسط يبقى شراء
وهي صورة للتوضيح الشموع كلها التي وجدتها لن تفيد الى بعد الباك تيست
حتى اعرف اي الشمعة هي التي كونت هاي اعلى البولنغرالاعلى ثم لو اسفل البولنغر المتوسط
حياك الله أخي
الشروط كالتالي :
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,1),
dn=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,1),
md=(up+dn)/2;
if(High[1]>up&&Low[1]<md)//...buy
if(Low[1]<dn&&High[1]>md)//...sell
Rushdi
26-03-2018, 04:12 AM
السلام عليكم
لا يمكن دمج مؤشر منفصل مع مؤشر على الشارت
وحتى لو مؤشرين منفصلين عن الشارت صعب الدمج بينهما خصوصا إذا القيم مختلفة
شكراً استاذي الكريم لكن اعتقد اني لم افلح في شرح السؤال. عند وضع الموفينك على الشارت هناك خيار first indicator data. اي اضف الموفينج على مؤشر وحينما نختاره يضعه على المؤشر وليس على الشارت مباشرة. اعتقد حتمية وجود هذا الخيار في البرمجة لكثرة استخدامه في التحليل الفني لكن لكوني ضعيف في البرمجة ولاني لا اعرف الانكليزية جيداً لم افهم الشروحات الموجودة في المواقع الاجنبية.
شكراً مقدماً.
kira-h
26-03-2018, 04:38 AM
مرحبا اخى حسن
لقد تابعت الدروس التعليمية الخاصه بك وهى اكثر من رائعة وبين سطورها الكثير من الاشياء المفيده
ولي بعض الاستفسارات واتمنى ان تتحملنى حتى استكمال هذه الدورة وجميع اسئلتى منها وما عليك آمر
سؤالى الاول ( ماهو الفرق بين دالة void و الدالة المنفصلة الاخيره return )
سؤالى الثانى ( عن البحث عن نوع الصفقة فى دالة لماذا نجعلها نعرفها int وهى كلمة محجوزه وليس رقم صحيح )
سؤالى الثالث (
double LastOpenPrice() { for(int i=OrdersTotal()‐1;i>=0;i‐‐) { bool s1=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo) { return(OrderOpenPrice)); } } return(0); }
ممكن تشرح لى من فضلك هذه الدالة
هل البحث بنبحث عن اخر صفقة برقم مثلا ولا ايه عشان مش فاهم دورة for هنا
السلام عليكم
لم انتبه لمشاركتك
عموما
void دالة لا تعود بقيمة معينة لنتيجة ما، بل هي تعتبر دالة منفصلة خارج الدوال الرئيسية تقوم بتكوينها بها شروط معينة (مثل دالة التريلنغ أو اغلاق الصفقات...) ولكن لن تقوم بتنفيذ أي شيء إلا إذا ثم استدعائها بأحد الدوال الرئيسية،
أما دوال الغير void مثل double و int و bool و.... الغير الرئيسية هي بنفس مبدأ void ولكن الفرق انها دائما تعود بقيمة محددة return مثل دالة عدد الصفقات أو الربح... حتى تستخدمها بشروط معينة،
وكل هذا لاختصار الكود وسرعة المعالجة وتخفيف الضغط على الذاكرة العشوائية للحاسوب حيث تقوم باستدعاء الدالة عند الحاجة فقط وليس كل تكة سعرية مثلا او كل جزء من الثانية...
أما حلقة البحث for تعتبر أسهل انواع الحلقات وذلك لأن جميع عناصرها مجتمعة في مكان واحد، كما تقوم بتنفيذ قسم معين من البرنامج لعدد معروف ومحدد من المرات
مثال
int i;
for(i=0;i<15;i++)
Print(i);
بالسطر الأول قمنا بتعريف متغير ما عبارة عن عدد صحيح باسم i
السطر الثاني يحتوي الحلقة for والتي تتكون من الكلمة المحجوزة for وقوسين يحتويان بداخلهما على ثلاث تعبيرات مفصولين عن بعضهما البعض بالفاصلة المنقوطة
هذه التعبيرات الثلاثة هي تعبير ابتداء الحلقة وتعبير اختبار قيمة المتغير وتعبير زيادة قيمة المتغير
جسد الحلقة هو الكود الذي سينفذ الشروط اعلاها لعدد محدد من المرات في هذه الحلقة وهذا الكود هو
Print(i);
وفي مثالنا هذا العدد المحدد من المرات لتنفيذ الحلقة هو 15 مرة،
للمزيد من المعلومات راجع الكتب المرفقة بالموضوع التعليمي
والله الموفق
kira-h
26-03-2018, 04:57 AM
شكراً استاذي الكريم لكن اعتقد اني لم افلح في شرح السؤال. عند وضع الموفينك على الشارت هناك خيار first indicator data. اي اضف الموفينج على مؤشر وحينما نختاره يضعه على المؤشر وليس على الشارت مباشرة. اعتقد حتمية وجود هذا الخيار في البرمجة لكثرة استخدامه في التحليل الفني لكن لكوني ضعيف في البرمجة ولاني لا اعرف الانكليزية جيداً لم افهم الشروحات الموجودة في المواقع الاجنبية.
شكراً مقدماً.
نعم ممكن باستخدام المصفوفة iMAOnArray ولكن لا اعتقد انه يمكن بناء الشروط برمجيا لأن القيم مختلفة وتعتبر التقاطعات وهمية لا ترى إلا بالعين المجردة، وهذا المقصود من ردي السابق
ستجد امثلة لكثير من المؤشرات بالنت
وهذا مثال بسيط لدمج الموفينج مع الارس آي
int i;
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//--- main loops 1 and 2
for(i=0; i < limit; i++)
{
RSIBuffer[i]=iRSI(Symbol(),0,RSIPeriod,PRICE_CLOSE,i);
}
for(i=0; i < limit; i++)
{
MAofRSIBuffer[i]=iMAOnArray(RSIBuffer,0,MAofRSI,0,MA_method,i);
}
راجع الشرح بالموقع الرسمي للغة ويمكنك الترجمة من خلال متصفح الكروم
iMAOnArray (https://docs.mql4.com/indicators/imaonarray)
samizhraldeen
26-03-2018, 05:06 AM
حياك الله أخي
الشروط كالتالي :
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,1),
dn=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,1),
md=(up+dn)/2;
if(High[1]>up&&Low[1]<md)//...buy
if(Low[1]<dn&&High[1]>md)//...sell
اتشكرك اخي كيرا على المساعدة
up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,1) هذا البولنغر العلوي
dn=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,1)هذا البولنغر المتوسط مع اني اعرف ان MODE LOWER هو البولنغر السفلي
هل كلامي صح ام خطا
md=(up+dn)/2;ليش حضرتك جمعت و قسمت العالي على المتوسط وسميته md
kira-h
26-03-2018, 06:00 AM
اتشكرك اخي كيرا على المساعدة
up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,1) هذا البولنغر العلوي
dn=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,1)هذا البولنغر المتوسط مع اني اعرف ان MODE LOWER هو البولنغر السفلي
هل كلامي صح ام خطا
md=(up+dn)/2;ليش حضرتك جمعت و قسمت العالي على المتوسط وسميته md
up العلوي
dn السفلي
md المتوسط
samizhraldeen
26-03-2018, 06:09 AM
اتشكرك
ممكن نعدل على الكود
بحيث البيع يبقى كما هو
ولكن الشراء
اذا كونت الشمعة اللو ادنى السفلي والهاي اعلى المتوسط يبقى شراء
مع ارفاق الكود بالكامل للشراء والبيع وتعريف المدخلات وفقك الله
Hatam
26-03-2018, 06:37 AM
تم التصحيح بالكود المرفق
ويمكنك معرفة المزيد بالموضوع المخصص لـأهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
شكرا جزيلا
Rushdi
26-03-2018, 02:34 PM
نعم ممكن باستخدام المصفوفة iMAOnArray ولكن لا اعتقد انه يمكن بناء الشروط برمجيا لأن القيم مختلفة وتعتبر التقاطعات وهمية لا ترى إلا بالعين المجردة، وهذا المقصود من ردي السابق
ستجد امثلة لكثير من المؤشرات بالنت
وهذا مثال بسيط لدمج الموفينج مع الارس آي
int i;
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//--- main loops 1 and 2
for(i=0; i < limit; i++)
{
RSIBuffer[i]=iRSI(Symbol(),0,RSIPeriod,PRICE_CLOSE,i);
}
for(i=0; i < limit; i++)
{
MAofRSIBuffer[i]=iMAOnArray(RSIBuffer,0,MAofRSI,0,MA_method,i);
}
راجع الشرح بالموقع الرسمي للغة ويمكنك الترجمة من خلال متصفح الكروم
iMAOnArray (https://docs.mql4.com/indicators/imaonarray)
شكراً على الملاحظة سوف احاول تطبيقه على الكود الذي اعمل عليه
kira-h
26-03-2018, 06:39 PM
اتشكرك
ممكن نعدل على الكود
بحيث البيع يبقى كما هو
ولكن الشراء
اذا كونت الشمعة اللو ادنى السفلي والهاي اعلى المتوسط يبقى شراء
مع ارفاق الكود بالكامل للشراء والبيع وتعريف المدخلات وفقك الله
يوجد اكسبيرت تطبيقي مفتوح الكود بالموضوع التعليمي حاول تعديل الشروط بما تريد وارفقه هنا للتصحيح
kira-h
26-03-2018, 06:39 PM
شكراً على الملاحظة سوف احاول تطبيقه على الكود الذي اعمل عليه
العفو أخي
kira-h
26-03-2018, 06:39 PM
شكرا جزيلا
العفو أخي
Hatam
26-03-2018, 10:06 PM
العفو أخي
لدي سؤال اخر ارجو ان لااكون قد اكثرت عليك
اذا اردت عمل اكسبرت يفتح صفقات كل
50 نقطة صفرية
يعنى 1.4250 - 14300 - 14350 - 14400 - 14450 - 14500
يعني كيف يتم عمل هذا ؟؟
هل يتم يدوي يعني اعمل دالة ل
1.4250 و دالة اخرى ل14300 و هكذا لانها سوف تأخذ و قت و جهد كبيرين
و شكرا مقدما
samizhraldeen
27-03-2018, 04:54 AM
يوجد اكسبيرت تطبيقي مفتوح الكود بالموضوع التعليمي حاول تعديل الشروط بما تريد وارفقه هنا للتصحيح
تفضل اخي
ويارت تضفله الترلينغ ستوب
اتشكرك
abOmar
27-03-2018, 08:25 PM
اخواتى
MathCeil ماذا تعنى هذا الامر المحجوز وبماذا تستخدم ؟
الدايره FOR هل تاتى بناتج الصفقة بعد نهاية عملها فقط يعنى عندما يساوي 0 = 0
لان الدايره تفضل تعمل وتاتى بنتائج صفقات اخري لنفس الاكسيبرت
Hatam
27-03-2018, 11:45 PM
اخواتى
MathCeil ماذا تعنى هذا الامر المحجوز وبماذا تستخدم ؟
الدايره FOR هل تاتى بناتج الصفقة بعد نهاية عملها فقط يعنى عندما يساوي 0 = 0
لان الدايره تفضل تعمل وتاتى بنتائج صفقات اخري لنفس الاكسيبرت
MathCeil
The function returns integer numeric value closest from above.
double MathCeil(
double val // number
);
Parameters
val
[in] Numeric value.
Return Value
Numeric value representing the smallest integer that exceeds or equals to val.
Note
Instead of the MathCeil() function you can use ceil().
For Loop Operator
The for operator consists of three expressions and an executable operator:
for(expression1; expression2; expression3)
operator;
Expression1 describes the loop initialization. Expression2 checks the conditions of the loop termination. If it is true, the loop body for is executed. The loop repeats expression2 until it becomes false. If it is false, the loop is terminated, and control is given to the next operator. Expression3 is calculated after each iteration.
The for operator is equivalent to the following succession of operators:
expression1;
while(expression2)
{
operator;
expression3;
};
Any of the three or all three expressions can be absent in the for operator, but the semicolons (;) that separate them must not be omitted. If expression2 is omitted, it is considered constantly true. The for(;;) operator is a continuous loop, equivalent to the while(1) operator. Each expression 1 or 3 can consist of several expressions combined by a comma operator ','.
Note
If it is expected that a large number of iterations will be handled in a loop, it is advisable that you check the fact of forced program termination using the IsStopped() (mk:@MSITStore:C:\Users\Karim%20Razgallah\AppData\ Roaming\MetaQuotes\Terminal\Help\mql4.chm::/isstopped.htm) function.
Examples:
for(x=1;x<=7000; x++)
{
if(IsStopped())
break;
Print(MathPower(x,2));
}
//--- Another example
for(;!IsStopped();)
{
Print(MathPower(x,2));
x++;
if(x>10) break;
}
//--- Third example
for(i=0,j=n-l;i<n && !IsStopped();i++,j--) a[i]=a[j];
samizhraldeen
28-03-2018, 07:48 AM
السلام عليكم
للتذكير
للمشاركة رقم 1134#
sabil
28-03-2018, 09:20 AM
عايز دالة تعمل كالاتي
تقفل اي صفقات شراء يورو دولار مع (+) اي صفقات شراء دولار فرنك بربح عدد معين من الدولارات
كذلك يقفل اي صفقات بيع يورو دولار مع (+) اي صفقات بيع دولار فرنك بربح عدد معين من الدولارات
ملحوظة : اقصد بــ (أي) عدد محدد من الصفقات للزوجين وليس (كل) صفقات البيع او الشراء
يعني الدالة تختار اي صفقات شراء عشوائية للزوجين معاً (شراء يورو دولار + شراء دولار فرنك) بمجموع ربح بالدولار
كذلك اي صفقات بيع عشوائية للزوجين معاً (بيع يورو دولار + بيع دولار فرنك) بمجموع ربح بالدولار
Hatam
28-03-2018, 10:06 AM
العفو أخي
لدي سؤال اخر ارجو ان لااكون قد اكثرت عليك
اذا اردت عمل اكسبرت يفتح صفقات كل
50 نقطة صفرية
يعنى 1.4250 - 14300 - 14350 - 14400 - 14450 - 14500
يعني كيف يتم عمل هذا ؟؟
هل يتم يدوي يعني اعمل دالة ل
1.4250 و دالة اخرى ل14300 و هكذا لانها سوف تأخذ و قت و جهد كبيرين
و شكرا مقدما
kira-h
28-03-2018, 04:52 PM
اخواتى
MathCeil ماذا تعنى هذا الامر المحجوز وبماذا تستخدم ؟
الدايره FOR هل تاتى بناتج الصفقة بعد نهاية عملها فقط يعنى عندما يساوي 0 = 0
لان الدايره تفضل تعمل وتاتى بنتائج صفقات اخري لنفس الاكسيبرت
الوظيفة MathCeil تقوم بحساب أكبر قيمة صحيحة للرقم المدخل ( 5.5 تصبح 6 و -5.5 تصبح -5 )
بالنسبة للحلقة for راجع المشاركة التالي :
https://www.fxprg.com/vb/showthread.php?t=31457&page=29&p=879880&viewfull=1#post879880
kira-h
28-03-2018, 04:59 PM
تفضل اخي
ويارت تضفله الترلينغ ستوب
اتشكرك
مرفق الاكسبيرت
kira-h
28-03-2018, 05:19 PM
لدي سؤال اخر ارجو ان لااكون قد اكثرت عليك
اذا اردت عمل اكسبرت يفتح صفقات كل
50 نقطة صفرية
يعنى 1.4250 - 14300 - 14350 - 14400 - 14450 - 14500
يعني كيف يتم عمل هذا ؟؟
هل يتم يدوي يعني اعمل دالة ل
1.4250 و دالة اخرى ل14300 و هكذا لانها سوف تأخذ و قت و جهد كبيرين
و شكرا مقدما
الكود كالتالي مع الشرح :
input double FirstPrice=1.4250,//سعر فتح اول صفقة
Lots=0.01;//حجم العقد
input int MagicNo=2018;
double LastPrice(int type)//دالة سعر آخر صفقة مفتوحة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type)
{
return(op);
}
}
}
return(0);
}
void OnTick()
{
double point;
int ticket;
if(_Digits<4)point=0.01;else point=0.0001;//قيمة البوينت الحقيقية
//-----------------------BUY Order
if((Orderscnt(OP_BUY)==0&&FirstPric>0&&((Open[0]<=FirstPrice&&Close[0]>=FirstPrice)||(Open[0]>=FirstPrice&&Close[0]<=FirstPrice)))//شرط فتح أول صفقة عند اختراق السعر
||(Orderscnt(OP_BUY)>0&&Ask>=LastPrice(OP_BUY)+50*point))//شرط فتح صفقات التعزيز
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDou ble(Ask,Digits),5,0,0,"Kira-h",MagicNo,0,Blue);//دالة الشراء
}
//-----------------------SELL Order
if((Orderscnt(OP_SELL)==0&&FirstPric>0&&((Open[0]<=FirstPrice&&Close[0]>=FirstPrice)||(Open[0]>=FirstPrice&&Close[0]<=FirstPrice)))//شرط فتح أول صفقة عند اختراق السعر
||(Orderscnt(OP_SELL)>0&&Bid<=LastPrice(OP_SELL)-50*point))//شرط فتح صفقات التعزيز
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDo uble(Bid,Digits),5,0,0,"Kira-h",MagicNo,0,Red);//دالة البيع
}
}
Hatam
28-03-2018, 09:34 PM
الكود كالتالي مع الشرح :
input double FirstPrice=1.4250,//سعر فتح اول صفقة
Lots=0.01;//حجم العقد
input int MagicNo=2018;
double LastPrice(int type)//دالة سعر آخر صفقة مفتوحة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type)
{
return(op);
}
}
}
return(0);
}
void OnTick()
{
double point;
int ticket;
if(_Digits<4)point=0.01;else point=0.0001;//قيمة البوينت الحقيقية
//-----------------------BUY Order
if((Orderscnt(OP_BUY)==0&&FirstPric>0&&((Open[0]<=FirstPrice&&Close[0]>=FirstPrice)||(Open[0]>=FirstPrice&&Close[0]<=FirstPrice)))//شرط فتح أول صفقة عند اختراق السعر
||(Orderscnt(OP_BUY)>0&&Ask>=LastPrice(OP_BUY)+50*point))//شرط فتح صفقات التعزيز
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDou ble(Ask,Digits),5,0,0,"Kira-h",MagicNo,0,Blue);//دالة الشراء
}
//-----------------------SELL Order
if((Orderscnt(OP_SELL)==0&&FirstPric>0&&((Open[0]<=FirstPrice&&Close[0]>=FirstPrice)||(Open[0]>=FirstPrice&&Close[0]<=FirstPrice)))//شرط فتح أول صفقة عند اختراق السعر
||(Orderscnt(OP_SELL)>0&&Bid<=LastPrice(OP_SELL)-50*point))//شرط فتح صفقات التعزيز
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDo uble(Bid,Digits),5,0,0,"Kira-h",MagicNo,0,Red);//دالة البيع
}
}
طيب لو اردت ان اجعل الاكسبرت يغلق الصفقة عن اغلاق الشمعة (افتتاح شمعة جديدة)
كيف يكون هذا ؟؟
و شكرا جزيلا
shivaa
28-03-2018, 11:14 PM
السلام عليكم
الحمد لله تم عمل استراتجيه وتم التجربه على الديمو لمده وتم عمل الاكسبيرت ليها
والحمد لله الاكسبيرت يعمل بمتياز
طلبى هو كيف اجعل الاكسبيرت يبحث على جميع الازواج بدون ان افتح اى زوج غير زوج واحد فقط
اذا تم ايجاد الشروط على اى زوج غير المفتوح يفتح شرط الزوج ويفتح صفقه عليه
ممكن كتابه مع الشرح الكود
اكون شاكر ليكم
kira-h
29-03-2018, 05:34 PM
طيب لو اردت ان اجعل الاكسبرت يغلق الصفقة عن اغلاق الشمعة (افتتاح شمعة جديدة)
كيف يكون هذا ؟؟
و شكرا جزيلا
دالة اغلاق الصفقة عند اغلاق الشمعة كالتالي:
void CloseAtNextBar()
{
if(Time[0]!=Time[1])
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()<=OP_SELL)
{
if(OrderOpenTime()<Time[0])
{
bool close=OrderClose(OrderTicket(),OrderLots(),OrderOp enPrice(),5*Q,Red);
}
}
}
}
}
}
kira-h
29-03-2018, 05:38 PM
السلام عليكم
الحمد لله تم عمل استراتجيه وتم التجربه على الديمو لمده وتم عمل الاكسبيرت ليها
والحمد لله الاكسبيرت يعمل بمتياز
طلبى هو كيف اجعل الاكسبيرت يبحث على جميع الازواج بدون ان افتح اى زوج غير زوج واحد فقط
اذا تم ايجاد الشروط على اى زوج غير المفتوح يفتح شرط الزوج ويفتح صفقه عليه
ممكن كتابه مع الشرح الكود
اكون شاكر ليكم
وعليكم السلام
ستقوم بعمل مصفوفة للأزواج التي تريد التداول عليه ويجب أن تكون هذه الأزواج بخانة الماركت واتش
مثال:
void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}
Abdounour
29-03-2018, 05:52 PM
السلام عليكم
لقد برمجت اكسبرت مضاعفات بواسطة برنامج
وهو يعمل جيدا في فتح الاوامر وغلقها
المشكل انه في بعض الحالات لما يكون انزلاق سعري او وقت خبر لا يفتح صفقات مدة طويلة
هل فيه طريقة ممكن تسريع عمله وثباته وقت الاخبار
kira-h
29-03-2018, 06:08 PM
السلام عليكم
لقد برمجت اكسبرت مضاعفات بواسطة برنامج
وهو يعمل جيدا في فتح الاوامر وغلقها
المشكل انه في بعض الحالات لما يكون انزلاق سعري او وقت خبر لا يفتح صفقات مدة طويلة
هل فيه طريقة ممكن تسريع عمله وثباته وقت الاخبار
وعليكم السلام
برمجيا غير ممكن التحكم بسرعة التنفيذ فهذا على حسب سيرفر شركة الوساطة وسرعة النت لديك
أما اعادة التسعير من الممكن التحكم بها من خلال خاصية السليباج الموجودة بدالة فتح الصفقة، كلما كان الرقم كبير كلما كان في امكانية فتح الصفقة
abOmar
29-03-2018, 08:34 PM
الوظيفة MathCeil تقوم بحساب أكبر قيمة صحيحة للرقم المدخل ( 5.5 تصبح 6 و -5.5 تصبح -5 )
بالنسبة للحلقة for راجع المشاركة التالي :
https://www.fxprg.com/vb/showthread.php?t=31457&page=29&p=879880&viewfull=1#post879880
تسلم عينك ياغالى
والله كلامك ودروسك بي دي اف كلها محشوره معلومات مهمه
طيب ايه الفرق بين
MathCeil و NormalizeDouble
لان بالدروس شايف حاطط الثانية داخل الاولى وهما الاتنين بنفس الوظيفة
MathMin(NormalizeDouble(LastOrderLots()*LotsMpOnLo ss,2)
وتشكر
Hatam
29-03-2018, 08:35 PM
استاذا كيرا
ممكن دالة حساب جسم الشمعة يعني الافتتاح للاغلاق فقط بدون حساب الذيول(بدون الhighو الlow) فقط الاغلاق ناقص الافتتاح و لكن هكذا سوف يكون النتائج سالبة عند الشمعة الهابطة لكنني اريدها النتيجة موجبة سواء شمعة صاعد او هابطة
و شكرا
kira-h
30-03-2018, 01:48 AM
استاذا كيرا
ممكن دالة حساب جسم الشمعة يعني الافتتاح للاغلاق فقط بدون حساب الذيول(بدون الhighو الlow) فقط الاغلاق ناقص الافتتاح و لكن هكذا سوف يكون النتائج سالبة عند الشمعة الهابطة لكنني اريدها النتيجة موجبة سواء شمعة صاعد او هابطة
و شكرا
ستستخدم دالة القيمة المطلقة MathAbs
مثال :
double v=MathAbs(Close[1]-Open[1]);
Hatam
30-03-2018, 06:58 AM
ستستخدم دالة القيمة المطلقة MathAbs
مثال :
double v=MathAbs(Close[1]-Open[1]);
شكرا لك استاذ
samizhraldeen
30-03-2018, 08:50 AM
مرفق الاكسبيرت
صباح الخير
اتشكرك اخي حسن وفقك الله
samizhraldeen
30-03-2018, 02:16 PM
صباح الخير
اتشكرك اخي حسن وفقك الله
تمام اخي حسن ممكن تضيفله الار اس اي كنوع من الفلترة
بحيث اذا اعلى 30 شراء
واذا ادنى ال 70 بيع
اتشكرك
samizhraldeen
30-03-2018, 02:57 PM
تمام اخي حسن ممكن تضيفله الار اس اي كنوع من الفلترة
بحيث اذا اعلى 30 شراء
واذا ادنى ال 70 بيع
اتشكرك
بعتذر اخي كيرا على الخطا الكتابي
ممكن تخله اذا اعلى الارسي 40 شراء واسفل الارسي 40 بيع
kira-h
30-03-2018, 03:32 PM
تسلم عينك ياغالى
والله كلامك ودروسك بي دي اف كلها محشوره معلومات مهمه
طيب ايه الفرق بين
MathCeil و
NormalizeDouble
لان بالدروس شايف حاطط الثانية داخل الاولى وهما الاتنين بنفس الوظيفة
MathMin(NormalizeDouble(LastOrderLots()*LotsMpOnLo ss,2)
وتشكر
الفرق واضح فكما قلنا الوظيفة الاولى تقوم بحساب أكبر قيمة صحيحة لعدد عشري
والثاني اي NormalizeDouble به اعدادين، الاول تقوم بتحديد العدد الذي نريد تحويله والثاني نحدد عدد الاعشار بعد الفاصلة
مثلا
NormalizeDouble(3.245 , 2);
النتيجة هي 3.24 بحيث نريد رقمين (2) فقط بعد الفاصلة
اما الشرط بالدرس معناه اننا نريد اقصى قيمة للناتج ذو رقمين بعد الفاصلة
kira-h
30-03-2018, 04:59 PM
بعتذر اخي كيرا على الخطا الكتابي
ممكن تخله اذا اعلى الارسي 40 شراء واسفل الارسي 40 بيع
أخي الكريم هذا الموضوع مخصص للأسئلة البرمجية
عموما مرفق الاكسبيرت
samizhraldeen
30-03-2018, 09:44 PM
كثر الله خيرك
دايما معطاء وكريم انا اتعلم من كتابتك
وفقك الله
abOmar
30-03-2018, 11:52 PM
كيف يمكنى تحديد سلة من العملات انفذ عليهم امر
SYmpol =="EURUSD"مثلا ولا بيتنفذ ازاى
وازاى اقدر اتحكم في جميع الصفقات المفتوحة بغض النظر الاكسيبرت على اى شارت
for (int q=0;q<OrdersTotal();q++)
{
if (OrderSelect(q,SELECT_BY_POS,MO DE_TRADES))
هل يوجد طريقة اخري لها
sabil
31-03-2018, 03:18 PM
اخي حسن قمت بعمل موضوع في قسم البرمجة المدفوعة شرحت فيه التفاصيل
https://www.fxprg.com/vb/showthread.php?t=33356
وعملت نفس الموضوع على منتدى الجيران
والاخ مستر دولار اعطاني تلك الدالة ولكن لا اعرف كيف استخدمها؟!
ارجو مساعدتي في كيفية استخدامها للعمل بالشروط المذكورة
سوف تقوم بعمل دالة لتقارن جميع الصفقات مع بعضها
مثال
void CheckProfitOrders(string symbol1,string symbol2)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double profit_1=OrderProfit();
int ticket_1=OrderTicket();
double lots_1=OrderLots();
double closeprice_1=OrderClosePrice();
if(OrderSymbol()==symbol1&&OrderMagicNumber()==MagicNumber)
{
for(int j=OrdersTotal()-1;j>=0;j--)
{
bool select=OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
double profit_2=OrderProfit();
int ticket_2=OrderTicket();
double lots_2=OrderLots();
double closeprice_2=OrderClosePrice();
if(OrderSymbol()==symbol2&&OrderMagicNumber()==MagicNumber)
{
if(profit_1+profit_2>=TotalProfit)
{
bool close_1=OrderClose(ticket_1,lots_1,closeprice_1,3) ;
bool close_2=OrderClose(ticket_2,lots_2,closeprice_2,3) ;
break;
}
}
}
}
}
}
kira-h
31-03-2018, 05:18 PM
كثر الله خيرك
دايما معطاء وكريم انا اتعلم من كتابتك
وفقك الله
بالتوفيق إن شاء الله
kira-h
31-03-2018, 05:19 PM
كيف يمكنى تحديد سلة من العملات انفذ عليهم امر
SYmpol =="EURUSD"مثلا ولا بيتنفذ ازاى
وازاى اقدر اتحكم في جميع الصفقات المفتوحة بغض النظر الاكسيبرت على اى شارت
for (int q=0;q<OrdersTotal();q++)
{
if (OrderSelect(q,SELECT_BY_POS,MO DE_TRADES))
هل يوجد طريقة اخري لها
السلام عليكم
ستقوم بعمل مصفوفة للأزواج التي تريد التداول عليها ويجب أن تكون هذه الأزواج بخانة الماركت واتش
مثال:
void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}
- دالة عدد كل الصفقات المفتوحة لكل الأزواج كالتالي :
int Orders()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
cnt++;
}
}
return(cnt);
}
kira-h
31-03-2018, 05:23 PM
اخي حسن قمت بعمل موضوع في قسم البرمجة المدفوعة شرحت فيه التفاصيل
https://www.fxprg.com/vb/showthread.php?t=33356
وعملت نفس الموضوع على منتدى الجيران
والاخ مستر دولار اعطاني تلك الدالة ولكن لا اعرف كيف استخدمها؟!
ارجو مساعدتي في كيفية استخدامها للعمل بالشروط المذكورة
void CheckProfitOrders(string symbol1,string symbol2)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double profit_1=OrderProfit();
int ticket_1=OrderTicket();
double lots_1=OrderLots();
double closeprice_1=OrderClosePrice();
if(OrderSymbol()==symbol1&&OrderMagicNumber()==MagicNumber)
{
for(int j=OrdersTotal()-1;j>=0;j--)
{
bool select=OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
double profit_2=OrderProfit();
int ticket_2=OrderTicket();
double lots_2=OrderLots();
double closeprice_2=OrderClosePrice();
if(OrderSymbol()==symbol2&&OrderMagicNumber()==MagicNumber)
{
if(profit_1+profit_2>=TotalProfit)
{
bool close_1=OrderClose(ticket_1,lots_1,closeprice_1,3) ;
bool close_2=OrderClose(ticket_2,lots_2,closeprice_2,3) ;
break;
}
}
}
}
}
}
الدالة واضحة
مثال :
CheckProfitOrders("EURUSD","USDCHF");
Abdounour
31-03-2018, 09:03 PM
سلام عليكم
ماهي احسن طريقة لاخفاء الاهداف في الاكسيرت ؟
وهذا لكي لا يتم ضربها من قبل البروكر
وشكرا
sabil
31-03-2018, 10:20 PM
الدالة واضحة
مثال :
CheckProfitOrders("EURUSD","USDCHF");
ما انا عارف كده
بس الدالة مش فيها نوع الصفقات شراء او بيع
عايز افصل شراء الزوجين لوحده والبيع لوحده
وازاي استخدمها في المقارنة داخل الدالة ؟
يعني اقفل مجموع شراء الزوجين وكذلك بيع الزوجين بالشروط المذكورة
ياريت حضرتك تطلع على موضوعي وتفهم مطلبي !
kira-h
01-04-2018, 04:09 PM
ما انا عارف كده
بس الدالة مش فيها نوع الصفقات شراء او بيع
عايز افصل شراء الزوجين لوحده والبيع لوحده
وازاي استخدمها في المقارنة داخل الدالة ؟
يعني اقفل مجموع شراء الزوجين وكذلك بيع الزوجين بالشروط المذكورة
ياريت حضرتك تطلع على موضوعي وتفهم مطلبي !
جرب الكود التالي :
void CheckProfitOrders(string symbol1,string symbol2,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double profit_1=OrderProfit();
int ticket_1=OrderTicket();
double lots_1=OrderLots();
double closeprice_1=OrderClosePrice();
if(OrderSymbol()==symbol1&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
for(int j=OrdersTotal()-1;j>=0;j--)
{
bool select=OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
double profit_2=OrderProfit();
int ticket_2=OrderTicket();
double lots_2=OrderLots();
double closeprice_2=OrderClosePrice();
if(OrderSymbol()==symbol2&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
if(profit_1+profit_2>=TotalProfit)
{
bool close_1=OrderClose(ticket_1,lots_1,closeprice_1,3) ;
bool close_2=OrderClose(ticket_2,lots_2,closeprice_2,3) ;
break;
}
}
}
}
}
}
kira-h
01-04-2018, 04:11 PM
سلام عليكم
ماهي احسن طريقة لاخفاء الاهداف في الاكسيرت ؟
وهذا لكي لا يتم ضربها من قبل البروكر
وشكرا
وعليكم السلام
لا توجد سوى طريقة واحدة وهي بمراقبة الهدف او الوقف تلقائيا من طرف الاكسبيرت
والدوال بالمشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31456&p=844557&viewfull=1#post844557
Abdounour
01-04-2018, 11:35 PM
بارك الله فيك استاذ
ممكن دالة التى توقف الاكسبرت عن العمل عند ربح معين احدده انا من الاعدادات
وشكرا
kira-h
02-04-2018, 05:08 PM
بارك الله فيك استاذ
ممكن دالة التى توقف الاكسبرت عن العمل عند ربح معين احدده انا من الاعدادات
وشكرا
وإياك أخي
مثال :
static bool StopEA=false;
int OnInit()
{
StopEA=false;
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(AccountProfit()>=50)StopEA=true;
if(StopEA==true)return;
}
abOmar
02-04-2018, 08:41 PM
شكرا لاهتمامك اخى حسن
هذه الأزواج بخانة الماركت واتش
يعنى ايه خانه الماركت واتش
لما باجي اعدل البروفت بالطريقة دي OrderOpenPrice()+(pt*50)
لا يتم تعين الهدف ولا يظهر بالجورنال انه يوجد خطأ وده بيقابلنى فقط فى ازواج الين والنفط والذهب
وهذا فى دالة int OnInit()
if(Digits==5||Digits==4)
{
pt=0.0001;
}
else{
pt=0.01;
}
كيف التعامل مع ازواج الين والذهب والنفط فى هذه التعديلات
kira-h
03-04-2018, 02:42 PM
شكرا لاهتمامك اخى حسن
يعنى ايه خانه الماركت واتش
لما باجي اعدل البروفت بالطريقة دي OrderOpenPrice()+(pt*50)
لا يتم تعين الهدف ولا يظهر بالجورنال انه يوجد خطأ وده بيقابلنى فقط فى ازواج الين والنفط والذهب
وهذا فى دالة int OnInit()
if(Digits==5||Digits==4)
{
pt=0.0001;
}
else{
pt=0.01;
}
كيف التعامل مع ازواج الين والذهب والنفط فى هذه التعديلات
اخي الكريم استخدم الكود على شكل php اي ضمن صيغة CODE ستجدها عند الانتقال للوضع المتطور للمشاركة بايقونة # حتى يكون الكود منتظم وواضح او ارفق ملف mql4 به الكود
بالنسبة للشرط النقطي سليم على نوعين من ازواج العملات، الازواج التي اسعارها شبيهة بسعر اليورو دولار و الازواج التي اسعارها شبيهة بسعر الدولار ين
اما الدهب والفضة والاسهم... فيجب وضع شروط خاصة حسب قيمة النقطة لكل زوج
وقيمة النقطة يمكنك تحديدها من خلال خبرتك بالزوج وطريقة حسابك لقيمته النقطية يعني كيف تعرف عدد النقاط التي تحركها الزوج هل بخصم اخر صفر ام صفرين ام بزيادة... وهكذا ومنه تضع الشرط النقطي الخاص به
بالنسبة لي ليست لدي خبرة فيها، فلم يسبق لي التداول عليها وبهذا لا استطيع افادتك بهذا الخصوص.
خانة الماركت واتش كما بالصورة
Waddah
03-04-2018, 04:41 PM
السلام عليكم أستاذ
كيف يمكن إضافة فلتر أخبار في الإكسبرت ...بحيث لا يفتح صفقات جديدة قبل الخبر بفترة معينة ؟؟؟ ...
kira-h
03-04-2018, 07:43 PM
السلام عليكم أستاذ
كيف يمكن إضافة فلتر أخبار في الإكسبرت ...بحيث لا يفتح صفقات جديدة قبل الخبر بفترة معينة ؟؟؟ ...
وعليكم السلام
ستعتمد على مؤشر ما مهمته جلب الأخبار من موقع ما مثل فوركس فاكتوري مثل مؤشر ffcal وعليه تقوم ببناء الشروط بالاكسبيرت.
وبالمرفق مثال لاكسبيرت يتجنب التداول وقت الأخبار
Rushdi
06-04-2018, 01:23 AM
صباح الخير
سؤال سريع للاستاذة المختصين
كيف لي ان اكتب كود يقوم بفتح صفقات وغلقه على الخطوط البيانية لل macd حيث يبيع عدما يعطي اشارة بيع ويخلق عند العكس ويفتح شراء كما في الصورة
يفتح بيع عند رقم 1 ويعكسه الى شراء في رقم 2.
6342
برمجت كود بسيط لكنه لا يفي بالغرض ويفتح صفقات شراء فقط ويفتحه في الاماكن الخاطئة في الغالب.
شكراً مقدماً.
kira-h
06-04-2018, 08:32 PM
صباح الخير
سؤال سريع للاستاذة المختصين
كيف لي ان اكتب كود يقوم بفتح صفقات وغلقه على الخطوط البيانية لل macd حيث يبيع عدما يعطي اشارة بيع ويخلق عند العكس ويفتح شراء كما في الصورة
يفتح بيع عند رقم 1 ويعكسه الى شراء في رقم 2.
برمجت كود بسيط لكنه لا يفي بالغرض ويفتح صفقات شراء فقط ويفتحه في الاماكن الخاطئة في الغالب.
شكراً مقدماً.
السلام عليكم
تم التصحيح بالنسخة المرفقة
abOmar
06-04-2018, 11:53 PM
اخى حسن هل يوجد دروس للمصفوفات لان دروسك لا تذكرها
Rushdi
07-04-2018, 01:22 AM
شكراً استاذ على المساعدة والله بدونكم نظيع
kira-h
08-04-2018, 02:24 AM
اخى حسن هل يوجد دروس للمصفوفات لان دروسك لا تذكرها
المصفوفات Arrays: هي عبارة عن متحولات من نوع خاص تكون عبارة عن متحول له بعد واحد أو أكثر.
يمكن تخزين قيم مختلفة في كل خلية من هذه المصفوفة ونستطيع العمل عليها مع الحلقات وبذلك نوفر الكثير من الوقت والجهد.
راجع المشاركة التالية كتطبيق: https://www.fxprg.com/vb/showthread.php?t=31456&p=844598&viewfull=1#post844598
وكذلك المشاركة التالية : https://www.fxprg.com/vb/showthread.php?t=31457&page=29&p=880066&viewfull=1#post880066
kira-h
08-04-2018, 04:13 AM
شكراً استاذ على المساعدة والله بدونكم نظيع
العفو اخي
bahoma31
08-04-2018, 08:09 PM
السلام عليكم ورحمة الله تعالى وبركاته
اولا اخي فكرة هذه الدالة هي واضحة لأنك انت من اعطيتني اياها ولكني اضفت عليها بحيث عندما تتعدى الصفقات من نوع واحد فوق 4 صفقات تعديل الستوب لوز الجماعي ليس متوسط دخول الصفقات وانما على حسب الفيبوناتشي الذي انا حددته
if(Orderscnt(OP_BUY)>1)AvTakeProfit(OP_BUY);if(Orderscnt(OP_SELL)>1)AvTakeProfit(OP_SELL);
void AvTakeProfit(int type) {
double SLS=Av_Prices(OP_SELL);
double SLB=Av_Prices(OP_BUY);
double TPS=Av_Prices(OP_SELL);
double TPB=Av_Prices(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);//closeOrders_sell();
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPB ,Digits)&&Bid<TPB) m2=OrderModify(tk,op,sl,TPB,0,Red);//closeOrders_sell();
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);//closeOrders_buy();
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPS ,Digits)&&Ask>TPS) m1=OrderModify(tk,op,sl,TPS,0,Blue);//closeOrders_buy();
}
}
}
}
double Av_Prices(int type)
{
double fibouloss2=fibouloss-5,fibouloss3=fibouloss-7,fibouloss4=fibouloss-10,fibouloss5=fibouloss-20;
double fibouprofit2=fibouprofit-5,fibouprofit3=fibouprofit-7,fibouprofit4=fibouprofit-10,fibouprofit5=fibouprofit-20;
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(type)>0 && Orderscnt(type)<=4 )return(Price/Orderscnt(type));
if(Orderscnt(OP_SELL)>=5 && Orderscnt(OP_SELL)<=7)return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit)/100)));
if(Orderscnt(OP_SELL)==8 )return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit2)/100)));
if(Orderscnt(OP_SELL)==9 )return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit3)/100)));
if(Orderscnt(OP_SELL)==10)return(MathAbs(HighestPr ice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if(Orderscnt(OP_SELL)==11)return(MathAbs(HighestPr ice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if(Orderscnt(OP_SELL)>=12)return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if (Orderscnt(OP_BUY)>=5 && Orderscnt(OP_BUY)<=7 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==8 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit2)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==9 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit3)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==10&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==11&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)>=12&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
else return(0);
}
ثانيا
اما هذا فهو عكسه اي ستوب لوز للصفقات الرابحة وليس الخاسرة
if(Orderscnt(OP_BUY)>4)AvTakeProfit_mor(OP_BUY);if(Orderscnt(OP_SELL)>4)AvTakeProfit_mor(OP_SELL);
void AvTakeProfit_mor(int type) {
double SLS=Av_Prices_mor(OP_SELL);
double SLB=Av_Prices_mor(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);//closeOrders_sell();
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);//closeOrders_buy();
}
}
}
}
double Av_Prices_mor(int type)
{
double fibouloss2=fibouloss-5,fibouloss3=fibouloss-7,fibouloss4=fibouloss-10,fibouloss5=fibouloss-20;
double fibouprofit2=fibouprofit-5,fibouprofit3=fibouprofit-7,fibouprofit4=fibouprofit-10,fibouprofit5=fibouprofit-20;
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(OP_SELL)>=5 && Orderscnt(OP_SELL)<=7 && sell1>Bid)return((((HighestPrice_bid(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==8 && (sell1>LowestPrice_bid(OP_SELL)) )return((((HighestPrice_bid(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==9 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==10 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==11 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)>=12 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if (Orderscnt(OP_BUY)>=5 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==8 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==9 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==10&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==11&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)>=12&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
else return(0);
}
الارقام والحسابات كلها صحيحة ولكنها لا تعمل كلها مع بعض وسأعطيك مثالا بالصورة
63866387
وشكرا مقدما
kira-h
09-04-2018, 12:29 AM
السلام عليكم ورحمة الله تعالى وبركاته
اولا اخي فكرة هذه الدالة هي واضحة لأنك انت من اعطيتني اياها ولكني اضفت عليها بحيث عندما تتعدى الصفقات من نوع واحد فوق 4 صفقات تعديل الستوب لوز الجماعي ليس متوسط دخول الصفقات وانما على حسب الفيبوناتشي الذي انا حددته
if(Orderscnt(OP_BUY)>1)AvTakeProfit(OP_BUY);if(Orderscnt(OP_SELL)>1)AvTakeProfit(OP_SELL);
void AvTakeProfit(int type) {
double SLS=Av_Prices(OP_SELL);
double SLB=Av_Prices(OP_BUY);
double TPS=Av_Prices(OP_SELL);
double TPB=Av_Prices(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);//closeOrders_sell();
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPB ,Digits)&&Bid<TPB) m2=OrderModify(tk,op,sl,TPB,0,Red);//closeOrders_sell();
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);//closeOrders_buy();
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(TPS ,Digits)&&Ask>TPS) m1=OrderModify(tk,op,sl,TPS,0,Blue);//closeOrders_buy();
}
}
}
}
double Av_Prices(int type)
{
double fibouloss2=fibouloss-5,fibouloss3=fibouloss-7,fibouloss4=fibouloss-10,fibouloss5=fibouloss-20;
double fibouprofit2=fibouprofit-5,fibouprofit3=fibouprofit-7,fibouprofit4=fibouprofit-10,fibouprofit5=fibouprofit-20;
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(type)>0 && Orderscnt(type)<=4 )return(Price/Orderscnt(type));
if(Orderscnt(OP_SELL)>=5 && Orderscnt(OP_SELL)<=7)return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit)/100)));
if(Orderscnt(OP_SELL)==8 )return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit2)/100)));
if(Orderscnt(OP_SELL)==9 )return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit3)/100)));
if(Orderscnt(OP_SELL)==10)return(MathAbs(HighestPr ice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if(Orderscnt(OP_SELL)==11)return(MathAbs(HighestPr ice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if(Orderscnt(OP_SELL)>=12)return(MathAbs(HighestPrice_bid(OP_SELL)-(((HighestPrice_bid(OP_SELL)-sell1)*fibouprofit4)/100)));
if (Orderscnt(OP_BUY)>=5 && Orderscnt(OP_BUY)<=7 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==8 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit2)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==9 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit3)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==10&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==11&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)>=12&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit4)+LowestPrice_bid(OP_BUY));
else return(0);
}
ثانيا
اما هذا فهو عكسه اي ستوب لوز للصفقات الرابحة وليس الخاسرة
if(Orderscnt(OP_BUY)>4)AvTakeProfit_mor(OP_BUY);if(Orderscnt(OP_SELL)>4)AvTakeProfit_mor(OP_SELL);
void AvTakeProfit_mor(int type) {
double SLS=Av_Prices_mor(OP_SELL);
double SLB=Av_Prices_mor(OP_BUY);
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLB ,Digits)&&Bid>SLB)bool m2=OrderModify(tk,op,SLB,tp,0,Red);//closeOrders_sell();
}
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SLS ,Digits)&&Ask<SLS)bool m1=OrderModify(tk,op,SLS,tp,0,Blue);//closeOrders_buy();
}
}
}
}
double Av_Prices_mor(int type)
{
double fibouloss2=fibouloss-5,fibouloss3=fibouloss-7,fibouloss4=fibouloss-10,fibouloss5=fibouloss-20;
double fibouprofit2=fibouprofit-5,fibouprofit3=fibouprofit-7,fibouprofit4=fibouprofit-10,fibouprofit5=fibouprofit-20;
double Price;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number)
{
if(OrderType()==type)
{
Price+=OrderOpenPrice();
}
}
}
if(Orderscnt(OP_SELL)>=5 && Orderscnt(OP_SELL)<=7 && sell1>Bid)return((((HighestPrice_bid(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==8 && (sell1>LowestPrice_bid(OP_SELL)) )return((((HighestPrice_bid(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==9 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==10 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)==11 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if(Orderscnt(OP_SELL)>=12 && (sell1>LowestPrice_bid(OP_SELL)))return((((HighestPrice_b id(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL));
if (Orderscnt(OP_BUY)>=5 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==8 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==9 && buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==10&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)==11&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
if (Orderscnt(OP_BUY)>=12&& buy1>Bid )return((((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY));
else return(0);
}
الارقام والحسابات كلها صحيحة ولكنها لا تعمل كلها مع بعض وسأعطيك مثالا بالصورة
63866387
وشكرا مقدما
وعليكم السلام
الطريقة غير واضحة لكن عموما يمكنك مراجعة نتائج الكود والمعادلات باستخدام الكومنت Comment لتظهر على الشارت أو Print لتظهر بالجورنال
جرب الكود التالي :
double Av_Prices_mor(int type)
{
double fibouloss2=fibouloss-5,
fibouloss3=fibouloss-7,
fibouloss4=fibouloss-10,
fibouloss5=fibouloss-20;
double fibouprofit2=fibouprofit-5,
fibouprofit3=fibouprofit-7,
fibouprofit4=fibouprofit-10,
fibouprofit5=fibouprofit-20;
double Price,Av;
for(int i=0;i<=OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()==type)
{
if(OrderType()==OP_SELL)
{
Price+=OrderOpenPrice();
if(Orderscnt(OP_SELL)>=5 &&Orderscnt(OP_SELL)<=7&&sell1>Bid)Av=(((HighestPrice_bid(OP_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss)+LowestPrice_bid(OP_SELL);
if(Orderscnt(OP_SELL)==8 &&(sell1>LowestPrice_bid(OP_SELL)))Av=(((HighestPrice_bid(O P_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL);
if(Orderscnt(OP_SELL)==9 &&(sell1>LowestPrice_bid(OP_SELL)))Av=(((HighestPrice_bid(O P_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL);
if(Orderscnt(OP_SELL)==10&&(sell1>LowestPrice_bid(OP_SELL)))Av=(((HighestPrice_bid(O P_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL);
if(Orderscnt(OP_SELL)==11&&(sell1>LowestPrice_bid(OP_SELL)))Av=(((HighestPrice_bid(O P_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL);
if(Orderscnt(OP_SELL)>=12&&(sell1>LowestPrice_bid(OP_SELL)))Av=(((HighestPrice_bid(O P_SELL)-LowestPrice_bid(OP_SELL))/100)*fibouloss3)+LowestPrice_bid(OP_SELL);
}
if(OrderType()==OP_BUY)
{
Price+=OrderOpenPrice();
if(Orderscnt(OP_BUY)>=5 &&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
if(Orderscnt(OP_BUY)==8 &&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
if(Orderscnt(OP_BUY)==9 &&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
if(Orderscnt(OP_BUY)==10&&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
if(Orderscnt(OP_BUY)==11&&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
if(Orderscnt(OP_BUY)>=12&&buy1>Bid)Av=(((buy1-LowestPrice_bid(OP_BUY))/100)*fibouprofit)+LowestPrice_bid(OP_BUY);
}
}
}
return(Av);
}
bahoma31
09-04-2018, 01:02 AM
لنفترض اني دخلت في صفقت بيع لم اضع لها لا التيكت بروفيت ولا الستوب لوز
هبطت وانا رابح فيها لكني لم اغلقها اكمل القراءة فقط
ثم دخل صفقة بيع بلوت اقل من الاولى
الان اصبح لدي 2 صفقات
لنفترض الان عندي 10 صفقات بيع بحجم عقود متسلسلة
الان يا اخي حسن ما اريده هو كالاتي
سعر دخول الصفقة الاولى
-
سعر دخول الصفقة الاخيرة وهي رقم 10
الناتج الان لنفترض انه 0.0350 نقطة
نقسم هذه النقاط على 100
ثم نضربها في قيمة اسمها فيبو لوس ونعطيها 37
الان سيصبح عدد النقاط هو 0,01295
نضيف هذا الرقم الى الصفقة العاشرة والناتج هو موديفاي اوردر
اي ستوب لوس جماعي لكل الصفقات العشر
يا رب تكون فكرتي وضحت لك اخي حسن
abOmar
10-04-2018, 11:40 PM
شكرا اخى حسن
هل عندك ملف المرفق فيه جميع الدوال المعروفة زي ادارة راس المال والمضاعفات وخلافه فى ملف واحد
kira-h
11-04-2018, 06:21 PM
شكرا اخى حسن
هل عندك ملف المرفق فيه جميع الدوال المعروفة زي ادارة راس المال والمضاعفات وخلافه فى ملف واحد
راجع الموضوع التالي : أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
Abdounour
14-04-2018, 03:50 PM
السلام عليكم
ماهي احسن برمجة توضع لتفادي ارتباك الاكسبرت اثناء حدوث انزلاق سعري
وشكرا
Waddah
15-04-2018, 10:41 AM
السلام عليكم أستاذ
في إكسبرت يتعامل مع مجموعة عملات ظهرت عندي مشكلة مع منصة إكسنس ...كل زوج له عدة لواحق EURUSD EURUSDm EURUSDf EURUSDk
غيرت طريقة المصفوفة كليا ووضعت اللاحقة كمتغير خارجي حسب الكود التالي
input string perf="f";
string Symbols[]={"EURGBP"+perf,"EURAUD"+perf,"EURNZD"+perf,...............};
لكن لم يتعرف على المصفوفة وظهرت رسالة الخطأ التالية عند عمل كومبايل
'EURGBP' - constant expression required
النقطة الثانية من السؤال : كيف نتأكد أن الزوج الموجود في المصفوفة موجود في الماركت ووتش
kira-h
15-04-2018, 05:43 PM
السلام عليكم أستاذ
في إكسبرت يتعامل مع مجموعة عملات ظهرت عندي مشكلة مع منصة إكسنس ...كل زوج له عدة لواحق EURUSD EURUSDm EURUSDf EURUSDk
غيرت طريقة المصفوفة كليا ووضعت اللاحقة كمتغير خارجي حسب الكود التالي
input string perf="f";
string Symbols[]={"EURGBP"+perf,"EURAUD"+perf,"EURNZD"+perf,...............};
لكن لم يتعرف على المصفوفة وظهرت رسالة الخطأ التالية عند عمل كومبايل
'EURGBP' - constant expression required
النقطة الثانية من السؤال : كيف نتأكد أن الزوج الموجود في المصفوفة موجود في الماركت ووتش
وعليكم السلام
مثال لمصفوفة الأزواج ذات لاحقة او سابقة كالتالي :
void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}
تتأكد بالمراجعة
samizhraldeen
17-04-2018, 02:11 AM
السلام عليكم
ممكن اخي حسن تعدل لي هذا الاكسبيرت البسيط
بحيث اذا كانت اول نقطة من الباربوليك اسفل شمعة رقم واحد واعلى البولنغر السفلي شراء
وبالعكس اذا كانت اول نقطة للباربوليك اعلى شمعة رقم واحد واسفل البولنغر العلوي فتح بيع
kira-h
17-04-2018, 06:15 PM
السلام عليكم
ممكن اخي حسن تعدل لي هذا الاكسبيرت البسيط
بحيث اذا كانت اول نقطة من الباربوليك اسفل شمعة رقم واحد واعلى البولنغر السفلي شراء
وبالعكس اذا كانت اول نقطة للباربوليك اعلى شمعة رقم واحد واسفل البولنغر العلوي فتح بيع
وعليكم السلام
مرفق الاكسبيرت
samizhraldeen
17-04-2018, 07:51 PM
وفقك الله اخي حسن
حاولت ان ان اضيف له المضاعفات بالضرب لكن لم اعرف كيف اربط الحلقات
هل يمكنك مساعدتي في ذلك لارى اين هو غلطي عبر كتابتك للكود فيه
اتشكرك جدا
kira-h
18-04-2018, 12:15 AM
وفقك الله اخي حسن
حاولت ان ان اضيف له المضاعفات بالضرب لكن لم اعرف كيف اربط الحلقات
هل يمكنك مساعدتي في ذلك لارى اين هو غلطي عبر كتابتك للكود فيه
اتشكرك جدا
مرفق الاكسبيرت
samizhraldeen
18-04-2018, 03:47 PM
الله يوفقك ويحسن اليك
شكرا لك
samizhraldeen
18-04-2018, 04:43 PM
اخي الكريم لماذا ليس هنالك ستيب
والتيك بروفيت لا يعمل لاغلاق الصفقات
kira-h
18-04-2018, 06:51 PM
اخي الكريم لماذا ليس هنالك ستيب
والتيك بروفيت لا يعمل لاغلاق الصفقات
قمت فقط بإضافة المطلوب
يمكنك فتح موضوع جديد لعمل التعديلات، لأن هذا الموضوع مخصص فقط للأسئلة البرمجية
kira-h
18-04-2018, 06:56 PM
اريد جعل الاكسبيرت يعمل على حساب معين برقم الحساب ؟
كيف يتم ذلك برمجيا ؟
السلام عليكم
ستقوم باستخدام الوظيفة ()AccountNumber ببداية الدالة الرئيسية OnTick يعني قبل مراجعة شروط الاستراتيجية
مثال :
if(AccountNumber()!=0123456)
{
Comment("Wrong Account Number");
Alert("Wrong Account Number");
return;
}
samizhraldeen
19-04-2018, 12:00 AM
طيب من عيوني
samizhraldeen
19-04-2018, 12:55 AM
بما يخص مؤشر الفوليوم
ماهو كوده لانني لم اجده في المنتدى
وهل ضروري كتابته مرتين مثل الباربوليك
ام مرة واحدة تكفي مثل الارسي
kira-h
19-04-2018, 10:45 PM
بما يخص مؤشر الفوليوم
ماهو كوده لانني لم اجده في المنتدى
وهل ضروري كتابته مرتين مثل الباربوليك
ام مرة واحدة تكفي مثل الارسي
كود الفوليوم كالتالي :
double v1=iVolume(Symbol(),0,1),
v2=iVolume(Symbol(),0,2);
if(v1>v2)//بار اخضر
if(v1<v2)//بار أحمر
samizhraldeen
20-04-2018, 03:00 AM
اشكرك اخي على الرد
kira-h
20-04-2018, 02:31 PM
اشكرك اخي على الرد
العفو اخي
Abdounour
21-04-2018, 11:46 PM
السلام عليكم
سوال فقط
عن الدوال المتعلقة بجعل الاكسبرت يعمل فقط على الديمو
ويعمل على الحقيقي مدة محددة فقط
وشكرا
shivaa
22-04-2018, 09:06 AM
السلام عليكم
ممكن المساعده فى عمل اكسبيرت يعتمد على مؤشر ZigZag ممكن رسم ترند على اخر قاعين او اخر قمتين وعند كسر الدخول صفقه على حسب الاتجاه
فى الصوره ما اريد شرحه
الرجاء طريقه الرجوع باخر قمتين وقاعين
وكيف ارسم ترند على اخر قمتين وقاعين
وكيف اعرف ان الشمعه الحاليه تم اختارقها للترند
جزاك الله خيرااا
6757
kira-h
22-04-2018, 06:20 PM
السلام عليكم
سوال فقط
عن الدوال المتعلقة بجعل الاكسبرت يعمل فقط على الديمو
ويعمل على الحقيقي مدة محددة فقط
وشكرا
وعليكم السلام
إذا تريد الاكسبيرت يعمل على الديمو فقط ستضع الشرط التالي ببداية الدالة الرئيسية OnTick :
if(!IsDemo()) {
Comment("EA not working on real account");
Alert("EA not working on real account");
return;
}
ولكي يعمل على الحقيقي فقط بمدة محددة ستقوم بالتالي ببداية الدالة الرئيسية OnTick :
if(!IsDemo()&&TimeCurrent()>=StrToTime("2018.12.30 00:00")) {
Comment("EA Expired On Real Account");
Alert("EA Expired On Real Account");
return;
}
kira-h
22-04-2018, 06:43 PM
السلام عليكم
ممكن المساعده فى عمل اكسبيرت يعتمد على مؤشر ZigZag ممكن رسم ترند على اخر قاعين او اخر قمتين وعند كسر الدخول صفقه على حسب الاتجاه
فى الصوره ما اريد شرحه
الرجاء طريقه الرجوع باخر قمتين وقاعين
وكيف ارسم ترند على اخر قمتين وقاعين
وكيف اعرف ان الشمعه الحاليه تم اختارقها للترند
جزاك الله خيرااا
6757
وعليكم السلام
ستقوم بعمل دالة معرفة قيمة سعر الزيجزاج السابق حسب الترتيب (القمة أو القاع السابق 1 او التي قبلها 2 وهكذا...)
double ZigZag_Price(int Number)//سعر القمة او القاع السابق حسب ترتيبها
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(zag);
}
return(0);
}
ودالة معرفة قيمة توقيت الزيجزاج السابق حسب الترتيب (القمة أو القاع السابق 1 او التي قبلها 2 وهكذا...)
datetime ZigZag_Time(int Number)
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(Time[i]);
}
return(0);
}
ودالة رسم الترند كالتالي :
void Draw_Trend(string name,double Price1,double Price2,datetime Time1,datetime Time2,color _Color)//دالة رسم الترند
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1,Price1,Time2,P rice2);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_COLOR,_Color);
ObjectSet(name,OBJPROP_RAY,true);
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=Price1)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Price2,Time1,Time2,_Color);
}
}
ثم شروط رسم الترندين وفتح الصفقات بالدالة الرئيسية OnTick كالتالي :
datetime time=0;
void OnTick()
{
if(time!=Time[0])
{
if(ZigZag_Price(5)>ZigZag_Price(3))Draw_Trend("T",ZigZag_Price(5),ZigZag_Price(3),Time[ZigZag_Time(5)],Time[ZigZag_Time(3)],Green);
if(ZigZag_Price(4)<ZigZag_Price(2))Draw_Trend("B",ZigZag_Price(4),ZigZag_Price(2),Time[ZigZag_Time(4)],Time[ZigZag_Time(2)],Magenta);
if(ZigZag_Price(1)<ZigZag_Price(2))
{
if(ZigZag_Price(4)>ZigZag_Price(2))Draw_Trend("T",ZigZag_Price(4),ZigZag_Price(2),ZigZag_Time(4),Zi gZag_Time(2),Green);
if(ZigZag_Price(5)<ZigZag_Price(3))Draw_Trend("B",ZigZag_Price(5),ZigZag_Price(3),ZigZag_Time(5),Zi gZag_Time(3),Magenta);
}
time=Time[0];
}
//----ثم شروط فتح الصفقات كالتالي
double up=ObjectGetValueByShift("T",0),//قيمة الترند العلوي المائل إلى اسفل
dn=ObjectGetValueByShift("B",0);//قيمة الترند السفلي المائل إلى اعلى
if(Close[2]<=up&&Close[1]>up)//open buy
if(Close[2]>=dn&&Close[1]<dn)//open sell
}
shivaa
23-04-2018, 03:07 AM
وعليكم السلام
ستقوم بعمل دالة معرفة قيمة سعر الزيجزاج السابق حسب الترتيب (القمة أو القاع السابق 1 او التي قبلها 2 وهكذا...)
double ZigZag_Price(int Number)//سعر القمة او القاع السابق حسب ترتيبها
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(zag);
}
return(0);
}
ودالة معرفة قيمة توقيت الزيجزاج السابق حسب الترتيب (القمة أو القاع السابق 1 او التي قبلها 2 وهكذا...)
datetime ZigZag_Time(int Number)
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(Time[i]);
}
return(0);
}
ودالة رسم الترند كالتالي :
void Draw_Trend(string name,double Price1,double Price2,datetime Time1,datetime Time2,color _Color)//دالة رسم الترند
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1,Price1,Time2,P rice2);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_COLOR,_Color);
ObjectSet(name,OBJPROP_RAY,true);
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=Price1)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Price2,Time1,Time2,_Color);
}
}
ثم شروط رسم الترندين وفتح الصفقات بالدالة الرئيسية OnTick كالتالي :
datetime time=0;
void OnTick()
{
if(time!=Time[0])
{
if(ZigZag_Price(5)>ZigZag_Price(3))Draw_Trend("T",ZigZag_Price(5),ZigZag_Price(3),Time[ZigZag_Time(5)],Time[ZigZag_Time(3)],Green);
if(ZigZag_Price(4)<ZigZag_Price(2))Draw_Trend("B",ZigZag_Price(4),ZigZag_Price(2),Time[ZigZag_Time(4)],Time[ZigZag_Time(2)],Magenta);
if(ZigZag_Price(1)<ZigZag_Price(2))
{
if(ZigZag_Price(4)>ZigZag_Price(2))Draw_Trend("T",ZigZag_Price(4),ZigZag_Price(2),ZigZag_Time(4),Zi gZag_Time(2),Green);
if(ZigZag_Price(5)<ZigZag_Price(3))Draw_Trend("B",ZigZag_Price(5),ZigZag_Price(3),ZigZag_Time(5),Zi gZag_Time(3),Magenta);
}
time=Time[0];
}
//----ثم شروط فتح الصفقات كالتالي
double up=ObjectGetValueByShift("T",0),//قيمة الترند العلوي المائل إلى اسفل
dn=ObjectGetValueByShift("B",0);//قيمة الترند السفلي المائل إلى اعلى
if(Close[2]<=up&&Close[1]>up)//open buy
if(Close[2]>=dn&&Close[1]<dn)//open sell
}
السلام عليكم
الف شكر وجزاك الله خيرااااااااااااااا
Abdounour
23-04-2018, 05:04 PM
السلام عليكم
بارك الله فيك استاذ كيرا على ماتقدمه للاعظاء
kira-h
23-04-2018, 08:12 PM
السلام عليكم
الف شكر وجزاك الله خيرااااااااااااااا
وعليكم السلام
وإياك أخي الكريم
kira-h
23-04-2018, 08:12 PM
السلام عليكم
بارك الله فيك استاذ كيرا على ماتقدمه للاعظاء
وعليكم السلام
وإياك اخي الكريم
bahoma31
23-04-2018, 08:35 PM
السلام عليك اخي حسن
ممكن لو تساعدني في هذه المشكلة البسيطة لو سمحت
6780
kira-h
24-04-2018, 05:19 PM
وعليكم السلام
استخدم || للشرط كاملا
مثال :
if((Symbol()=="EURUSD")||(Symbol()=="GBPUSD")||(Symbol()=="NZDUSD")||(Symbol()=="AUDUSD"))
bahoma31
24-04-2018, 07:59 PM
وعليكم السلام
استخدم || للشرط كاملا
مثال :
if((Symbol()=="EURUSD")||(Symbol()=="GBPUSD")||(Symbol()=="NZDUSD")||(Symbol()=="AUDUSD"))
شكرا بارك الله فيك
kira-h
25-04-2018, 05:58 PM
شكرا بارك الله فيك
العفو وبالتوفيق اخي
bahoma31
25-04-2018, 08:17 PM
السلام عليكم استاذ حسن
كيف أستخرج اقرب صفقة بيع مفتوحة فوق ال Bid
كيف أستخرج اقرب صفقة بيع مفتوحة تحت ال Bid
كيف أستخرج اقرب صفقة شراء مفتوحة فوق ال Bid
كيف أستخرج اقرب صفقة شراء مفتوحة تحت ال Bid
لقد حاولت بهذه الاكواد التي تعلمتها منك ولكن الامر تعقد علي
وشكرا مسبقا
double HighestPrice_under(int type){
double c=0;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()>c&&OrderOpenPrice()<Bid)c=OrderOpenPrice();
}
}
}
return(c);
}
double LowestPrice_under(int type)
{
double c=EMPTY_VALUE;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()<c&&OrderOpenPrice()>Bid)c=OrderOpenPrice();
}
}
}
return(c);
ما معنى EMPTY_VALUE
kira-h
25-04-2018, 08:54 PM
السلام عليكم استاذ حسن
كيف أستخرج اقرب صفقة بيع مفتوحة فوق ال Bid
كيف أستخرج اقرب صفقة بيع مفتوحة تحت ال Bid
كيف أستخرج اقرب صفقة شراء مفتوحة فوق ال Bid
كيف أستخرج اقرب صفقة شراء مفتوحة تحت ال Bid
لقد حاولت بهذه الاكواد التي تعلمتها منك ولكن الامر تعقد علي
وشكرا مسبقا
....
ما معنى EMPTY_VALUE
وعليكم السلام
الصحيح حسب ما تريد كالتالي :
double HighestPrice_under(int type)
{
for(int cnt=OrdersTotal()-1;i>=0;cnt--)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()>Bid)return(OrderOpenPrice());
}
}
}
return(0);
}
double LowestPrice_under(int type)
{
for(int cnt=OrdersTotal()-1;i>=0;cnt--)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()<Bid)return(OrderOpenPrice());
}
}
}
return(0);
}
EMPTY_VALUE عبارة عن قيمة صحيحة تعادل 2147483647 وهي أكبر قيمة ممكنة باللغة
bahoma31
26-04-2018, 12:20 AM
استاذ حسن i =كم ؟ او ماهي قيمتها ؟
kira-h
26-04-2018, 04:47 PM
استاذ حسن i =كم ؟ او ماهي قيمتها ؟
ضع الكود لمعرفة قيمة i فهو الان بالنسبة لي متغير غير معرف مجهول
bahoma31
26-04-2018, 04:56 PM
اقصد ما اعطيتتته لي في الكود السابق
6843
kira-h
26-04-2018, 05:15 PM
اقصد ما اعطيتتته لي في الكود السابق
6843
ذلك خطأ مطبعي والصحيح كالتالي :
double HighestPrice_under(int type)
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()>Bid)return(OrderOpenPrice());
}
}
}
return(0);
}
double LowestPrice_under(int type)
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic_number&&OrderType()<=OP_SELL)
{
if(OrderType()==type)
{
if(OrderOpenPrice()<Bid)return(OrderOpenPrice());
}
}
}
return(0);
}
و cnt عبارة عن عدد صحيح أكبر من او يساوي 0، وبالحلقة يبدأ من عدد إجمالي الصفقات المفتوحة cnt=OrdersTotal()-1 ويتناقص هذا العدد إلى 0 يعني --cnt
Ahmed
26-04-2018, 08:36 PM
السلام عليكم استاذ حسن
اريد وظيفة تعود باجمالي الخسارة في الصفقات المغلقة
Abdounour
26-04-2018, 11:17 PM
السلام عليكم
في اعدادات الاكسبرت اذا اردت ان لا تضهر مثلا اللوت او التيك بروفت
كيف يمكن ذلك
وشكرا
Ahmed
27-04-2018, 08:35 AM
السلام عليكم
في اعدادات الاكسبرت اذا اردت ان لا تضهر مثلا اللوت او التيك بروفت
كيف يمكن ذلك
وشكرا
وعليكم السلام
عند كتابة الكود وفي المنطقة العامة للمتغيرات تحذف كلمة input او كلمة extern التي تسبق المتغير
مرفق مثال
Abdounour
27-04-2018, 11:37 AM
بارك الله فيك استاذ احمد
Ahmed
27-04-2018, 04:35 PM
بارك الله فيك استاذ احمد
بالتوفيق اخي
Abdounour
27-04-2018, 11:32 PM
السلام عليكم
ممكن الدلة التي توقف عمل الاكسبرت نهائيا في حال وصول الى ربح محدد
وشكرا
kira-h
28-04-2018, 04:14 PM
السلام عليكم
ممكن الدلة التي توقف عمل الاكسبرت نهائيا في حال وصول الى ربح محدد
وشكرا
وعليكم السلام
لايقاف التداول الآلي بشكل عام
ستضع المكتبات التالية ببداية الكود :
#include <WinUser32.mqh>
#include <stdlib.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
ثم تضع الشروط بالدالة الرئيسية كالتالي:
input double profit=50;
void OnTick()
{
if(profit>0&&AccountProfit()>=profit)
{
if(IsExpertEnabled())
{
SendMessageA((GetParent(GetParent(GetParent(Window Handle(Symbol(), 0))))), 0x111, 0x80FC, 0);
return;
}
}
}
Ahmed
28-04-2018, 08:02 PM
السلام عليكم استاذ حسن
اريد وظيفة تعود باجمالي الخسارة في الصفقات المغلقة
bahoma31
28-04-2018, 09:15 PM
السلام عليكم استاذ حسن لماذا هذا الاكسبرت البسيط لا يعمل ؟
Aminox
29-04-2018, 02:58 PM
السلام عليكم
أخي حسن إستعصى علي أمرا في برمجة إكسبيرت
وهو على الشكل التالي عند تنزيل الإكسبيرت على الشارت
يقوم بفتح صفقة buy - ستوب 50نقطة وأمر معلق buystop على بعد 50نقطة
عندما يقوم بضرب الأور معلق إذن 50 نقطة ربح يقوم بتحريك الستوب 50 نقطة أيضا
أي عند الستوب للصفقة الجديدة و هكذا إلى حين رجوع السعر وضرب الستوب في هذه الحالة
يكون ضرب الستوب للصفقات كلها ويقوم بفتح صفقة sell ستوب 50 نقطة و أمر معلق sellstop
حاولت وحاولت لكن دون جدوى ... أتمنا أن تساعدني في حل هذا الإكسبيرت
صورة للتوضيح و الإكسبيرت في المرفقات جزاك الله خيرا
5978
مرحبا أخي حسن لقد حاولت كثيرا الوصول إلى المطلوب
في المشاركة 1085 مع الإستعانة بالإكسبيرت الذي أرفقته
لكن دون جدوى هل ممكن المساعدة مرة أخرى و شكرا لك
تـــــحياتــــــــــــــــــــــــــــــــــــــــ ـــــــــي لك
kira-h
29-04-2018, 04:44 PM
السلام عليكم استاذ حسن
اريد وظيفة تعود باجمالي الخسارة في الصفقات المغلقة
وعليكم السلام
الدالة كالتالي :
double Profit_History()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot<=OP_SELL)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}
kira-h
29-04-2018, 04:59 PM
السلام عليكم استاذ حسن لماذا هذا الاكسبرت البسيط لا يعمل ؟
وعليكم السلام
تأكد من طريقتك في بناء الشروط وقيم المؤشر
مرفق الاكسبيرت
kira-h
29-04-2018, 05:11 PM
مرحبا أخي حسن لقد حاولت كثيرا الوصول إلى المطلوب
في المشاركة 1085 مع الإستعانة بالإكسبيرت الذي أرفقته
لكن دون جدوى هل ممكن المساعدة مرة أخرى و شكرا لك
تـــــحياتــــــــــــــــــــــــــــــــــــــــ ـــــــــي لك
الاكسبيرت يحقق المطلوب
فقط الفرق عوض استخدم الأمر المعلق استخدمت مباشرة الأمر ماركت عند تحقق المسافة ستيب
Ahmed
29-04-2018, 06:03 PM
بارك الله فيك اخي حسن
bahoma31
29-04-2018, 08:14 PM
لك كل الاحترام سيدي
6912
kira-h
30-04-2018, 05:53 PM
بارك الله فيك اخي حسن
لك كل الاحترام سيدي
6912
بالتوفيق إن شاء الله
Abdounour
30-04-2018, 09:32 PM
السلام عليكم
ممكن استاذ تضع winusd
لهذا الاكسبرت
حيث عندما يصل لربح معين يغلق كل الصفقات ويفتح صفقات من جديد
مثل التيك بروفت ولاكن بالدولار
وشكرا
kira-h
01-05-2018, 05:55 PM
السلام عليكم
ممكن استاذ تضع winusd
لهذا الاكسبرت
حيث عندما يصل لربح معين يغلق كل الصفقات ويفتح صفقات من جديد
مثل التيك بروفت ولاكن بالدولار
وشكرا
وعليكم السلام
هذا الموضوع مخصص للأسئلة البرمجية فقط
عموما مرفق الاكسبيرت
Abdounour
01-05-2018, 09:08 PM
السلام عليكم ورحمة الله
بارك الله فيك استاذ واسمحلي على الازعاج
Ahmed
02-05-2018, 07:58 AM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يضع الاستوب عند اقل مسافة مسموح بها
kira-h
03-05-2018, 01:21 AM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يضع الاستوب عند اقل مسافة مسموح بها
وعليكم السلام
ستستخدم فرق السبريد + أقل ستوب متاح
MarketInfo(Symbol(),MODE_STOPLEVEL)
kira-h
03-05-2018, 01:22 AM
السلام عليكم ورحمة الله
بارك الله فيك استاذ واسمحلي على الازعاج
وعليكم السلام
بالتوفيق إن شاء الله
Ahmed
03-05-2018, 11:13 AM
بارك الله فيك استاذ حسن
kira-h
03-05-2018, 01:26 PM
بارك الله فيك استاذ حسن
وإياك اخي الكريم
Ahmed
04-05-2018, 11:02 AM
السلام عليكم استاذ حسن
كيف احسب الربح او الخسارة لعدد صفقات محدود في الهيستوي
كمثال : حساب مجموع الربح لاخر عشرة صفقات مغلقة
kira-h
05-05-2018, 02:12 PM
السلام عليكم استاذ حسن
كيف احسب الربح او الخسارة لعدد صفقات محدود في الهيستوي
كمثال : حساب مجموع الربح لاخر عشرة صفقات مغلقة
وعليكم السلام
يجب اعتماد شرط آخر كتوقيت فتح أو إغلاق الصفقات
دالة توقيت إغلاق الصفقة 10 كالتالي :
datetime LastTime()
{
int cnt;
for(int i=OrdersHistoryTotal();i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
cnt++;
if(cnt>=10)
return(OrderCloseTime());
}
}
return(0);
}
ثم دالة الربح تصبح كالتالي :
double Profit_History()
{
double pts;
for(int i=0;i<=OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot<=OP_SELL)
{
if(om>=LastTime())
{
pts+=pt+sw+cm;
}
}
}
}
return(pts);
}
Ahmed
05-05-2018, 07:56 PM
بارك الله فيك اخي حسن
Tarek987
06-05-2018, 11:48 AM
إخواني الكرام ,,,, ممكن حد يساعدني ؟
أنا بدي الاكسبيرت ببساطة يفتح صفقة وحدة كلما شروط البيع او الشراء تحققت ,,, يعني لو فتح الاكسبيرت صفقة شراء و بعدين صفقة بيع ,, و بعد ذلك اذا تحققت الشروط مرة اخرى للبيع او الشراء كمان حابب انو الاكسبيرت يضيف على الصفقات المفتوحة صفقات جديدة .
void OnTick()
{
double fastMA = iMA (NULL,60,5,0,0,0,0);
double slowMA = iMA (NULL,60,30,0,0,0,0);
if (fastMA>slowMA)
if (Orderscnt()==0) //for first buy order
int ticket_1 = OrderSend (Symbol(),OP_BUY,lot,Ask,30,0,0,NULL,magicno,0,clr Green);
if (fastMA<slowMA)
if (Orderscnt()==0) // for first sell order
int ticket_2 = OrderSend (Symbol(),OP_SELL,lot,Bid,30,0,0,NULL,magicno,0,cl rRed);
if (fastMA>slowMA)
if (Orderscnt()>0) // for any future buy order
int ticket_1 = OrderSend (Symbol(),OP_BUY,lot,Ask,30,0,0,NULL,magicno,0,clr Green);
if (fastMA<slowMA)
if (Orderscnt()>0) // for any future sell order
int ticket_2 = OrderSend (Symbol(),OP_SELL,lot,Bid,30,0,0,NULL,magicno,0,cl rRed);
}
//+------------------------------------------------------------------+
int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicno)
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}
kira-h
06-05-2018, 10:35 PM
بارك الله فيك اخي حسن
وإياك اخي الكريم
kira-h
06-05-2018, 10:45 PM
إخواني الكرام ,,,, ممكن حد يساعدني ؟
أنا بدي الاكسبيرت ببساطة يفتح صفقة وحدة كلما شروط البيع او الشراء تحققت ,,, يعني لو فتح الاكسبيرت صفقة شراء و بعدين صفقة بيع ,, و بعد ذلك اذا تحققت الشروط مرة اخرى للبيع او الشراء كمان حابب انو الاكسبيرت يضيف على الصفقات المفتوحة صفقات جديدة .
void OnTick()
{
double fastMA = iMA (NULL,60,5,0,0,0,0);
double slowMA = iMA (NULL,60,30,0,0,0,0);
if (fastMA>slowMA)
if (Orderscnt()==0) //for first buy order
int ticket_1 = OrderSend (Symbol(),OP_BUY,lot,Ask,30,0,0,NULL,magicno,0,clr Green);
if (fastMA<slowMA)
if (Orderscnt()==0) // for first sell order
int ticket_2 = OrderSend (Symbol(),OP_SELL,lot,Bid,30,0,0,NULL,magicno,0,cl rRed);
if (fastMA>slowMA)
if (Orderscnt()>0) // for any future buy order
int ticket_1 = OrderSend (Symbol(),OP_BUY,lot,Ask,30,0,0,NULL,magicno,0,clr Green);
if (fastMA<slowMA)
if (Orderscnt()>0) // for any future sell order
int ticket_2 = OrderSend (Symbol(),OP_SELL,lot,Bid,30,0,0,NULL,magicno,0,cl rRed);
}
//+------------------------------------------------------------------+
int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicno)
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}
تم التصحيح بالكود التالي :
datetime time=0;
void OnTick()
{
double fastMA = iMA (Symbol(),60,5,0,0,0,0);
double slowMA = iMA (Symbol(),60,30,0,0,0,0);
if(fastMA>slowMA)
{
if(time!=Time[0])
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,30,0,0,"",magicno,0,clrGreen);
time=Time[0];
}
}
if(fastMA<slowMA)
{
if(time!=Time[0])
{
ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,30,0,0,"",magicno,0,clrRed);
time=Time[0];
}
}
}
Abdounour
07-05-2018, 12:43 PM
السلام عليكم
هل ممكن الدالة التى يمكن بها اضافة خاصية الربح بالدولار لكل صفقة منفصلة مثل ما هو موجود خاصية الربح بالنقاط لكل صفقة اي يكون
Lots_1
TakeProfit_1
win_USD 1
Lots_2
TakeProfit_2
win_USD 2
Lots_3
TakeProfit_3
win_USD3
وهكذا
https://a.top4top.net/p_856l15dr1.jpg
وشكرا
kira-h
07-05-2018, 06:14 PM
السلام عليكم
هل ممكن الدالة التى يمكن بها اضافة خاصية الربح بالدولار لكل صفقة منفصلة مثل ما هو موجود خاصية الربح بالنقاط لكل صفقة اي يكون
Lots_1
TakeProfit_1
win_USD 1
Lots_2
TakeProfit_2
win_USD 2
Lots_3
TakeProfit_3
win_USD3
وهكذا
https://a.top4top.net/p_856l15dr1.jpg
وشكرا
وعليكم السلام
دالة الربح بالدولار لآخر صفقة مفتوحة حسب النوع أو بدون النوع (حسب الاختيار) هي كالتالي :
double ProfitUSD(int type=-1)
{
double pts;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
pts=pt+sw+cm;
}
}
}
return(pts);
}
مثلا الربح بالدولار لآخر صفقة شراء مفتوحة :
ProfitUSD(OP_BUY);
الربح بالدولار لآخر صفقة مفتوحة :
ProfitUSD();