رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة reda-hadhod
السلام عليكم ورحمة الله
أخى الفاضل أسامة لقد تفضلت وبرمجت اكسبرت للموفنج واسمة MR.dollar_ma breakout v4.2
أريد منك اخى الفاضل ان توضح لى بعد أذنك : يوجد فى خانة أعدادات الاكسبرت closOppsiteSignal
Lots_1 . Lots_2 . Lots_3 وكل منهم لهم تاك بروفت واستوب لوز ,, لماذا لم تجعلها ب لوت واحد ولو
أردت أن أجعلها ب لوت واحد ممكن أحذف الاخرين وهل سيؤثر ذلك على دوال أوامر الشراء والبيعالملف المرفق 357559
وفى الصور الثانية يوجد فى order management عدد 2 trailingstop لماذا ؟
وهل معنى BreakEven هو هو الدخول بعد عدد معين من الشموع
وما معنى movestopto
وأخيرا هل يصلح هذا الاكسبرت للعمل على منصة 5 أرقام
الملف المرفق 357558
وأعتذر على أسئلتى الكثيرة , وبارك الله فى عملك ورزقك أخى الكريم
وعليكم السلام ورحمة الله وبركاته
CloseOppositeSignal خيار في حال أردت إغلاق الصفقه المفتوحه حاليا عند ظهور إشارة دخول عكسيه
Lots_1, Lots_2 , Lots_3 من طلب برمجة الإكسبرت هو طلب وضع خيار فتح ثلاث صفقات كل صفقه لها حجم لوت معين وهدف وستوب لوز معين
إذا أردت إلغاء حجم لوت معين إجعله = 0
في خيارات التريلينج ستوب
trailingstop هو التريلينج ستوب
trailingstep هو عدد النقاط التي سيبدأ من بعدها عمل التريلينج ستوب مثلا لو جعلته 50 نقطه فسوف يبدأ في تحريك التريلينج بعد 50 نقطه وهكذا
BreakEven هي خاصية نقل الأستوب إلى نقطة الدخول أو عند نقطة ربح معينه بعد أن تربح الصفقه عدد نقاط معينه
مثلا لو جعلت BreakEven=20 وجعلت movestopto=5 فبعد ان تربح الصفقه 20 نقطه سوف ينقل الأستوب لوز إلى ربح + 5 نقاط
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة reda-hadhod
أشكرك أخى أسامة على سرعة الرد :icon26:
لقد لاحظت ان الاكسبرت اليوم صباحا فتح 3 صفقات بنفس السعر , واين خيار الدخول شراء اوبيع بعد عدد معين من الشموع .
وأن أمكن أريد منك أن تعدل علية لكى أرى كيف تكتب الدوال واين يجب وضعها ويكون كالاتى :
CloseOppositeSignal
لوت واحد -- وأستوب -- وأخذ الربح --- والدخول بعد عدد شمعات
وبنفس money mangement --- order mangement
منصة 4 أرقام ----- ومنصة 5 أرقام
أعتذر لك بشدة أخى أسامة عن كثرة طلباتى وأسئلتى وهذا هو السبيل الوحيد للتعلم منك
جزاك الله كل الخير وبارك فى عملك ورزقك
لا يوجد في الإكسبرت خيار دخول بعد عدد محدد من الشمعات
بالنسبه لجعل فتح الصفقه أمر واحد
هذه أوامر الشراء
كود PHP:
if (Open[1]<=ma1_B&&Open[0]>ma1_B&&Time0!=Time[0]&&buyN ){
if(orderscnt()<1){
if(StopLoss_1==0){SL=0;}else{SL=Ask-StopLoss_1*point;}
if(TakeProfit_1==0){TP=0;}else{TP=Ask+TakeProfit_1*point;}
OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots_1,Lot_Digits),NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
if(StopLoss_2==0){SL=0;}else{SL=Ask-StopLoss_2*point;}
if(TakeProfit_2==0){TP=0;}else{TP=Ask+TakeProfit_2*point;}
OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots_2,Lot_Digits),NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
if(StopLoss_3==0){SL=0;}else{SL=Ask-StopLoss_3*point;}
if(TakeProfit_3==0){TP=0;}else{TP=Ask+TakeProfit_3*point;}
OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots_3,Lot_Digits),NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
Time0=Time[0];buyN=false;sellN=true;
}
}
سوف تقوم بتعديلها لتصبح
كود PHP:
if (Open[1]>=ma1_S&&Open[0]<ma1_S &&Time0!=Time[0]&&sellN){
if(orderscnt()<1){
if(StopLoss_1==0){SL=0;}else{SL=Bid+StopLoss_1*point;}
if(TakeProfit_1==0){TP=0;}else{TP=Bid-TakeProfit_1*point;}
OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lots_1,Lot_Digits),NormalizeDouble(Bid,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
if(StopLoss_2==0){SL=0;}else{SL=Bid+StopLoss_2*point;}
if(TakeProfit_2==0){TP=0;}else{TP=Bid-TakeProfit_2*point;}
OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lots_2,Lot_Digits),NormalizeDouble(Bid,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
if(StopLoss_3==0){SL=0;}else{SL=Bid+StopLoss_3*point;}
if(TakeProfit_3==0){TP=0;}else{TP=Bid-TakeProfit_3*point;}
OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lots_3,Lot_Digits),NormalizeDouble(Bid,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
PlaySound("Alert.wav");
Time0=Time[0];buyN=true;sellN=false;
}
}
}
وأيضا نفس التعديل بالنسبه لكود البيع سوف تترك الأمر الأول وتحذف الأمرين الآخرين
بالنسبه للدخول بعد عدد معين من الشموع
سوف تقوم بتعديل دالة إستدعاء مؤشر الموفينج
كود PHP:
ma1_B=iMA(NULL,0,MaPeriod,0,MaType,PRICE_HIGH,1);
ma1_S=iMA(NULL,0,MaPeriod,0,MaType,PRICE_LOW,1);
مثلا لو تريد الدخول بعد مرور ثلاث شمعات من تحقق الشروط سوف تجعل بدلا من 1 تجعلها 3
أو حسب رقم الشمعه التي تريدها
ثم تقوم بتعديل شروط الدخول أيضا
كود PHP:
if (Open[1]<=ma1_B&&Open[0]>ma1_B&&Time0!=Time[0]&&buyN ){
بدلا من إفتتاح الشمعه رقم 1 سوف تجعلها 3 وبدلا من 0 سوف تجعلها 2
ونفس الفكره بالنسبه للبيع
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة mostafa400
السلام عليكم ورحمة الله وبركاته
ممكن شرح لعمل حلقة بعدادين
وشكرا جزيلا .
وعليكم السلام ورحمة الله وبركاته
مثال
كود PHP:
int i,j;
for(i=0,j=0;i<=5;i++,j=j+3)
{
Print(i);
Print(j);
}
في الكود السابق كما تلاحظ عندما تقوم بعمل حلقه بعدادين فتقوم بتعريف المتغيرين خارج الحلقه for
يمكنك وضع قيمة إبتدائيه للعدادين
يمكنك وضع كود الزياده أو النقصان للعدادين
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم استاذى الكريم
مستر دولار
ارجو من الله ان تكون فى اتم صحة واحسن حال
استاذى الكريم
سؤال برمجى
هل يوجد دالة تقوم بستدعاء اكسبيرت داخل اكسبيرت
يعنى
انا مثلا بعمل اكسبيرت وفى اكسبيرت موجود فى ملفات المنصة
ممكن استدعاء الاكسبيرت من داخل الاكسبيرت
مثل دالة استدعاء المؤشرات الخارجية
هل يوجد مثل هذا ؟
تحياتى لك وتقديرى لك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة mostafa400
جزاك الله خيرا
ممكن مثال للتوضيح أكثر بعد إذنك
على هذا الكود مثلا - هل او اى مثال آخر تراه مناسبا
كود:
double MyOrdersProfit()
{
double c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c=c+OrderProfit()+OrderCommission()+OrderSwap();
}
}
return(c);
}
في هذا الكود هي حلقه عاديه بعداد واحد
cnt=0
هذا تعبير إبتداء الحلقه ومن عندها سوف يبدأ العد
cnt<total
يسمى شرط الحلقه فكلما تحقق هذا الشرط يقوم بتنفيذ جسد الحلقه
cnt++
تعبير الزياده في الحلقه فكلما تحقق الشرط وقام بتنفيذ جسد الحلقه يقوم بزيادة قيمه الحلقه السابقه
جسد الحلقه هي الأوامر التي تقوم الحلقه بتنفيذها في كل مره
في هذا الكود
كود PHP:
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
c=c+OrderProfit()+OrderCommission()+OrderSwap();
}
معنى هذا الكود
في كل مره يقوم بإختيار الصفقه المفتوحه بناء على رقمها
ثم يقارن إذا كانت نفس العمله الموضوع على شارت الإكسبرت وكانت الصفقه بيع أو شراء
ينفذ الكود
كود PHP:
c=c+OrderProfit()+OrderCommission()+OrderSwap();
وهذا يعني أن المتغير c يقوم بجمع ربح الصفقات على بعضها
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم استاذى الكريم
مستر دولار
ارجو من الله ان تكون فى اتم صحة واحسن حال
استاذى الكريم
سؤال برمجى
هل يوجد دالة تقوم بستدعاء اكسبيرت داخل اكسبيرت
يعنى
انا مثلا بعمل اكسبيرت وفى اكسبيرت موجود فى ملفات المنصة
ممكن استدعاء الاكسبيرت من داخل الاكسبيرت
مثل دالة استدعاء المؤشرات الخارجية
هل يوجد مثل هذا ؟
تحياتى لك وتقديرى لك
وعليكم السلام ورحمة الله وبركاته
لا يمكن ذلك
لكن أبسط حل يمكن أن تقوم بعمله
تغيير إسم الداله start في الإكسبرت الذي تريد إستدعائه
ثم تقوم بإستدعاء هذه الداله بشكل كامل داخل الإكسبرت الجديد
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
لا يمكن ذلك
لكن أبسط حل يمكن أن تقوم بعمله
تغيير إسم الداله start في الإكسبرت الذي تريد إستدعائه
ثم تقوم بإستدعاء هذه الداله بشكل كامل داخل الإكسبرت الجديد
السلام عليكم استاذى الكريم
وشكرا على سرعة الرد
ارجو التوضيح اكثر
يعنى اعمل كوبى واضع اكسبيرت داخل اكسبيرت واخير اسم دالة : start
تمام كده ؟
طيب لو كان كده صح
مش يكون الاكسبيرت ثقيل على المنصة ؟
وكمان لو هذه الطريقة صح
كام اكسبيرت ممكن ادخله على اكسبيرت واحد ؟
انا فى دماغى فكرة
هو يكون اكسبيرت شامل كل تحركات السوق
ومع كل تحرك يشغل الاكسبيرت الخاص بهذا التحرك
تحياتى لك
رد:موضوع مخصص للأسئلة البرمجية
المرجو من الإخوة الاعضاء أن يساعدوني في برمجت هدا الكود
مهمت الكود الاول سهلة : الدخول في صفقة ب 0,1 في المئة من رأس المال
مهمت الكود التانية هي : إدا خسر السكريبت في صفقة . أن يقوم بقسمت الوت الدي خسره في الصفقة الصابقة على 5 و الخارج هو عدد الوت الدي سيدخل به في الصفقة جديدة.
أما أخر طلب أن يشرح لي المبرمج مكان وضع الكود في السكربت .
وشكرا على هدا المنتدى الرائع
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم استاذى الكريم
وشكرا على سرعة الرد
ارجو التوضيح اكثر
يعنى اعمل كوبى واضع اكسبيرت داخل اكسبيرت واخير اسم دالة : start
تمام كده ؟
طيب لو كان كده صح
مش يكون الاكسبيرت ثقيل على المنصة ؟
وكمان لو هذه الطريقة صح
كام اكسبيرت ممكن ادخله على اكسبيرت واحد ؟
انا فى دماغى فكرة
هو يكون اكسبيرت شامل كل تحركات السوق
ومع كل تحرك يشغل الاكسبيرت الخاص بهذا التحرك
تحياتى لك
وعليكم السلام ورحمة الله وبركاته
مثلا مرفق إكسبرتين
MR.dollar_ MA Breakout
و
Ma Crosses EA
أريد وضع جميع أوامر وكود إكسبرت Ma Crosses EA بداخل الإكسبرت الأول
هذه هي الداله الرئيسيه في الإكسبرت
كود PHP:
int start()
{
Comment("Programmed by MR.dollar"+"\n"+"منتدى المتداول العربي "+"\n"+"www.arabictrader.com/vb");
//////////////////////////////////////////////////
double ma1,ma2,ma11,ma22,rsi1,rsi2,ma3,ma33,ma4,ma44;
ma1=iMA(NULL,0,Slowma,SlowMa_Shift,Slowma_Mode,PRICE_CLOSE,0);
ma11=iMA(NULL,0,Slowma,SlowMa_Shift,Slowma_Mode,PRICE_CLOSE,1);
ma2=iMA(NULL,0,Fastma,FastMa_Shift,Fastma_Mode,PRICE_CLOSE,0);
ma22=iMA(NULL,0,Fastma,FastMa_Shift,Fastma_Mode,PRICE_CLOSE,1);
////////////////////////////////////////////////////
double SL,TP;
if(MM) Lots = subLotSize();
if ( (ma22<=ma11&&ma2>ma1)&&(NormalizeDouble(Bid,digits)-NormalizeDouble(GlobalVariableGet("x"),digits))/point>=XDistance
)
{
CloseSellOrders();
}
if ((ma22>=ma11&&ma2<ma1)&&(NormalizeDouble(GlobalVariableGet("x"),digits)-NormalizeDouble(Bid,digits))/point>=XDistance
)
{
CloseBuyOrders();
}
if(((ma22<ma11&&ma2>ma1)||(ma22>ma11&&ma2<ma1))&&Time00!=Time[0]){
GlobalVariableSet("x",Bid);
Time00=Time[0];
}
////////////////////////////////
if (UseHourTrade){
if(!(Hour()>=FromHourTrade&&Hour()<ToHourTrade)){
Comment("Non-Trading Hours!");
return(0);
}
}
if ((ma22<=ma11&&ma2>ma1)&&(NormalizeDouble(Bid,digits)-NormalizeDouble(GlobalVariableGet("x"),digits))/point>=XDistance ){
if(orderscnt()<MaxTrades){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;}
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),Slippage,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
}
/////////////////////
if ((ma22>=ma11&&ma2<ma1)&&(NormalizeDouble(GlobalVariableGet("x"),digits)-NormalizeDouble(Bid,digits))/point>=XDistance ){
if(orderscnt()<MaxTrades){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,digits),Slippage,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
PlaySound("Alert.wav");
}
}
}
سوف أقوم بتغيير إسمها لتصبح مثلا MaCrosses
كود PHP:
int MaCrosses()
{
Comment("Programmed by MR.dollar"+"\n"+"منتدى المتداول العربي "+"\n"+"www.arabictrader.com/vb");
//////////////////////////////////////////////////
double ma1,ma2,ma11,ma22,rsi1,rsi2,ma3,ma33,ma4,ma44;
ma1=iMA(NULL,0,Slowma,SlowMa_Shift,Slowma_Mode,PRICE_CLOSE,0);
ma11=iMA(NULL,0,Slowma,SlowMa_Shift,Slowma_Mode,PRICE_CLOSE,1);
ma2=iMA(NULL,0,Fastma,FastMa_Shift,Fastma_Mode,PRICE_CLOSE,0);
ma22=iMA(NULL,0,Fastma,FastMa_Shift,Fastma_Mode,PRICE_CLOSE,1);
////////////////////////////////////////////////////
double SL,TP;
if(MM) Lots = subLotSize();
if ( (ma22<=ma11&&ma2>ma1)&&(NormalizeDouble(Bid,digits)-NormalizeDouble(GlobalVariableGet("x"),digits))/point>=XDistance
)
{
CloseSellOrders();
}
if ((ma22>=ma11&&ma2<ma1)&&(NormalizeDouble(GlobalVariableGet("x"),digits)-NormalizeDouble(Bid,digits))/point>=XDistance
)
{
CloseBuyOrders();
}
if(((ma22<ma11&&ma2>ma1)||(ma22>ma11&&ma2<ma1))&&Time00!=Time[0]){
GlobalVariableSet("x",Bid);
Time00=Time[0];
}
////////////////////////////////
if (UseHourTrade){
if(!(Hour()>=FromHourTrade&&Hour()<ToHourTrade)){
Comment("Non-Trading Hours!");
return(0);
}
}
if ((ma22<=ma11&&ma2>ma1)&&(NormalizeDouble(Bid,digits)-NormalizeDouble(GlobalVariableGet("x"),digits))/point>=XDistance ){
if(orderscnt()<MaxTrades){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;}
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),Slippage,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
}
}
/////////////////////
if ((ma22>=ma11&&ma2<ma1)&&(NormalizeDouble(GlobalVariableGet("x"),digits)-NormalizeDouble(Bid,digits))/point>=XDistance ){
if(orderscnt()<MaxTrades){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,digits),Slippage,SL,TP,"MR.dollar EA",MagicNumber,0,Red);
PlaySound("Alert.wav");
}
}
}
ثم أقوم بوضع كل هذا الكود كأنه داله عاديه في الإكسبرت الأول
وأقوم بإستدعاء هذه الداله داخل الداله start للإكسبرت الأول
وطبعا لا تنسى إذا كان يوجد دوال أخرى في الإكسبرت تقوم أيضا بتعريفها أو متغيرات خارجيه تقوم بتعريفها
أيضا بالنسبه للدوال init و deinit سوف تقوم بتغيير أسمائهم
ثم تستدعيهم أيضا بداخل الداله init و deinit للإكسبرت الأول
وطبعا يمكنك بهذه الطريقه جعل إكسبرت واحد يحوي أي عدد إكسبرتات تريدها لكن المهم تحاول تبسيط الكود على قدر الإستطاعه
فمثلا لو كانت داله تستعمل في نفس الإكسبرتين تقوم بكتابتها مره واحده ولو كنت تريد تغيير الماجيك نمبر لكل إكسبرت حتى لا تختلط الصفقات ببعضها