تفضل لكن الموضوع ليس مكانه هنا
CloseExpertIfEquityReach
EquityToClose
CloseOrders
Printable View
شكرا" اخي اسامه على مساعدتك
واعتذر عن وضع الموضوع في المكان الخاطى
والله الموفق
الاخ مستر دولار
في هذا الكود:
لماذا وضعت شرط التحقق من نوع العقد بيع أو شراء في if الثانية لماذا لم تضع جميع الشروط مع بعضها.كود:
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);
}
}
}
سؤال ثاني
في دالة الوقف المتحرك في اكسبيرت السابق ما هو TrailingStep
ايضا لماذا أضفت شرط التحقق من نوع العقد هنا:
اذا كان الشرط :كود:
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
OrderType()<=OP_SELL
صحيح ، أليس معناه أن العقد شراء .
أخيرا
ما هو الفرق بين MoveBreakEven() و دالة الوقف المتحرك
شكرا مسبقا
https://forum.arabictrader.com/attac...csar-ea-v2.mq4
في الكود الخاص بالمضاعفة :
لم افهم الحاصرتين(bracket) باللون الاحمراقتباس:
for(s=0;s<OrdersTotal();s++)
{
OrderSelect(s,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber&&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,"MR.dollar EA",MagicNumber,0,Red);
}
}
}
بالنسبه للسؤال الأول
لا يوجد فرق فقط هو ترتيب للكود فلكل مبرمج طريقة كتابه للكود مختلفه ويراها أسهل وأوضح عند مراجعتها لاحقا إذا أراد التعديل عليه
بالنسبه ل التريلينج ستيب إذا راجعت الكود الخاص بهذا الجزء
فإذا جعلت TrailingStep=5 فلن يبدأ في إستخدام التريلينج ستوب إلا بعد ربح عدد نقاط TrailingStop+5كود PHP:
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits))
الشرط
OrderType()<=OP_SELL
يعني أن العقد بيع أو شراء فلاحظ يوجد علامة يساوي وهذا حتى نتأكد أن الصفقة ليست أمر معلق
البريك إيفن تقوم بتنفيذ أمر نقل السعر مره واحد فقط فمثلا عند ربح 30 نقطه يتم نقل الأستوب لوز إلى نقطه الدخول فقط ثم يتوقف عملها هنا أما التريلينج ستوب فهو يظل يقدم الأستوب لوز إلى ربح كلما تحرك السعر في إتجاه الصفقه
الجزء الأول هو هذا
وتم فيه إغلاق الحلقه وإغلاق الشرطكود PHP:
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();
}
}
ثم الجزء الثاني
لكن أنا عند كتابتهم جعلتها بهذا الشكلكود PHP:
{
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,"MR.dollar EA",MagicNumber,0,Blue);
}
}
وهي نفسهاكود PHP:
}{
كود PHP:
}
{
السلام عليكم ورحمة الله وبركاته
اشكر الاخوة على هذا الموضوع الرئع والتفاني الرائع بالمساعدة
ان تكرمتم أنا استخدم آلية المضاعفات عند الستوب لوز وابحث عن آلية أو كود يساعدني بمعرفة التالي:
1- كود يحصي عدد مرات ضرب التيك بروفت بشكل متتالي لنفس العملة والماجيك نمبر ونفس حجم اللوت بحيث ان وصل للعدد (X) المحدد ضمن المعطيات تفتح الصفقة التالية من حجم اول مضاعفه
2- كود يتابع حجم الرصيد ولكن بطريقة لم اعثر عليها بحيث انه يحتفظ بقيمة الرصيد عند افتتاح التداول وليس خلال التداول يعني اني اريد ان يكون مجموع ارباح اليوم فقط 300 بعدها اوقف الاكسبرت
ولكم جزيل الشكر
وعليكم السلام ورحمة الله وبركاته
بالنسبه للجزء الأول فيمكنك عمل داله لحساب هذا الأمر بحيث يقوم بالبحث في الصفقات التي أغلقت إذا كانت الصفقه رابحه وحجم اللوت لها مساوي لحجم آخر لوت يقوم بحسابها كمثال
بالنسبه للجزء الثاني فيمكنك عمل داله أخرى لحساب الربح اليومي كمثالكود PHP:
double GetLastLot(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(OrderLots());
}
}
return(0);
}
int ConsWinsNumber(){
int Number;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderLots()==GetLastLot()&&OrderProfit()>0)
Number++;
else return(Number);
}
}
return(Number);
}
كود PHP:
double ProfitToday(){
double P;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderOpenTime()<=iTime(Symbol(),1440,0)){
P+=OrderProfit();
}
}
return(P);
}
جازاك الله كل خير على سرعة ردك... لكن لدي استفسار واعذرني وبصراحه انا تلميذك بالبرمجة بطارد مشاركاتك من موضوع لموضوع الله يرزقك الجنة انت وكل الاخوة
استفساري بخصوص الكود الأول انا بدي ياه يكون يحسب من الهستوري عدد X من الصفقات السابقة والعدد X هو متغير انا بحدده من الاعدادات ، انا متأكد انت فاهم علي بس انا بعدني مش فاهم عليك...
الخلاصة انا بهمني انه أوصل لشرط معناه ( اذا ربحت العدد X من الصفقات بشكل متتالي) انفذ موضوع الشرط
وشكرا على الكود الثاني هو المطلوب بالتمام والكمال بس شدلي حيلك وفهمني الاولاني
استفسار اخر لو سمحت بالنسبة للكود الأول احنا لازم نبحث بالهستوري صح؟ اذا لماذا استخدمت MODE_TRADES ولم نستخدم MODE_HISTORY
الداله الأول ConsWinsNumber سوف تقوم بحساب عدد الصفقات الرابحه المتتاليه بنفس حجم اللوت والماجيك نمبر
فعندما تريد وضع الشرط سيكون كالآتي
نعم كلامك صحيح ستستخدم MODE_HISTORY هو فقط خطأ غير مقصودكود PHP:
if(ConsWinsNumber()>X)
{
// Do something
}
جازاك الله كل خير... من الصبح وانا اسوي رفرش للصفحه ما شاء الله عليك وجاري التجربة وانا متأكد انها حتكون ناجحه ان شاء الله
السلام عليكم
اخي Mr.Dollar اتمنى تستحملني شوي انا سويت التالي:
عرفت المتغير:
وضعت الأمر بعد الـ Startكود PHP:
extern int ConsecutiveProfit=3; //اقصى عدد للربح المتوالي
كود PHP:
if(ConsWinsNumber()>=ConsecutiveProfit) { تنفيذ الامر; }
بعدين وضعت الدالة لكني عدلت عليها اني مش بحاجه انها تقارن حجم اللوت لان الصفقة ان خسرت مرة اللوت حيتضاعف بينما ان ربح 3 مرات متتالية فهو حيكون بنفس الحجم بشكل طبيعي:
كود PHP:
int ConsWinsNumber()
{
int Number;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderProfit()>0)
Number++;
else return(Number);
}
}
return(Number);
}
ولكن لا يوجد نتيجة ، وقمت بعرض الـConsWinsNumber() على التشارت حتى اتابعه اثناء سير التست إلا انه لم يتغير وكان دائما صفر فهل السبب اني عبعمل باك تست؟؟ ولا في خطأ تاني