وعليكم السلام ورحمة الله وبركاته
دالة الإخفاء تستخدم عدد النقاط لحساب الربح تماما مثل الهدف والأستوب لوز العادي
لكن الإغلاق على ربح بالدولار فيغلق على ربح بالدولار مهما كان الربح بالنقاط بالتالي سيختلف بناء على حجم اللوت
Printable View
تمام أستاذي أسامة ..
إذا اردت شرطا بحيث يفتح شراءا عند ملامسة هذا الهاي الذي بحثت عنه ولا يقوم بفتح شراء مره أخرى إلا بعد مرور 24 ساعه من آخر شمعة أو آخر توقيت تم البحث فيه و ليس من آخر فتح أو إغلاق آخر صفقة .. كيف أعبر عن هذا الشرط و الدوال المستخدمة له .؟؟كود PHP:
datetime S_Time =StrToTime(TimeToStr(iTime(Symbol(),PERIOD_D1,1),TIME_DATE)+" "+Start_Time);
datetime E_Time =StrToTime(TimeToStr(iTime(Symbol(),PERIOD_D1,0),TIME_DATE)+" "+End_Time);
int S_Bar=iBarShift(Symbol(),0,S_Time,false)+1;
int E_Bar=iBarShift(Symbol(),0,E_Time,false);
double high=High[iHighest(Symbol(),0,MODE_HIGH,S_Bar-E_Bar,E_Bar)];
أنا قمت بعمل داله تعود بتوقيت آخر صفقة مغلقة
وحاولت إستخدامها بهذا الشرطكود PHP:
int LastClosedOrderTime(int type)
{
for (int f=OrdersHistoryTotal() ;f>=0 ; f--)
{
OrderSelect(f,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber && OrderType()==type)
{
return (OrderCloseTime()) ;
}
}
return(0);
}
ولكن لم تعطي النتيجة .. و حاولت عمل دالة تبحث في bars عن آخر بار تم تحديده بناءا على التوقيت و لكن لم أفلح .كود PHP:
(TimeCurrent()-LastClosedOrderTime(OP_BUY))/60/60>=24
شكرا أستاذ أسامه
الاخوه الاعزاء
كيف استطيع ان ابرمج اكسبريت من امر واحد فقط
دون اى موشرات او تحليلات
فقط اكسبريت يعيد وضع الاوامر التى تم تنفيذها ووصلت للتارجت واغلقت
مع العلم انه سيتم وضع الاوامر المعلقه يدويا على الشارت
والاكسبريت غير محدد بفريم زمنى او عمله معينه او اى مؤشر
فقط اعد وضع الاوامر المغلقه
rebeat colosed order
or
Re-orders enclosed
ارجوا المساعده فى ذلك ولكم جزيل الشكر
اريد اضافة ميزة على هذا الاكسبيرت وهي امكانية الاغلاق ربحا او خسارة على تقاطع موفينج عكس اتجاه الصفقة
مثال : لو انا داخل على تقاطع 10 مع 30 مثلا شراء
اريد خاصية في الاعدادات الخارجية للاكسبيرت (اختيارية) ان يغلق الشراء عن تقاطع 5 مع 10 نزولا اي 5 اقل من عشرة
حاولت اكثر من مرة ولكن للاسف تفشل المحاولات جزاكم الله كل خير
ممكن كود لفتح صفقة واحدة كل شمعة واول ما تغلق
الشمعة يغلق الاكسبيرت الصفقة سواء ربح او خسارة
لانه صادفتني مشكلة في الشمعة التي تبتلع الشمعة التي
قبلها فيقوم بفتح صفقة ثم يغلقها لانها ضربت الاستوب
ثم يفتح صفقة معاكسة وينظر لشروط فيجد انه قد تم
اختراق الهاي مثلا فيقوم باغلاق الصفقة ثو يفتحها ويغلقها
ويستمر حتى تغلق تلك الشمعة
الاكسبيرت هو اختراق الهاي اولو الشمعة فمثلا اخترق الهاي
بيع واول مايتم اختراق اللو يخرج من الصفقة ودخول في صفقة
معاكسة
بارك الله فيك هذا الكود صحيح فعلا في حال كان الشرط من آخر صفقة تم فتحها لكن هو يقصد من آخر شمعة أو توقيت تم البحث فيه
يمكنك إستخدام نفس الداله الخاصه بتوقيت فتح الصفقه
ثم ستضع شرط أن توقيت إفتتاح آخر صفقه أقل من توقيت حساب اليوم الجديدكود PHP:
datetime E_Time =StrToTime(TimeToStr(iTime(Symbol(),PERIOD_D1,0),TIME_DATE)+" "+End_Time);
datetime LastOpenTimeT(int type)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()==type){
return(OrderOpenTime());
}
}
return(0);
}
ويكون الشرطكود PHP:
datetime S_Time =StrToTime(TimeToStr(iTime(Symbol(),PERIOD_D1,1),TIME_DATE)+" "+Start_Time);
كود PHP:
if(LastOpenTimeT(OP_BUY)<S_Time)
{
/// open order
}
صحيح أستاذي الفاضل وانا كنت فاهم السؤال خطأ وبعدها خليت بالي فألغيت المشاركة :eh_s(7):
يمكنك عمل دالة تبحث عن الأوامر المغلقه على الهدف ثم تضع شرط بفتح الأمر في حال أغلق
يمكنك وضع شرط التأكد إذا كان الأمر تم فتحه مره أخرى أم لا عن طريق جعل الكومنت للأمر نفس رقم التيكيت للصفقه المغلقه
مثال
كود PHP:
bool SearchForCloseOrder(int ticket)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment=OrderComment();
if(OrderSymbol()==Symbol()&&StrToDouble(comment)==ticket)
{
return(true);
break;
}
}
return(false);
}
void AddClosedOrders()
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int ticket=OrderTicket();int type=OrderType();double price=OrderOpenPrice();double sl=OrderStopLoss();double tp=OrderTakeProfit();
double lots=OrderLots();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()!=111&&OrderClosePrice()==OrderTakeProfit())
{
if(SearchForCloseOrder(ticket)==true)continue;
if(type==OP_BUY)
{
if(Bid>price)type=OP_BUYLIMIT;
else type=OP_BUYSTOP;
}
if(type==OP_SELL)
{
if(Ask>price)type=OP_SELLSTOP;
else type=OP_SELLLIMIT;
}
OrderSend(Symbol(),type,lots,price,3,sl,tp,DoubleToStr(ticket,0),111,0,Blue);
}
}
}
يمكنك تعريف متغير يحفظ توقيت الشمعه التي يفتح فيها الإكسبرت الصفقه ثم عندما تتغير توقيت الشمعه الحاليه هذا يعني أن شمعه جديده قد فتحت بالتالي تغلق الصفقه
مثال
سوف تقوم بتعريف المتغير خارج الداله start
ثم عند شروط الدخولكود PHP:
datetime Time0;
وشروط إغلاق الصفقهكود PHP:
if(Time0!=Time[0])
{
// open orders
Time0=Time[0];
}
سوف تضع شروط الإغلاق قبل شروط فتح الصفقهكود PHP:
if(Time0!=Time[0])
{
// close orders
}
جزاك الله كل خير أستاذي العزيز ... الشرط يعمل تمام و أضفت إلى الداله البحث بآخر لوت مع نوع الصفقة حتى إذا فتحت مضاعفات ...
كود PHP:
datetime LastOpenTime(int type , double lot)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type &&OrderLots()==lot){
return(OrderOpenTime());
}
}
return(0);
}
و لكن لم أفهم كيفية فتح الإكسبيرت لأول صفقة و ليس قبلها صفقات مغلقه في وجود هذا الكود .. أليس من المفترض ان هذا الشرط "وهو توقيت إفتتاح آخر صفقة أقل من توقيت حساب اليوم الجديد" لن يتحقق في حالة كانت هذه الصفقة الاولى للإكسبيرت و ليس قبلها صفقات مغلقة ليتم حساب توقيت إفتتاحها ؟؟ ولكن الشرط يعمل و يفتح و لم أستوعب هذه النقطة ...كود PHP:
if (LastOpenTime(OP_SELL ,Lots)<S_Time )
و عندي سؤال لو تكرمت كيف أجعل الإكسبيرت لا يفتح صفقة إذا عاد السعر ask يلامس الهاي من فوق لتحت يعني اريده يفتح صفقة الشراء إذا لامس ال ask الهاي من تحت لفوق اي قادما من اسفل الهاي ؟؟؟