النتائج 7,216 إلى 7,230 من 10363
الموضوع: موضوع مخصص للأسئلة البرمجية
- 26-03-2016, 09:16 PM #7216
- 27-03-2016, 05:36 AM #7217
آخر تعديل بواسطة femtogold4 ، 27-03-2016 الساعة 05:41 AM
- 27-03-2016, 12:12 PM #7218
- 28-03-2016, 08:12 PM #7219
- 28-03-2016, 08:22 PM #7220
نعم الطريقة صحيحه تماما ولا غبار عليها
يمكنك أيضا بدلا من إستخدام المصفوفات يمكنك المقارنة مباشرة بين الصفقات بحيث تحفظ ربح كل صفقة بالتي تليها
مثال
بالنسبه للسؤال الثاني راجع كود المؤشر المرفق يمكنك إستخدام نفس الطريقهكود PHP:double profit1,profit2;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int ticket=OrderTicket();
int type=OrderType();
double lots=OrderLots();
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderType()==OP_BUY)profit1=(Bid-OrderOpenPrice())/Point;
else profit1=(OrderOpenPrice()-Ask)/Point;
profit1=OrderProfit();
for(int j=i-1;j>=0;j--)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderType()==OP_BUY)profit2=(Bid-OrderOpenPrice())/Point;
else profit2=(OrderOpenPrice()-Ask)/Point;
if(profit2+profit1>45)
{
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
else
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
if(type==OP_BUY)
{
OrderClose(ticket,lots,Bid,3);
}
else
{
OrderClose(ticket,lots,Ask,3);
}
}
}
}
}
}
- 29-03-2016, 01:31 AM #7221
الله يعطيك العافية وصلت الفكرة , استاذ اسامة ..
لكن واجهت مشكلة ..
كنت استخدم دالة LastOrderPrice
لاستخراج قيمة اول صفقة بيع واول صفقة شراء من المجموعةكود PHP:double LastOrderPrice(int type){ for(int i =0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderType()==type) { return(OrderOpenPrice()); } } return(0);}
الان بوجود عدة مجموعات , بعد وضع رقم تيكيت الصفقة الرئيسية في الصفقات الهيدج او التبريد
كيف اقدر اعمل المقارنة او البحث لاستخراج , قيمة افتتاح اول صفقتين من كل مجموعة
وشكرا جزيلا
- 29-03-2016, 03:37 PM #7222
كود PHP:double Su[5];
Su[0]=1+2;
Su[1]=1+3;
Su[2]=1+4;
Su[3]=1+5;
Su[4]=1+6;
استاذ اسامه .. عندي استفسار اخركود PHP:for(int i=0;i<5;i++)
{
if( Close[1]>Su[i]&& Su[i]>=Close[0] )
{
}
}
استخدم المستويات على شكل مصفوفه
اريد حين يتم تنفيذ على احد المستويات يتم كتابة اسم المستوى في كومينت الصفقة مثل Su[2]
حاولة استخدام Su[i] لكن يكتب لي قيمة المستوى ,
وشكرا جزيلا
- 29-03-2016, 05:22 PM #7223
استسمح الدكتور اسامة في الجواب
انظر اسفله اخي الكريم ستكون دالة الشراء الاساسية هكذا
لاحظ اننا حولنا المتغير ticketb من تايب انتيجر الى سترينج لان الباراميتر comment في الدالة OrderSend يجب ان يكون من نوع سترينجكود PHP:int ticketb = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,sl,tp, IntegerToString(ticketb),Magic,0,Green);
بعد ذلك للبحث عن الصفقات والتحكم فيها من خلال الكومنت الذي احتفظنا بها بهذا الشكل
قد لا تحتاج لدالة يمكنك وضع المقارنة مباشرة ولكن وضعت لك الدالة لتقريب المعنىكود PHP:void OrderByTicket(){
int Myticket ;
for (int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
Myticket==StringToInteger(OrderComment());
{
If(Myticket== OrderTicket());
//Do some thing …..
}
}
}
اتبع نفس منطق الدالة التي كتبتها انت ولكن بدل الاحتفاظ بقيمة OpenPrice نحتفظ بالكومنت
هذا بالنسبة للسؤال الاول اما السؤال الثاني فستحتاج اللى دالة
هذا ما اعرف والله تعالى اعلمكود PHP:ObjectName();
تحياتي للجميع
- 29-03-2016, 08:40 PM #7224
يجب ان تعكس اللوب وتبدأ من OrderTotal -1 الى الصفر لان الصفقة الرئيسية هي الصفقة الاولى
- 30-03-2016, 01:33 AM #7225
بارك الله فيك أستاذي
لم أفهم طريقة عمل المؤشر ولكن بعد التجربة لاحظت تغير قيمة البريك ايفن عند كل حركة للسعر صعودا وهبوطا
ما أريده هو عمل هدف إجمالي بعد نقطة التعادل 0 نقطة لصفقات الشراء والبيع معا
يعني مثل هذه الدالة التي تعمل على الشراء منفصل عن البيع أريدها على جميع الصفقات كيف ذلك
لكن بعد عدة محاولات أظن انه غير ممكن فقد وجدت أخطاء في الهدف والستوب الاجمالي حيث يعطي 130 وما شابهكود PHP:double Av_Prices(int type) { double Price;double lots; for(int i=0;i<=OrdersTotal();i++) { bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()==type) { Price+=OrderOpenPrice()*OrderLots(); lots+=OrderLots(); } } if(lots!=0)return(Price/lots); else return(0); } void AvBreakEven() { double ProfitS=Av_Prices(OP_SELL)-(Takeprofit*point); double ProfitB=Av_Prices(OP_BUY)+(Takeprofit*point); for(int cnt=0;cnt<OrdersTotal();cnt++) { bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); double orderstop=OrderStopLoss(); double openprice=OrderOpenPrice(); int ticket=OrderTicket(); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo) { if(OrderType()==OP_SELL) { bool m1=OrderModify(ticket,openprice,orderstop,ProfitS,0,Blue); } if(OrderType()==OP_BUY) { bool m2=OrderModify(ticket,openprice,orderstop,ProfitB,0,Red); } } } }
لكن أظن يمكن عمله كهدف مخفي أو بمقارنة عدد العقود لا أعلم كيف أرجو المساعدةكود PHP:double All_Av_Prices() { double Price;double lots; for(int i=0;i<=OrdersTotal();i++) { bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL){ Price+=OrderOpenPrice()*OrderLots(); lots+=OrderLots(); } } if(lots!=0)return(Price/lots); else return(0); } void All_AvBreakEven() { double ProfitS=Av_Prices(OP_SELL)-MainProfit*point; double ProfitB=Av_Prices(OP_BUY)+MainProfit*point; double LossS=Av_Prices(OP_SELL)+MainProfit*point; double LossB=Av_Prices(OP_BUY)-MainProfit*point; for(int cnt=0;cnt<OrdersTotal();cnt++){ bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); double orderstop=OrderStopLoss(); double openprice=OrderOpenPrice(); int ticket=OrderTicket(); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){ bool m1=OrderModify(ticket,openprice,LossS,ProfitS,0,Blue); bool m2=OrderModify(ticket,openprice,LossB,ProfitB,0,Red); } } }
كل ما أريده هدف إجمالي بعد نقطة التعادل لكل الصفقاتآخر تعديل بواسطة femtogold4 ، 30-03-2016 الساعة 01:37 AM
- 30-03-2016, 02:28 AM #7226
الله يعطيك العافية اخووي goldfile .. ما قصرت
صار لي عدة شهور احاول برمجة الفكرة الى اكسبيرت , ومن الاسبوع السابق تفرغت للفكرة واحاول اجد حلول لجميع الخطوات
ومن كثر التفكير , الاستفسار السابق لم اعرف اصيغه صح << المعذره
وبسبب كثرة التفكير احس اني بعقد المسألة ,
لذلك سوف اشرح لك فكرة الاكسبيرت وارجو المساعدة في ايجاد الحلول , واعطاء الاكواد لكل حل


في كل مجموعة الصفقة تتفعل من كل مستوى مرة واحدة فقط
بعد فتح عدة صفقات ( هدف المجموعة , مجمل ناتج قيمة الصفقات تكون بالموجب )
المستويات ليست مؤشر بل معادلة حسابية
تتغير قيمة المستويات مع كل شمعة ( لذلك لا استطيع استخدام مسافة ثابتة )
واستخدم في تعريف المستويات هذا الكود
كود PHP:double Su[5];
Su[0]=1+2;
Su[1]=1+3;
Su[2]=1+4;
Su[3]=1+5;
Su[4]=1+6;
ارجوا ان وصلت لك الفكرة بالطريقة الصحيحة
وشكر جزيلاآخر تعديل بواسطة Profit Box ، 30-03-2016 الساعة 02:31 AM
- 30-03-2016, 02:16 PM #7227
- 31-03-2016, 04:26 PM #7228
السلام عليكم
شوف اخي الكريم المؤشر الذي ارفقه الدكتور اسامة من اروع ما رأيت في البريك ايفن يمكنك استخدامه بكامل السهولة مع اي اكسبريت تريد ولذلك
ارفقه الاخ اسامة وهو مفتوح المصدر , لا حظ بمجرد وضعه على الشارت يعطيك على اليمين سعر البريك ايفن وعلى يساره الربح بالدولار انظر الصورة

من داخل المؤشر احفظ قيمة BreakEven وكذلك Equity باستخدام الدالتين الظريفتن
ثم تسترجع القيم من اجعل عمل شرط تحرك البريك ايفن مثال من داخل المؤشركود PHP:GlobalVariableSet() ;
GlobalVariableGet() ;
sum هي قيمة Equity و level0 هي قيمة البريك ايفنكود PHP:GlobalVariableSet("BreakEven_Equity"+Symbol()+AccountName(),sum) ;
GlobalVariableSet("BreakEven_Level"+Symbol()+AccountName(),level0) ;
ثم من داخل الاكسبريت اعمل الاتي لاسترجاع القيم هكذا بكل يسر
مع تعرف المتغيرين iEquity و BreakLevel كمتغيرين عامينكود PHP:iEquity = GlobalVariableGet("BreakEven_Equity"+Symbol()+AccountName()) ;
BreakLevel = GlobalVariableGet("BreakEven_Level"+Symbol()+AccountName()) ;
ثم بعد ذالك دالة الموديفاي وانا اكتبها في الغالب بهذا الشكل
ثم اخر مرحلة كتابة شرط تحريك الستوب لوز مع استدعاء الدالة ModifyStopLossكود PHP:void ModifyStopLoss(double stoploss) {
bool ret;
ret = OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
if (ret == false)
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
اظن ان الامور واضحة هذا ما استطيع فعله اخي الكريم وتقبل خالص وديكود PHP:void BreakEven()
{
double price = BreakLevel ;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(Ask > OrderOpenPrice() && iEquity >=0 && OrderStopLoss()< OrderOpenPrice() )
if(OrderType()==OP_BUY)
ModifyStopLoss(BreakLevel) ;
if(OrderType()==OP_SELL)
if(Bid < OrderOpenPrice() && iEquity >=0 && OrderStopLoss()> OrderOpenPrice() )
ModifyStopLoss(BreakLevel) ;
}
}
- 31-03-2016, 04:37 PM #7229
السلام عليكم
اخي الكريم Profit Box بهذا الشكل انت تريد عمل اكسبريت كامل وانا لااستطيع ذلك يمكن الدكتور اسامة او احد الاخوة , اما اذا كنت بدأت العمل على الاكسبريت و تحتاج مساعدة في جزء معين منه او الاستفسار بخصوص
مشكلة اعترضتك فيمكنني مساعدتك الامر ليس صعب ولكن توكل على الله واعمل الخطوات الاولى وستجد المساعدة والدعم في منتدانا الغالي حتى تحصل على ما تريد
تقبل خالص تحياتي واعتذاري ايضا
اخي للكريم
- 01-04-2016, 04:43 AM #7230
الله يعطيك العافية .. ما قصرت
الحمدالله انا انتهيت من الاكسبيرت بس ينفذ مجموعة وحده , وحطيته على سيرفر وبتابع النتائج ..
حاليا بحاول اطوره انه ينفذ عدة مجموعات في نفس الوقت وواجهتني مشكلة وارجوا المساعدة
اريد ربط الصفقات عبر النمبر ماجيك
للصفقات الرئيسية في خانة النمبر ماجيك وضعت رقم التكيت لاعطاء كل صفقة رئيسية نمبر ماجيك خاص ( ارجوا التصحيح ان أخطأت )
كيف اقدر انقل للصفقات الفرعية النمبر ماجيك الصفقات الرئيسية ( ارجوا التوضيح )كود PHP:OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3*Q,0,0,"EA",OrderTicket(),0,Red);
واريد استخدم دالة البحث عن عدة الصفقات المفتوحة لكل مجموعة
الحين لكل مجموعة نمبر ماجيك خاص ( الي هو رقم التكتيت للصفقة الرئيسية ) كيف تصبح المقارنة او صغية الكود للدالةكود PHP:int orderscnt() { int cnt=0; for(int i =0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){ cnt++; } } } return(cnt); }
وشكرا جزيلا
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM
الأكثر زيارة

رد مع اقتباس