1 مرفق
الهدف والأستوب و التريلينج ستوب المخفي في الإكسبرت
في هذا الموضوع التعليمي سأقوم بشرح عدة أفكار برمجية لكيفية إستخدام الهدف والأستوب لوز و التريلينج ستوب بأنواعه بحيث تكون غير ظاهره للبروكر لكن يتم إغلاق الصفقات عندما تصبح الصفقه إلى نقطة الهدف وهذا الموضوع مهم جدا خصوصا لكن يستخدم الإسكالبينج بحيث لا يقبل البروكر عدد نقاط صغيرة كهدف أو ستوب لوز وأيضا لمن يستخدم التريلينج ستوب لمجموعة من الصفقات معا وليس لكل صفقة على حده.
الفكرة بشكل عام هي أن تخبر الإكسبرت عندما يصل السعر إلى نقطة معينه قمت بتحديدها سابقا والتي هي نقطة خروج الصفقه فسيقوم الإكسبرت بإغلاق الصفقه بدلا من أن تغلق بنفسها على السعر المحدد في الهدف أو الاستوب لوز
1- سنبدأ أولا بأبسط جزء وهو كيف تحدد الهدف المخفي
الفكره هي عمل دالة للبحث عن الصفقات المفتوحه ثم يضع شروط إغلاق الصفقه بالنسبه للشراء إذا كان السعر الحالي أكبر من ( سعر فتح الصفقة + عدد نقاط الهدف المخفي ) فيتم إغلاق الصفقه
بالنسبه للبيع إذا كان السعر الحالي أقل من ( سعر فتح الصفقه - عدد نقاط الهدف المخفي ) فيتم إغلاق الصفقه
مثال
كود PHP:
void CloseOrdersHiddenTP()
{
for (int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY&&Bid>=OrderOpenPrice()+HiddenTP*Point)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if(OrderType()==OP_SELL&&Ask<=OrderOpenPrice()-HiddenTP*Point)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}
2- تحدد الأستوب المخفي
بنفس الفكرة الإغلاق على الأستوب لوز
كود PHP:
void CloseOrdersHiddenSL()
{
for (int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY&&Bid<=OrderOpenPrice()-HiddenSL*Point)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if(OrderType()==OP_SELL&&Ask>=OrderOpenPrice()+HiddenSL*Point)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}
3- التريلينج ستوب المخفي
الفرق بين الهدف والتريلينج ستوب أنه في التريلينج ستوب لا يوجد سعر ثابت سيغلق عنده السعر فكيف نحل هذه المشكله
الفكره في تعريف متغير لكل صفقة جديده يتم فتحها وتكون مرتبطه بالصفقه وكلما تحرك التريلينج ستوب سوف تتغير قيمة هذا المتغير وبمجرد أن يصل السعر إلى قيمة هذا المتغير سوف تغلق الصفقه على التريلينج ستوب
مثال دالة تستخدم المتغيرات العامه GlobalVariables لحذف قيمة التريلينج ستوب
كود PHP:
void HiddenTrailingStop()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&HiddenTS>0)
{
if(OrderType()==OP_BUY)
{
if(Bid>=OrderOpenPrice()+HiddenTS*Point&&(GlobalVariableGet("TS"+OrderTicket())<Bid-HiddenTS*Point||GlobalVariableGet("TS"+OrderTicket())==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HiddenTS*Point);
}
}
else
{
if(Ask<=OrderOpenPrice()-HiddenTS*Point&&(GlobalVariableGet("TS"+OrderTicket())>Ask+HiddenTS*Point||GlobalVariableGet("TS"+OrderTicket())==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HiddenTS*Point);
}
}
}
}
}
ثم سنقوم بعمل دالة تبحث في الصفقات المفتوحه وتقارن بينها وبين سعر التريلينج ستوب ثم تغلق الصفقه عندما يصل السعر الحالي إلى نقطة التريلينج ستوب
مثال
كود PHP:
void CloseHiddenTrailingStop()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
GlobalVariableDel("TS"+OrderTicket());
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3);
GlobalVariableDel("TS"+OrderTicket());
}
}
}
}
}
4- التريلينج بناء على رصيد الحساب
لنفرض أننا نريد حساب التريلينج ستوب بناء على النسبة المئويه للربح من الحساب مثلا عندما يصل الحساب إلى ربح 5% يتم تقديم التريلينج المخفي إلى ربح 1% وعندما يصل الربح إلى 6% يتم تقديم التريلينج إلى 2%
وهكذا حتى يتراجع الربح وتغلق الصفقات جميعها على النسبة المئويه للتريلينج
نفس الفكره السابقه لكن بدلا من حساب النقاط سنحسب النسبة المئويه
مثال
كود PHP:
void HiddenTrailingBalancePercent()
{
double ProfitPercent=AccountProfit()/AccountBalance()*100;
if(ProfitPercent>=StartTrailingPercent&&(GlobalVariableGet("TS Percent")<ProfitPercent-StartTrailingPercent||GlobalVariableGet("TS Percent")==0))
{
GlobalVariableSet("TS Percent",ProfitPercent-StartTrailingPercent);
}
if(ProfitPercent<=GlobalVariableGet("TS Percent")&&GlobalVariableGet("TS Percent")!=0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if(OrderType()==OP_SELL)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
GlobalVariableDel("TS Percent");
}
}
أخيرا مرفق الإكسبرت ولمن لديه أي سؤال تعليمي يخص الكود يتفضل بسؤاله