النتائج 3,676 إلى 3,690 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 22-04-2013, 02:44 AM #3676
رد:موضوع مخصص للأسئلة البرمجية
أستاذي مستر دولار في المحاضرة السابعة درسنا تعليق الأوامر وكانت بوضع حلقة لتحديد العدد ، عند التنفيذ لايتوقف عند 3 اوامر ويعلق المئات مالم اسيطر على الأومر بأستخدام دوال أخرى اضافية فهل هذا الكود سليم ؟؟
فأذا كان كذلك فلماذا لايتوقف عند العدد وأذا كان خطأ فأين الخطأ ، جزاك الله خير .
كود PHP:for(int i=1; i<=3; i++){
double price = NormalizeDouble(Ask, Digits) + (Step*i*pt*Point);
double SL = price - Stoploss*pt*Point;
if (0 == 0) SL = 0;
double TP = price + Takeprofit*pt*Point;
if (0 == 0) TP = 0;
OrderSend(Symbol(), OP_BUYSTOP, Lots, price, 4, SL, TP, "My Expert", MagicNo, 0, Blue);
}
- 22-04-2013, 03:23 AM #3677
- 22-04-2013, 04:34 AM #3678
رد:موضوع مخصص للأسئلة البرمجية
في أوامر الشراء يجب أن يكون Ask وفي البيع يجب أن يكون Bid تماما مثل سعر الدخول يدويا
أما بالنسبه للأمر المعلق فحتى إذا جعلت مثلا في الشراء Bid+ عدد النقاط فلن تفرق كثيرا إلا عدد نقاط الإسبريد فبدلا من أن السعر مثلا سيكون أمر معلق 1.4050 فسوف يصبح 1.4047
بالنسبه للتعديل فهو صحيح
- 22-04-2013, 04:38 AM #3679
رد:موضوع مخصص للأسئلة البرمجية
وعليكم السلام ورحمة الله وبركاته
switch تستخدم لتقارن بين القيمة المدخله وكل حاله في case وعند تحقق الشرط ينفذ الأمر
مثال
كود PHP:int Number;
switch(Number)
{
case 1:Print("Number is 1");break;
case 2:Print("Number is 2");break;
case 3:Print("Number is 3");break;
default:Print("None");break;
}
عند تحقق الحاله الثانيه أي أن قيمة Number تساوي 2 فسيطبع الجمله الثانيه
عند تحقق الحاله الثالثه أن قيمة Number تساوي 3 سيطبع الجمله الثالثه
في حال عدم تحقق أي الشروط السابقه فسوف يطبع None
- 22-04-2013, 04:40 AM #3680
رد:موضوع مخصص للأسئلة البرمجية
يمكنك عمل دالة لمعرفة نوع آخر صفقه
كود PHP:int LastOrderType()
{
for (int cnt = OrdersTotal()-1 ; cnt > 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
return(OrderType());
}
}
return(-1);
}
- 22-04-2013, 05:17 AM #3681
- 22-04-2013, 08:54 AM #3682
- 22-04-2013, 02:44 PM #3683
- 23-04-2013, 03:41 AM #3684
- 24-04-2013, 07:37 AM #3685
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم أستاذ اسامه
ما الخطأ بهذه الداله
كود PHP:
string firstclosed()
{
for(int i=1;i>=OrdersHistoryTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) return("profit");
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) return("loss");
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) return("profit");
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) return("loss");
}
}
return("none");
}
و إذا أردت أن يغلق الإكسبيرت باقي الصفقات المفتوحه إذا أغلقت أول صفقه منهم على ربح أو خساره هل ينفع أي من هذين الشرطين
كود PHP:if (firstclosed()=="lost" || firstclosed()=="profit" && orderscnt(OP_BUY)+orderscnt(OP_SELL)>1) { CloseOrders();}
///أو ///
if ( TP==OrderTakeProfit() || SL== OrderStopLoss() ) { CloseOrders();}
- 24-04-2013, 12:52 PM #3686
استاذى الحبيب اسامه
عندى مشكله الان عند انقطاع الكهرباء
وتتخلص فيما يلى الاكسبريت قام بفتح صفقه ثم اقطعت الكهرباء
عند رجوعها وتشغيل الاكسبريت يتجاهل الصفقه المفتوحه وطبعا الاكسبريت بيعتمد
على الاغلاق المعاكس ودخول فى مضاعفات
فهل يمكن حل هذة المشكله
منتظر ردك للاهميه
- 24-04-2013, 04:34 PM #3687
السلام عليكم
ممكن شرح لطريقة عمل اكسبيرت مضاعفات
فقد قمت ببرمجت اكسبيرت على شارة الرينكو
فكرته بسيطة يفتح صفقة شراء مثلا ولا يخرج منها
الا عند اغلاق شمعة نازلة ويدخل مباشرة بيع
ما ارده هو دالة تقوم بمراقبة الصفقة اول ما تاتي اشارة
عكسية فلو كانت الصفقة رابحة يغلقها ويدخل من جديد
لو كانت خاسرة اي اوقات التذبذب يحافظ عليها ويدخل بصفقة
عكسية +1 لوت ويستمر لو كانت شمعة عكسية يراقب لو
كان مجموع الصفقتين خسارة يحافظ عليهما ويدخل بلوت +1
مع الشمعة العكسية اي في نفس انتجاهها ولا يخرج حتى
يكون مجموع الصفقات موجب عند الاشارة العكسية
المضاعفات تكون 1 2 3 4 5 6 7 8 9
فقد بحث على موضوع تعليمي للمضاعفات لكن لم اجد للاسف
- 24-04-2013, 05:58 PM #3688
رد:موضوع مخصص للأسئلة البرمجية
بالنسبة للكود البرمجي فهو
كود PHP:double TP,SL;
if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////
double openprice,lots,newLot;int s;
if(UseMultiplier){
for(s=0;s<OrdersTotal();s++){
OrderSelect(s,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
openprice=OrderOpenPrice();lots=OrderLots();
}
}{
هنا قمت بجعل المضاعف + وكمتغير خاجي جعلت Multiplier =1
حتى تكون المضاعفات 1 2 3 4 5 6
newLot=Multiplier+lots;
if(Ask<=openprice-Step*point&&orderstotal()>=1){
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,newLot,NormalizeDouble(Ask,digits),3,0,TP," ",MagicNumber,0,Blue);
}
}
for(s=0;s<OrdersTotal();s++){
OrderSelect(s,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL){
openprice=OrderOpenPrice(); lots=OrderLots();
}
}{
newLot=Multiplier+lots;
if(Bid>=openprice+Step*point&&orderstotal()>=1){
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_SELL,newLot,NormalizeDouble(Bid,digits),3,0,TP,"",MagicNumber,0,Red);
}
}
}
//////////////////////////////////////////////////
static datetime NewBar;
if(orderstotal()==0)
{
// close orders
}
double Cl1=iClose(0,0,1);
double Cl2=iClose(0,0,2);
//////////////////////////////////////////////////
if(NewBar<Time[0])
if(Cl2<Cl1)
{CloseSellOrders();}
if(Cl2>Cl1)
{CloseBuyOrders();}
if(profit()>=ProfitTarget){
while(orderstotal()>0){CloseSellOrders();CloseBuyOrders();}
هنا المشكلة الاولى كيف اجعله يحافظ على الصفقات الخاسرة
دون اغلاقها
}
{
// close orders
}
//////////////////////////////////////////////////
if(Cl2<Cl1) {
if(orderstotal()<MaxTrades&&Time0!=Time[0])
{
{
// open orders
Time0=Time[0];
}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);
}
}
//////////////////////////////////////////////////
if(Cl2>Cl1){
if(orderstotal()<MaxTrades&&Time0!=Time[0])
{
{
// open orders
Time0=Time[0];
}
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);
}
}
return(0);
}
//+------------------------------------------------------------------+
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
}
void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red);
}
}
}
}
}
}
اعتمدت هنا على دالة اغلاق على ربح معين لكن لو امكن
جعل الطريقة كما شرحتها يخرج عند اشارة عكسية مهما كان
الربح كبير او صغير او حتى على نقطة التعادل
double profit(){
double c;
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
c=c+OrderProfit();
}
}
return(c);
}
آخر تعديل بواسطة imaddine1986 ، 24-04-2013 الساعة 06:00 PM
- 24-04-2013, 08:34 PM #3689
سبق لأستاذي مستر دولار الأجابة على مثل هذا السؤال اقراء هذه المشاركة وركز فيها
https://forum.arabictrader.com/t3761...ml#post2428613
- 25-04-2013, 01:39 AM #3690
رد:موضوع مخصص للأسئلة البرمجية
وعليكم السلام ورحمة الله وبركاته
بداية البحث يجب أن تكون من i=0 حتى i أكبر من فقط وليس أكبر من أو تساوي
لأن عدد الصفقات المغلقه مثلا لو كانت 5 صفقات فأرقامها تكون من 0 إلى 4
بالنسبه للشرط فسيكون صحيح لكن ستواجهك مشكله لنفرض أن الصفقات أغلقت وأردت أن تبدأ سلسله جديده
فمجرد أن تفتح صفقه لتبدأ سلسله جديده ستجد أن الشرط قد تحقق أيضا وستغلق الصفقه مباشره
لذلك ستحتاج عمل دالة نفس الداله السابقه لكن مع إضافة شرط لتحديد الصفقه التي أغلقت بناء على الوقت أيضا كمثال
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM