النتائج 1 إلى 11 من 11
الموضوع: من فظلكم كيف يمكن برمجة هذا؟
- 30-09-2012, 01:05 AM #1
من فظلكم كيف يمكن برمجة هذا؟
من فظلكم كيف يمكن برمجة هذا؟
كل صفقه لها تلينغ ستوب خاص بها علما ان الإكسبيرت يمكن ان يفتح اكثر من صفقه في نفس الوقت ؟
- 30-09-2012, 03:15 AM #2
عدد نقاط تريلينغ ستوب لكل صفقه = (فارق النقاط بين الدخول و ستوب لوز)
- 30-09-2012, 01:01 PM #3
up
- 30-09-2012, 05:04 PM #4
رد:من فظلكم كيف يمكن برمجة هذا؟
برمجت ذه لكن مايعمل ارجو المساعده
كود PHP:
int TrailingOrdersBuyTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()==OP_BUY)
{
if((Ask-OrderOpenPrice())> (OrderOpenPrice()- OrderStopLoss()) && (OrderOpenPrice()- OrderStopLoss())>0 )
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask-(OrderOpenPrice()- OrderStopLoss()),digits),OrderTakeProfit(),0,Red);
}
c++;
}
}
return(c);
}
int TrailingOrdersSellTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()==OP_SELL)
{
if((OrderOpenPrice()- Bid)> ( OrderStopLoss()-OrderOpenPrice()) && (OrderStopLoss()-OrderOpenPrice())>0 )
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-(OrderStopLoss()-OrderOpenPrice()),digits),OrderTakeProfit(),0,Red);
}
c++;
}
}
return(c);
}
- 01-10-2012, 02:13 AM #5
رد:من فظلكم كيف يمكن برمجة هذا؟
الأخ العزيز أتبع الخطوات التالية و سيعمل الستوب المتحرك
في أخر البرنامج أضف الدالة التالية
كود:void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(TrailingStop>0) { if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*(TrailingStop+TrailingStep),Digits))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green); return(0); } } } else { if(TrailingStop>0) { if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*(TrailingStop+TrailingStep),Digits)))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red); return(0); } } } } } }
في أي مكان من البرنامج مثلا بعد شروط الدخول أو بعد ticket -تضع ما يلي
كود:if(TrailingStop>0)MoveTrailingStop();
تضيف السطرين التاليين
كود:extern int TrailingStop=0; extern int TrailingStep=0;
- 01-10-2012, 02:49 AM #6
رد:من فظلكم كيف يمكن برمجة هذا؟
جزاك الله خيرا
اعرف هذه الداله لكن مشلتي هو ان الستوب المتحرك يختلف من صفقه الى اخري يعني مو تابث !!
- 01-10-2012, 03:04 AM #7
على أي أساس يختلف من صفقة لاخرى بالطبع هناك قاعدة و ليس عشوائيا
ما عليك الا أضافة الشروط او القاعدة التي يختلف على اساسها الستوب .
أو يمكنك أستعمال ملف تسجل فيه رقم الصفقة مع الستوب المطلوب لها.
و يراجعه الاكسبيرت لتحريك الستوب .
ممكن كذلك تدوين الستوب في الكومنت الخاص بكل صفقة و من ثم أسترجاعه لتحريك الستوب
كان يسجل امام كومنت الصفقة الاولي و المخصص عادة لذكر اسم الاكسبيرت 10 مثلا و الصفقة التي تليها يسجل كومنت 15
و هكذا يمكنك جعل كل صفقة تحمل رقم يخص وقفها المتحرك
و السلام
و الافكار كثيرة
- 01-10-2012, 03:30 AM #8
رد:من فظلكم كيف يمكن برمجة هذا؟
شكرا ياغالي
الستوب المتحرك لكل صفقه هو
كود PHP:TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits);
سويت هذا لكنه يعمل على الصفقه الأولى فقط و لا يعمل على البقي
كود PHP:int MoveTrailingStop(int Magic)
{
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)
{
TrailingStop=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits);
TrailingStep=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits);
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
{
TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits);
TrailingStep=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits);
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);
}
}
}
}
}
}
آخر تعديل بواسطة wikileaks ، 01-10-2012 الساعة 03:33 AM
- 01-10-2012, 06:10 PM #9
بهذه الطريقه لنفرض ان الأستوب لوز الحالي 1.4350 وسعر فتح الصفقه 1.4210
بالتالي سوف يكون التريلينج ستوب 40 نقطه لكن لنفرض ان السعر صعد وعمل التريلينج ستوب فسوف يتغير الأستوب لوز إلى 1.4210 عند نقطة الدخول فلو أردت أن تحسب الأستوب لوز مره أخرى فسوف يظهر خطأ لإن فرق النقاط تغير
كما ذكر الأخ robo coder يمكنك أن تحفظ عدد نقاط التريلينج ستوب لكل صفقه في الكومنت
مثلا
كود PHP:OrderSend(Symbol(),OP_BUY,newlot,NormalizeDouble(Ask,Digits),3,SL,TP,DoubleToStr((TP-Ask)/point,0),MagicNumber,0,Blue);
كود PHP:void MoveTrailingStop()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double trailingstop=StrToDouble(OrderComment());
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask,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,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);
}
}
}
}
}
}
- 01-10-2012, 07:37 PM #10
- 02-10-2012, 12:47 AM #11
جزاكم الله خيرا