|
|
|
|
|
صباح الخير استاذ اسلام يا رب تكون ريحت دماغى منى من انبارح
عندى شويه استفسارات
دلوقتى لو عايز اصمم الاكسبيرت يدخل صفقه بعد كسر الترند او الدعوم والمقاومات او فيبوناتشى ....معتمد على الرسم اليدوى ومش مؤشرات
و من ناحيه البريك ايفن والرتلينج استوب ..كود ترلينج ستيب بيتكتب بنفس الفكره
وكود البريك ايفن و الترلينج استوب حسب الشرح كل ما اجى اعمل باك تست مع اول صفقه وبتقف والسعر مش بيتحرك تانى مش عارف ايه العيب
وليه كتبنا موفينج ورسى بالطريقه دى واحد ظاهر والتانى مخفى
كود:
double Buy_1=iMA(Symbol(),0,5,2,MODE_SMA,PRICE_TYPICAL,1);
// double Sell_1=iMA(Symbol(),0,5,2,MODE_SMA,PRICE_TYPICAL,2);
double Buy_2=iRSI(Symbol(),0,14,PRICE_CLOSE,1);
// double Sell_2=iRSI(Symbol(),0,ل14,PRICE_CLOSE,2);
،،،بالنسبة للموفنج و RSI للشمعة رقم 2 قمت بحذفهم لان ليس لهم استحدام،،،
وايه الفرق بين الكودين المكتوبين دولت
كود:
//---
if(Digits==5||Digits==4)
{
pt=0.0001;
}
else{
pt=0.01;
}
^
^
ما الفارق بينهما
t=1; if(Digits==5||Digits==3||Digits==2){t=10;}
،،،الفارق بينهما هو ان الكود الثانى اشمل واعم من الاول لان بعض السلع تحتلف عدد الارقام بعد الفاصة العشرية فيعطى هذا الكود مرونه فى التعامل بعكس الكود الاول،،،
كود:
extern int Breakeven=10;
extern int Trailingstop=30;
extern double Lot1=0.1;
extern bool UseMM = false;
extern int Risk = 1;
extern int MagicNumber=778;
double pt;
int P;
int t;
double i,ii;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(UseMM==true)Lot1=lots();
if(Breakeven>0)BreakEven();
if(Trailingstop>0)TrailingStop();
}
//+------------------------------------------------------------------+
double lots()
{
double Lot1=MathCeil(AccountFreeMargin()*Risk/1000)/100;
if(Lot1<MarketInfo(Symbol(),MODE_MINLOT))
Lot1 = MarketInfo(Symbol(),MODE_MINLOT);
if(Lot1>MarketInfo(Symbol(),MODE_MAXLOT))
Lot1 = MarketInfo(Symbol(),MODE_MAXLOT);
return(Lot1);
}
//////////////////
void BreakEven()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY)
if(Bid-OrderOpenPrice()>Breakeven*t)
if(OrderOpenPrice()>OrderStopLoss())
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
}
for(int ii=OrdersTotal()-i;ii>=0;ii--)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL)
if(OrderOpenPrice()-Ask>Breakeven*t)
if(OrderOpenPrice()<OrderStopLoss())
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
}
}
//////////////////////
void TrailingStop()
{
for(int i=OrdersTotal()-1;i>=1;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY)
if(Bid-OrderOpenPrice()>Trailingstop*t)
if(OrderStopLoss()<Bid-Trailingstop*t)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(Trailingstop*t),OrderTakeProfit(),0,clrNONE);
}
for(int ii=OrdersTotal()-1;ii>=0;i--)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL)
if(OrderOpenPrice()-Ask>Trailingstop*t)
if(OrderStopLoss()>Ask+Trailingstop*t)
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(Trailingstop*t),OrderTakeProfit(),0,clrNONE);
}
}
وفى انتظارك افادتك ان شاء الله |
|
|
|
|
،،،المتغير t يجب ان تقوم بضربة فى Point لتحصل على الرقم الصحيح ، راجع كود الاكسبيرت السابق وخصوصا طريقة استخدام المتغير t ،،،