السلام عليكم
ممكن مساعدة في دالة الغاء التنبيه في كل مرة
اي عند تحقيق الشرط يعطي تنبيه واحد فقط
برمجة مؤشر لكن كلما تحقق المطلوب يعيد تنبيه
عدة مرات
Printable View
السلام عليكم
ممكن مساعدة في دالة الغاء التنبيه في كل مرة
اي عند تحقيق الشرط يعطي تنبيه واحد فقط
برمجة مؤشر لكن كلما تحقق المطلوب يعيد تنبيه
عدة مرات
وعليكم السلام ورحمة الله وبركاته
نعم يمكنك حفظ توقيت كل صفقه في مصفوفه
مثال
طبعا تعريف المصفوفه OrdersTime خارج الداله نفسها حتى يعتبر متغير عام يمكنك إستخدامه لاحقا في أي داله أخرى أو في الداله startكود PHP:datetime OrdersTime[];
void SetArrayTime()
{
int newSize;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
datetime opentime=OrderOpenTime();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
newSize++;
ArrayResize(OrdersTime,newSize);
OrdersTime[newSize-1]=opentime;
}
}
}
وعليكم السلام ورحمة الله وبركاته
كود هذا المؤشر بسيط لذلك الأسهل وضع الكود مباشرة بداخل الإكسبرت بدلا من إستدعاء المؤشر
سوف تضيف الكود
طبعا خط الهاي سيكون المتغير LastHigh وخط اللو LastLowكود PHP:double LastHigh=0,LastLow=999999;
for(int i=1;i<=BarsBack;i++)
{
double HD=iHigh(NULL,TF,i);
double LD=iLow(NULL,TF,i);
if(HD>LastHigh)LastHigh=HD;
if(LD<LastLow)LastLow=LD;
}
ولا تنسى تعريف المتغيرات الخارجيه الموجوده في المؤشر
تعرفها في الإكسبرتكود PHP:extern int TF=240;
extern int BarsBack=2;
قم بتعريف متغير يحفظ رقم الشمعه التي أعطت التنبيه بحيث لا يتم التنبيه إلا مره واحده
مثال
طبعا مكان الكومنت سوف تضيف باقي الشروط وتغير التنبيه كما هو لديككود PHP:static datetime AlertTime;
if(/*alert*/&&AlertTime!=Time[0])
{
Alert("Enter Signal");
AlertTime=Time[0];
}
استاذ مستر دولار ممكن مساعدة في هذا الاكسبيرت
حيث قمة ببرمجته واضفت له التريلنج وايضا دالة
اغلاق الصفقة في حال لو ظهرة اشارة معاكسة
لكن اصبح يفتح بدل صفقة 5 صفقات في ان واحد
رغم اني قمت بتحديد عدد صفقات المسموح بها
التريلنج استوب لا يعمل وكذلك لا يغلق الصفقة في
حال تكون اشارة عكسية
وان كان ممكن استاذي شرح سبب الاخطاء لاني برمجت الاكسبيرتكود PHP:extern double Lots = 0.1;
double point;
int digits,Q;
extern int MaxTrades = 1;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;
int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----
//----
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
t("Programmed byd"+"\n"+""+"\n"+"");
if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////
double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
//////////////////////////////////////////////////
double TP,SL;
if(indigreen<10000) {
if(orderstotal()<MaxTrades)
{CloseSellOrders();}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);
}
//////////////////////////////////////////////////
if(indired<10000){
if(orderstotal()<MaxTrades)
{CloseBuyOrders();}
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);
}
return(0);
}
//+------------------------------------------------------------------+
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}
//////////////////////////////////////////////////
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
if (OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
//////////////////////////////////////////////////
void MoveTrailingStop()
{
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(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
{
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);
}
}
}
}
}
}
فقط لتعلم لا اكثر اي اني لا اعمل عليه
الخطأ لديك في طريقة فتح وإغلاق الأقواس فقط عند وضع اشروط
هذا الكود
لاحظ أنك جعلت الشرطكود PHP:
if(indigreen<10000) {
if(orderstotal()<MaxTrades)
{CloseSellOrders();}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);
}
فكأنك جعلت شرط عدد الصفقات مرتبط فقط بدالة إغلاق الصفقاتكود PHP:if(orderstotal()<MaxTrades)
{CloseSellOrders();}
التعديل الصحيح
وأيضا نفس المشكله بالنسبه لصفقات البيعكود PHP:if(indigreen<10000) {
if(orderstotal()<MaxTrades)
{
CloseSellOrders();
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);
}
}
السلام عليكم ممكن دالة المضاعفات بطريقة *2 وبطريقة + اللوت
يكونوا الاتنين في نفس الاكسبيرت ويتعمل ترو او فالس