أعتقد أني من الممكن أن أقوم بإضافة شرط أن يكون إغلاق الشمعه رقم ١ أقل من الهاي ... أليس كذلك أستاذي ؟
Printable View
السلام عليكم استاذى الكريم
مستر دولار
ارجو مساعدة كريمة من شخصك الكريم
عايز دالة تحسب عدد النقاط للصفقات
انا عارف دالة الربح بعملة الدولار
عايز دالة تحسب النقاط
وجزاك الله خير
تحياتى لك
السلام عليكم استاذ اسامه ..
إذا أردت أن يقوم الاكسبيرت بفتح صفقة و بعد عدد معين من النقاط عكس الصفقة يبدأ في فتح تبريدات و يكون أهداف كل صفقة تبريد و أي صفقات تبريد أخرى و الصفقة الأولى عند نقطة دخول الصفقة التي تسبق الحالية مباشرة أي إذا تم فتح شراء و هبط السعر 50 نقطة يتم فتح تبريد مضاعف مع جعل هدف الصفقة الحالية نقطة دخول الصفقة السابقة و تعديل هدف الصفقة السابقة لهدف الصفقة الحالية و هكذا يتم تعديل كافة الأهداف إلى هدف الصفقة الأخيرة الحالية ...
انا قمت بعمل دالة تبحث في الصفقات المفتوحة ثم تعود بإفتتاح آخر صفقه
---كود PHP:double LastOpenPrice(int type)
{
for (int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}
و دالة تبحث في الصفقات المفتوحة لتعدل الهدف لآخر هدف تم وضعه :
---كود PHP:void ModifyNewTP(int type)
{
for (int i = OrdersTotal() ;i >=0 ; i--)
{
double lasttakeprofit= OrderTakeProfit();
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),lasttakeprofit,0);
}
}
}
ثم وضعت شروط فتح التبريدات المضاعفه هكذا :
بحيث حعلته يحسب الهدف على سعر إفتتاح آخر صفقه قبلها حسب نوع الصفقة :
ووضعت شرط بحيث إذا كانت الصفقات المفتوحه أكبر من 1 و الهدف لا يساوي هدف آخر صفقه يقوم بتعديل الهدفكود PHP:if(Ask<=LastOpenPrice(OP_BUY)-Step*point&&orderstotal()>=1)
{
if(UseMultiplier ){newLot=last_lot()*Multiplier;}
TP=LastOpenPrice(OP_BUY) ;
OrderSend(Symbol(),OP_BUY,newLot,Ask,3,0,TP,"Dentist_Hussein",MagicNumber,0,Blue);
}
////////
if(Bid>=LastOpenPrice(OP_SELL)+Step*point&&orderstotal()>=1)
{
if(UseMultiplier ){newLot=last_lot()*Multiplier;}
TP=LastOpenPrice(OP_SELL) ;
OrderSend(Symbol(),OP_SELL,newLot,Bid,3,0,TP,"Dentist_Hussein",MagicNumber,0,Red);
}
لكن يقوم بتعديل الهدف بشكل غير سليم ثم يعدله للزيرو مره أخرى ... فما الخطأ في الشروط أو الاكواد بارك الله فيك ؟؟كود PHP:if(orderstotal()>1 && TP!=LastOpenPrice(OP_BUY))
{
ModifyNewTP(OP_BUY);
}
if(orderstotal()>1 && TP!=LastOpenPrice(OP_SELL))
{
ModifyNewTP(OP_SELL);
}
أستاذ سمير تجد طلبك في هذه المشاركة ويمكنك تعديل الوقت اليومي الى اي توقيت او الغاء شرط الزمن .
https://forum.arabictrader.com/t3761...ml#post2314852
تم حل المشكلة .. قمت بعمل داله تعود بآخر هدف لآخر صفقه مفتوحه
وجعلت دالة تعديل الهدف تقوم بتعديل الهدف على اساس القيمة العائدة من الدالة السابقةكود PHP:double lasttakeprofit()
{
for (int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() )
{
return(OrderTakeProfit());
}
}
return(0);
}
ثم وضعت الشرط :كود PHP:void ModifyNewTP(int type)
{
for (int i = OrdersTotal() ;i >=0 ; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),lasttakeprofit(),0);
}
}
}
كود PHP:if(orderstotal()>1 && TP!=lasttakeprofit())
{
ModifyNewTP(OP_BUY);
ModifyNewTP(OP_SELL);
}
تم حل المشكلة .. قمت بعمل داله تعود بآخر هدف لآخر صفقه مفتوحه
وجعلت دالة تعديل الهدف تقوم بتعديل الهدف على اساس القيمة العائدة من الدالة السابقةكود PHP:double lasttakeprofit()
{
for (int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() )
{
return(OrderTakeProfit());
}
}
return(0);
}
ثم وضعت الشرط :كود PHP:void ModifyNewTP(int type)
{
for (int i = OrdersTotal() ;i >=0 ; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),lasttakeprofit(),0);
}
}
}
كود PHP:if(orderstotal()>1 && TP!=lasttakeprofit())
{
ModifyNewTP(OP_BUY);
ModifyNewTP(OP_SELL);
}
السلام عليكم اخى الكريم
وشكرا على المساعدة الكريمة
والشكر موصول الى استاذى مستر دولار
بس انا بجرب هذه الدالة علشان تعطى لى الربح بنقاط
بس لا تعمل
وهذه هى الدالة
وجزاكم الله خير
كود PHP:double profitpoints(){
double ProfitPips;
for(int i=OrdersTotal();i>0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderOpenTime()>iTime(Symbol(),1440,0)){
if(OrderType()==OP_SELL)ProfitPips+=(OrderOpenPrice()-OrderClosePrice());
if(OrderType()==OP_BUY)ProfitPips+=(OrderClosePrice()-OrderOpenPrice());
}
if(OrderOpenTime()<iTime(Symbol(),1440,0))return(ProfitPips/Point);
}
return(ProfitPips/Point);
}
السلام عليكم استاذى مستر دولار
عملت طريقة
علشان اعرف عدد نقاط الربح
وهذه هى الطريقة
وعايز اعرف هل هذه الطريقة صحيحة او غير صحيحة
وجزاك الله خير وتحياتى وتقديرى لشخصك الكريم
.................................................. ..
الطريفة
يتم تعريف متغير خارجى
يتم وضع هذا الكود فى دالة int init()كود PHP:int Q;
ويتم وضع هذه الدوال خارج دالة int startكود PHP:if(Digits==5){Q=10000;}
if(Digits==4){Q=10000;}
if(Digits==3){Q=100;}
if(Digits==2){Q=100;}
اولا دالة تحسب صفقات الشراء
دالة تحسب صفقات البيعكود PHP:int pofet_point_B(){
double pr;
int po;
for(int p=0;p<OrdersTotal();p++){
OrderSelect(p,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
pr=Bid-OrderOpenPrice();
po=pr*Q;
}
}return(po);
}
وعلشان التجربةكود PHP:int pofet_point_S(){
double pr;
int po;
for(int p=0;p<OrdersTotal();p++){
OrderSelect(p,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL){
pr=OrderOpenPrice()-Ask;
po=pr*Q;
}
}return(po);
}
ضع هذا الكود فى دالة int start
كود PHP:Comment(pofet_point_S()," ",pofet_point_B());
ممكن كود جعل الاكسبريت لايفتح صفقه فى نفس الاتجاة عند تحقيق الهدف او ضرب الاستوب
ويفتح عند ظهور اشارة عكسيه
تفضل هذه الطريقة هي الأسهل :
تضيف متغير مع المتغيرات في بداية الأكسبيرت
بعدها تضيف ضمن الشروط في الشراء كمثال :كود PHP:static string LastOrder;
في نهاية دالة الشراء تضيف :كود PHP:if (LastOrder!=("B")
في حالة البيع استخدم نفس الطريقة فقط غير B الى Sكود PHP:LastOrder=("B");