النتائج 1 إلى 15 من 16
الموضوع: سؤال برمجي بسيط
- 29-12-2010, 09:06 PM #1
سؤال برمجي بسيط
السلام عليكم ورحمة الله و بركاته
عندي مشكلة بما اني مبرمج جديد,
كيف اجعل الاكسبيرت يفتح order واحد فقط عند ظهور العلامة؟ لان العلامة تبقى الى نهاية الاشارة سواءا كانت بيع او شراء
فماذا اضيف هنا؟
كود PHP:if (B1>10000){
OrderSend(Symbol(),OP_SELL,Lots,Bid,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumber,0,Red); //int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
OrderClose(OrderTicket(),Lots,Bid,SlipPage,Blue); //bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
PlaySound("Alert.wav"); //To Play A Sound When Opening an Order
GetLastError( );
//Alert (GetLastError()); // Error message
if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)<=0 || GetLastError()==134) return;
}
- 29-12-2010, 09:12 PM #2
رد: سؤال برمجي بسيط
متاسف هذا هو الكود في ابسط ما يمكن
كود PHP:if (B1>10000){
OrderSend(Symbol(),OP_SELL,Lots,Bid,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumber,0,Red);
OrderClose(OrderTicket(),Lots,Bid,SlipPage,Blue);
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)<=0 || GetLastError()==134) return;
}
- 30-12-2010, 01:27 AM #3
رد: سؤال برمجي بسيط
قم بتعريف متغير Time0 من نوع datetimeخارج الداله start
كود PHP:datetime Time0;
كود PHP:if (B1>10000&&Time0!=Time[0]){
OrderSend(Symbol(),OP_SELL,Lots,Bid,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumber,0,Red);
Time0=Time[0];
OrderClose(OrderTicket(),Lots,Bid,SlipPage,Blue);
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)<=0 || GetLastError()==134) return;
}
- 30-12-2010, 08:27 AM #4
رد: سؤال برمجي بسيط
شكرا جزيلا يا مستر دولار, ولكن عتدي مشكلة اخرى.
من المفروض ان عندما تاتي اشارة معاكسة يغلق الصفقة الحالية للعملة, ولكنه لا يغلقها و لكنه يفتح الجديدة.
كود PHP:if (B1>10000&&Time0!=Time[0]){
OrderSend(Symbol(),OP_SELL,Lots,Bid,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumber,0,Red);
Time0=Time[0];
OrderClose(OrderTicket(),Lots,Bid,SlipPage,Blue);
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)<=0 || GetLastError()==134) return;
}
منتظر ردك و شكرا مجددا
- 30-12-2010, 03:29 PM #5
رد: سؤال برمجي بسيط
لقد ضفت سطر اخر ولكني ما زلت بحاجة الى مساعدة
كود PHP:if (B1>10000&&Time0!=Time[0]){
OrderSend(Symbol(),OP_SELL,Lots,Ask,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumber,0,Red);
Time0=Time[0];
if(OrderSelect(MagicNumber, SELECT_BY_POS,MODE_TRADES)==true)
OrderClose(MagicNumber,Lots,Bid,SlipPage,Blue);
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)<=0 || GetLastError()==134) return;
}
و كيف اجعله يغلق اشارت الشراء فقط؟ وللعملة التي يعمل عليها فقط؟
- 30-12-2010, 04:03 PM #6
رد: سؤال برمجي بسيط
حسنا لقد غيرت قليلا و اظن ان هذا سيجعله يغلق الشراء او البيع فقط.
كود PHP:if (B1>10000&&Time0!=Time[0]){
OrderSend(Symbol(),OP_SELL,Lots,Ask,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumberSell,0,Red);
Time0=Time[0];
if(OrderSelect(MagicNumberBuy, SELECT_BY_POS,MODE_TRADES)==true)
OrderClose(MagicNumberBuy,Lots,Bid,SlipPage,Blue);
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)<=0 || GetLastError()==134) return;
}
ولكن المشكلة في المؤشر انه يحتاج الى وقت كبير جدا حتى تظهر علامة اخرى. لذا اريد ان اعرف هل هذا الكود سيجعله يغلق الصفقات بالطريقة الصحيحة؟ منتظر ردك و شكرا
- 30-12-2010, 05:13 PM #7
رد: سؤال برمجي بسيط
وهنالك مشكلة اخرى الاكسبيرت كان يفتح صفقات كفي كا حركة اذا يوجد free margin
ولكن الان الاكسبيرت لا يفتح اي صفقة رغم ان لا يوجد اي صفقة مفتوحة حاليا. لماذا؟ هل ال Time0 له علاقة بهاذا؟ واذا كان له علاقة فانا اريد ان الغيه واجعل الاكسبيرت يفتح order واحد للعملة, واذا وجد order مفتوح بنفس الاتجاه فلا يفعل شيء. هل هذا ممكن؟ لان الاشارة المعاكسة ممكن تاتي في البار الحالية ففي هذه الحالة لن يفعل اي شيء و هذه مشكلة.
اعذرني اخي لكثرة اسئلتي ولكن انا جديد في البرمجة و سمعت ان هذا افضل منتدى يساعد الجدد. في انتظار المساعدة و شكرا.
- 30-12-2010, 08:38 PM #8
رد: سؤال برمجي بسيط
بالنسبة للمتغير Time0 فلا علاقة له بعدم فتح صفقه أخرى لكن وظيفته فقط هو عدم فتح صفقة أخرى أو أكثر من صفقه في نفس الشمعه
الآن بالنسبة لإغلاق الصفقه المفتوحه فهذا الشرط خاطئ
كود PHP:if(OrderSelect(MagicNumberBuy, SELECT_BY_POS,MODE_TRADES)==true)
كود PHP:OrderSelect( int index, int select, int pool=MODE_TRADES)
فسوف تكون رقم الصفقه لذلك أولا سوف تقوم بتحديد رقم الصفقه بإستخدام الحلقه for
كود PHP:if (B1>10000&&Time0!=Time[0]){
OrderSend(Symbol(),OP_SELL,Lots,Ask,SlipPage,StopLoss,TakeProfit,"Abdu EA",MagicNumberSell,0,Red);
Time0=Time[0];
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)==true)
if(OrderMagicNumber()==MagicNumberBuy)
OrderClose(OrderTicket(),OrderLots(),Bid,SlipPage,Blue);
}
PlaySound("Alert.wav");
GetLastError( );
if(AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)<=0 || GetLastError()==134) return;
}
كود PHP:CloseBuyOrders();CloseSellOrders();
- 30-12-2010, 09:11 PM #9
رد: سؤال برمجي بسيط
شكرا جزيلا لردك يا مستر دولار, فعلت كل ما قلتهو فعلا الاكسبيرت رجع يفتح صفقات و لكن ما زال هنلك بعض المشاكل:
اولا: الاكسبيرت لم يغلق ال order المفتوح سابقا من خلاله
ثانيا: الاكسبيرت يفتح صفقة كل candle الى انتهاء المارجن و هاذا سيء للغاية
فقط! لقد اقتربت من الانتهاء منه. لذا انا في انتظار ردك و شكرا مجددا
- 30-12-2010, 09:39 PM #10
رد: سؤال برمجي بسيط
للرفع و في انتظارك يا مستر دولار
- 31-12-2010, 12:29 AM #11
رد: سؤال برمجي بسيط
بما أن الإكسبرت يفتح صفقه كل شمعه بدون التقيد بشروط المؤشر التي قمت بوضعها فهذا دليل على أنه يوجد خطأ في الشرط
B1>10000
لذلك يجب أن تقوم بمراجعة شروط الدخول وكيفية جعل المقارنه بشكل صحيح حتى تتحقق الشروط إستخدم الأمر Print أو Comment لإظهار قيم المؤشر التي يأخذها عندما تظهر إشارة الدخول من المؤشر
حتى تستطيع جعل المقارنه بشكل صحيح
- 31-12-2010, 05:39 AM #12
رد: سؤال برمجي بسيط
لقد فهمتني خطا, الاكسبيرت يفتح صفقات كل candle ولكن بوجود الشروط. وانا اريد ان يفتح في اول candle فقط و ينتظر الاشارة العكسية
- 31-12-2010, 01:00 PM #13
- 31-12-2010, 01:13 PM #14
رد: سؤال برمجي بسيط
المؤشر عبارة عن خط يظهر دائما. ممكن يتغير لونه ولمن لا يزال. على اية حال المشكلة الكبيرة حاليا في اغلاق الصفقات, عندما تحل ممكن ننظر للوقت, ولكن الاغلاق هو الاهم.
- 31-12-2010, 02:18 PM #15
رد: سؤال برمجي بسيط
اخيرا!!!!!!
لقد تمكنت من اغلاق الصفقات.
تبقى مشكلة واحدة فقط و سنتهي الاكسبيرت
و هي:- فتح اوردر واحد في كل اسارة و ليس في كل candle منتظر ردك يا مستر دولار و شكرا