النتائج 4,456 إلى 4,470 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 22-10-2013, 01:56 AM #4456
موضوع مفيد جدا
ماشاء الله
- 22-10-2013, 07:59 PM #4457
- 23-10-2013, 04:48 AM #4458
- 23-10-2013, 07:17 AM #4459
رد:موضوع مخصص للأسئلة البرمجية
عندي سؤال
صممت مؤشر بسيط واريد ان احسب عدد المؤشرات التي الصقت في في الشارت في نفس الوقت من بنفس الاسم
مثال لنفترض ان اسم المؤشر DD ووضعته في الشارت ثم اضفته مرة أخرى في الشارت بنفس الاسم فيكون لدينا مؤشرين هما DD DD اذن عددهم يساوي 2
حاولت ووضعت هذه الاكواد
كود PHP:double Var;
int init()
{
if(GlobalVariableCheck("count")==true)
{
Var=GlobalVariableGet("count");
GlobalVariableSet("count",Var+1);
}
else{
Var=1;
GlobalVariableSet("count",Var);
}
Comment("Var =",Var);
//----
return(0);
}
int deinit()
{
//----
Var=Var-1;
//----
return(0);
}
حتى اذا اضفت المؤشر يحسب قيمة للمتغير الجلوبال واذا تم اضافة نفس المؤشر فانه يبحث عن المتغير جلوبال ويضيف له قيمة وعندما احذف المؤشر نفسه ينقص قيمة ولكن المشكلة كلما اغير من فريم الى فريم تتغير قيمة المتغير Var يعني عندما اضع المؤشر على فريم الساعة وانتقل الى فريم النصف ساعة او اعلى منع تتغير قيمة المتغير
اتمنى ان يكون سؤالي واضح
- 23-10-2013, 10:37 PM #4460
رد:موضوع مخصص للأسئلة البرمجية
لأن الطبيعي عندما تقوم بتغيير التايم فريم فكأنك حذفت المؤشر وقمت بوضعه من جديد
بالتالي عندما تحذف المؤشر يجب أن تنقص القيمه 1 أنت أضفت هذا الكود في الداله deinit لكن لديك جزء ناقص بها
المفروض بعد أن تنقص قيمة
كود PHP:Var=Var-1;
كود PHP:GlobalVariableSet("count",Var);
- 24-10-2013, 07:59 PM #4461
رد:موضوع مخصص للأسئلة البرمجية
جربت واضفت ما ذكرت ولكن ينقص القيمة كلما غيرت من فريم الى الاخر
دالة deinit حسب فهمي هي عندما تحذف المؤشر تضع به كود لحذف object او حذف اشياء لكن طالما ان المؤشر موجود وتغير من فريم الى اخر لا يحذف
جرب مثلا وضع عملية جمع بسيطة لمتغير x =x+2
وضعها في ال deinit وضع تعليق ليبين القيمة x ستجد انه عند تغير الفريم الى اخر والمؤشر موجود فان قيمة x لا تظهر ولكن عند حذف المؤشر فان قيمة x تظهر وهنا دليل على ان وظيفة الدالة deinit هي عندما يحذف المؤشر فان هذه الدالة تنفذ مهمة محددة كما انه عندما يوضع المؤشر على الشارت فان دالة init تنفذ فقط مهمة محددة يعني هذه الدالة لها مهمة واحدة فقط وهي عند حذف المؤشر او الاكسبيرت
- 27-10-2013, 02:40 AM #4462
- 31-10-2013, 03:49 PM #4463
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم
الأخوة الاعزاء أرجو المساعده في الدوال البرمجية لفكرة الاكسبرت التالية
قمت بعمل اكسبرت يفتح صفقات سواء بيع او شراء طبقا لشروط معينه عند الساعه 0 كل يوم
واذا أتت الصفقه بهدفها ينتهي عمله طيلة اليوم والانتظار لليوم التالي
اما اذا لم يحقق هدفه تبدا عملية المضاعفة بضعف اللوت السابق
قمت بعمل التالي
عمل دالة خارج الداله ستارت لاستدعاء قيمة اخر لوت من الهيستري
عمل داله اخرى لمعرفة هل كانت اخر صفقة رابحه ام خاسرة
والامر تمام
ولكني أرغب عندما يتم الوصول لرقم مضاعفة معينة وعملته متغير خارجي واسميته MaxLot ألا يقوم بعمل مضاعفات أخرى والانتظار لبداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
بمعنى عندما يتم الدخول في المضاعفات يتوقف عند المضاعفة MaxLot وبعدها يبدا عمله من جديد عند بداية اليوم الجديد مثلما تم برمجتة باللوت المبدئي
وأشكر تعاونكم
وتحياتي للأخ مستر دولار والعزيز الغالي الاستاذ جميل
وبارك الله فيكم
- 31-10-2013, 09:09 PM #4464
رد:موضوع مخصص للأسئلة البرمجية
- 31-10-2013, 11:12 PM #4465
- 01-11-2013, 01:33 AM #4466
- 01-11-2013, 03:48 AM #4467
رد:موضوع مخصص للأسئلة البرمجية
أوك شكرا أخي العزيز الاستاذ أسامة
قمت اولا بتعريف متغير خارجي كالتالي
كود PHP:extern double Maxlot=0.8;
كود PHP:double LastOrderLots()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderLots());
}
}
return(0);
}
كود PHP:if(Time0!=Time[0] && (Sell_order-Buy_order)>=Min_Distance_Between_Orders*point && (Sell_order-Buy_order)<=Max_Distance_Between_Orders*point && MyOrdersTotal(MagicNumber)==0){Excute(0);Excute(1);}
وهذه دالة خارج الدالة ستارت لتنفيذ الصفقات
كود PHP://+------------------------------------------------------------------+
void Excute(int Direction)
{
if(Direction==0)
{
if(TakeProfit==0){TP=0;}else{TP=Buy_order+TakeProfit*point+Spread*point;}
if(StopLoss==0){SL=0;}else{SL=Buy_order-StopLoss*point;}
OrderSend(Symbol(),OP_BUYLIMIT,LotSize,(Buy_order+Spread*point),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Blue);
Time0=Time[0];
}
if(Direction==1)
{
if(TakeProfit==0){TP=0;}else{TP=Sell_order-(TakeProfit*point);}
if(StopLoss==0){SL=0;}else{SL=Sell_order+(StopLoss*point+Spread*point);}
OrderSend(Symbol(),OP_SELLLIMIT,LotSize,Sell_order,Slippage*D,SL,TP,"walid EA",MagicNumber,0,Red);
Time0=Time[0];
}
}
كود PHP:void CheckForOrders ()
{
if(orderscnt(OP_BUY)>0&&orderscnt(OP_SELLSTOP)==0 )
{
DeletePendingOrder(OP_SELLLIMIT);
if(TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_BUY)-TakeProfit*point-Spread*point;}
if(StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_BUY)+StopLoss*point+Spread*point;}
OrderSend(Symbol(),OP_SELLSTOP,LotsOrder(OP_BUY)*Multiplier,StopLossOrder(OP_BUY),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Red);
}
if(orderscnt(OP_SELL)>0&&orderscnt(OP_BUYSTOP)==0 )
{
DeletePendingOrder(OP_BUYLIMIT);
if(TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_SELL)+TakeProfit*point+Spread*point;}
if(StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_SELL)-StopLoss*point;}
OrderSend(Symbol(),OP_BUYSTOP,LotsOrder(OP_SELL)*Multiplier,StopLossOrder(OP_SELL),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Blue);
}
if(orderscnt(OP_BUY)+orderscnt(OP_SELL)==0)
{
DeletePendingOrder(OP_BUYSTOP);
DeletePendingOrder(OP_SELLSTOP);
}
}
كود PHP://+------------------------------------------------------------------+
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()&&OrderType()==type && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
double StopLossOrder(int type)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderStopLoss());
}
}
return(0);
}
//+------------------------------------------------------------------+
double LotsOrder(int type)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderLots());
}
}
}
//+------------------------------------------------------------------+
void DeletePendingOrder(int type)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
OrderDelete(OrderTicket());
}
}
}
//+------------------------------------------------------------------+
int MyOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
c++;
}
}
return(c);
}
وفكرة الاكسبرت أخي اسامة كالتالي
عند دخول الاكسبرت صفقة في بداية الساعه 0 بيفتح امرين سيل ليمت وباي ليمت وعند تفعيل احدها يقوم بحذف الامر الاخر وفي نفس الوقت يفتح ضعف العقد المفتوح من نقطة الاستوب لوز له صفقة معاكسة ستوب
وتبدا عملية المضاعفات لحين تحقيق الهدف خلال نفس اليوم اما اذا حقق الهدف يخرج ,وينتظر بداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
المطلوب تحديد حد اقصى للمضاعفات عن طريق المتغير الخارجي MaxLot بحيث اذا تم الوصول لهذا الرقم لا يفتح اي صفقات اخرى خلال هذا اليوم والانتظار لافتتاح يوم عمل جديد ومن ثم العودة من جديد باللوت المبدئي
جزاك الله عني كل خيرآخر تعديل بواسطة waleedgadelmola ، 01-11-2013 الساعة 03:57 AM
- 01-11-2013, 06:50 AM #4468
رد:موضوع مخصص للأسئلة البرمجية
ستقوم بعمل دالة لمعرفة توقيت إفتتاح آخر صفقة بالتالي معرفة هل جاء يوم جديد لم تفتح فيه صفقات أم لا
كود PHP:datetime LastOrderTime()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderOpenTime());
}
}
return(0);
}
كود PHP:void CheckForOrders ()
{
double NewLot;
if(orderscnt(OP_BUY)>0&&orderscnt(OP_SELLSTOP)==0&&LotsOrder(OP_BUY)<MaxLot||LastOrderTime()<iTime(Symbol(),1440,0))
{
DeletePendingOrder(OP_SELLLIMIT);
if(TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_BUY)-TakeProfit*point-Spread*point;}
if(StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_BUY)+StopLoss*point+Spread*point;}
if(LotsOrder(OP_BUY)>MaxLot)NewLot=LotSize;
else NewLot=LotsOrder(OP_BUY)*Multiplier;
OrderSend(Symbol(),OP_SELLSTOP,NewLot,StopLossOrder(OP_BUY),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Red);
}
if(orderscnt(OP_SELL)>0&&orderscnt(OP_BUYSTOP)==0&&LotsOrder(OP_SELL)<MaxLot||LastOrderTime()<iTime(Symbol(),1440,0) )
{
DeletePendingOrder(OP_BUYLIMIT);
if(TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_SELL)+TakeProfit*point+Spread*point;}
if(StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_SELL)-StopLoss*point;}
if(LotsOrder(OP_SELL)>MaxLot)NewLot=LotSize;
else NewLot=LotsOrder(OP_SELL)*Multiplier;
OrderSend(Symbol(),OP_BUYSTOP,NewLot,StopLossOrder(OP_SELL),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Blue);
}
if(orderscnt(OP_BUY)+orderscnt(OP_SELL)==0)
{
DeletePendingOrder(OP_BUYSTOP);
DeletePendingOrder(OP_SELLSTOP);
}
}
- 01-11-2013, 12:34 PM #4469
جزاك الله كل خيرا استاذ أسامة ظبط الاكسبرت ما شاء الله عليك
جعلك الله دائما مرجع لنا
تحياتي لشخصكم الكريم وجمعة مباركةآخر تعديل بواسطة waleedgadelmola ، 01-11-2013 الساعة 12:48 PM
- 07-11-2013, 02:24 AM #4470
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM