النتائج 1 إلى 4 من 4
الموضوع: مطلوب كود لتنفيذ الإشارة مرة واحدة
- 19-04-2017, 05:01 PM #1
مطلوب كود لتنفيذ الإشارة مرة واحدة
السلام عليكم ورحمة الله وبركاته
أنا كان عندي فكرة إكسيبرت ينفذ شراء عند تقاطع موفينج 25 لموفينج 50 لأعلى والبيع العكس
عملت الإكسيبرت وعملت باك تيست لكن لما ينفذ الشراء مثلا ويضرب الهدف ينفذ شراء مرة أخرى
أنا كنت محتاج كود لتنفيذ الصفقة مرة واحدة فقط بعد التقاطع ولا ينفذها مرة أخرى بعد ضرب الهدف
شكرا
- 19-04-2017, 05:53 PM #2
- 20-04-2017, 10:23 AM #3
هل المتغير سيكون بهذا الشكل
//+------------------------------------------------------------------+
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=50;
extern double TakeProfit=50;
extern int TrailingStop=0;
extern int Slippage=3;
static datetime Order_Time;
//+------------------------------------------------------------------+
- 20-04-2017, 10:24 AM #4
وشرط الدخول والخروج
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
if(Order_Time!=Time[0])
{
// open order
Order_Time=Time[0];
}
if( TotalOrdersCount()==0 )
{
int result=0;
if((iMA(NULL,0,50,1,MODE_SMA,PRICE_CLOSE,1)<iMA(NU LL,0,25,1,MODE_SMA,PRICE_CLOSE,1))) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"Ma",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
if((iMA(NULL,0,50,1,MODE_SMA,PRICE_CLOSE,1)>iMA(NU LL,0,25,1,MODE_SMA,PRICE_CLOSE,1))) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"Ma",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}
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)
{
if((iMA(NULL,0,50,1,MODE_SMA,PRICE_CLOSE,1)>iMA(NU LL,0,25,1,MODE_SMA,PRICE_CLOSE,1))) //here is your close buy rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if((iMA(NULL,0,50,1,MODE_SMA,PRICE_CLOSE,1)<iMA(NU LL,0,25,1,MODE_SMA,PRICE_CLOSE,1))) // here is your close sell rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}