لا يمكنك إستدعاء الداله داخل ستارت بهذا الشكل
فيجب أن تقوم بكتابة متغيرات الداله الخارجيهكود PHP:LastOrderStop(int type);
مثل
كود PHP:LastOrderStop(OP_BUY);
Printable View
الاخ اسامه الاخوه الافاضل
سلام عليكم
مثلا: لو ابغئ اضيف شرط
لو ابغئ تقول للاكسبيرت لاتشتري اذا كان هناك امر شرا منفذ لك علئ عدد معين من النقاط ولاتبيع اذا كان هناك امر بيع منفذ لك علئ عدد معين من النقاط وجزاكم الله خيرا
وعليكم السلام ورحمة الله وبركاته
كمثال
يمكنك عمل داله بحيث تأخذ سعر الدخول الحالي وتقارنه مع سعر جميع الصفقات المفتوحه وإذا كان السعر الحالي قريب بعدد النقاط المحدده لا تفتح صفقه جديده
مثال
ثم ستكون شروط الدخول في صفقة الشراء مثلاكود PHP:bool isInRange(int type,double price){
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double openprice=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
if(MathAbs(price-openprice)<RangePoints*Point)
return(true);
}
}
return(false);
}
كود PHP:if(isInRange(OP_BUY,Ask)==false)
{
//open Order
}
السلام عليكم مشكلة في الكواد عدم تكرر الصفقات عند تحقق شرط الدخول علي العموم اخدات هد الكود من هد الموضع موضوع تعليمي : تصميم إكسبرت لمؤشر البارابوليك سار
وتوجد اخطاء في الكودكود PHP:#property copyright "ayoob algde"
#property link "http://www.metaquotes.net"
extern int StopLoss=50;
extern int TakeProfit=50;
extern double Lot=0.1;
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
Comment("");
}
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 start function |
//+------------------------------------------------------------------+
int start()
{
Comment("AUOOB");
if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)>0 &&OrdersTotal()==0)
{
double SL,TP;
if(StopLoss>0){SL=Ask-StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Ask+TakeProfit*Point;}else{TP=0;}
OrderSend(Symbol(),OP_BUY,0.1,Ask,30,SL,TP,"",15000,0,Green);
}
if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)<0&& OrdersTotal()==0)
if(StopLoss>0){SL=Bid+StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Bid-TakeProfit*Point;}else{TP=0;}
OrderSend(Symbol(),OP_SELL,0.1,Bid,30,SL,TP,"",15000,0,Red);
}
//+------------------------------------------------------------------+
اخي ايوب عندما تضع شرط للماكد بأغلاق شمعة تحت الصفر if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)>0 && OrdersTotal()==0)
يستمر في البيع طالما تحت الصفر ، لكن اذا اضفت الشرط ان الشمعة التي قبلها تكون فوق الصفر فلا يكرر وهذا مثال
if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)>0 && ("EURUSD",PERIOD_M5,12,26,9,0,1,2) < 0 && OrdersTotal()==0)
بقي شي واحد الله يبارك اخي اسامه
انا عندي الاكسبيرت علئ سرفر امريكي وفيه خاصية التريلينج ستوب بس اللي ملاحظه ان الترلينج استوب في احيان كثيره يتاخر عن مجارة السعر مما يسبب ان السعر يرجع على
الارباح ومدة التاخير اخي اسامه كما تعلم ياالثواني فهل استخدم له كلمة ريفريش واين
اضعها في كود التريلينج استوب ام ان هناك اده اخرى ولسلام عليكم ورحمة الله وبركاته
السلام عليكم اخي جميل فعلت نفس الشي ولكن ونفس المشكلة يفتح الصفقات كل ما تحقق الشرطكود PHP:#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int StopLoss=100;
extern int TakeProfit=100;
extern double Lot=0.1;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
{
Comment("AUOOB");
if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)<0 &&iMACD("EUDUSD",PERIOD_M5,12,26,9,0,1,2)>0 &&OrdersTotal()==0)
{
double SL,TP;
if(StopLoss>0){SL=Ask-StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Ask+TakeProfit*Point;}else{TP=0;}
OrderSend(Symbol(),OP_BUY,0.1,Ask,30,SL,TP,"",15000,0,Green);
}
if(iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,1)>0&& iMACD("EURUSD",PERIOD_M5,12,26,9,0,1,2)<0&&OrdersTotal()==0)
if(StopLoss>0){SL=Bid+StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Bid-TakeProfit*Point;}else{TP=0;}
OrderSend(Symbol(),OP_SELL,0.1,Bid,30,SL,TP,"",15000,0,Red);
}
return(0);
}
//+------------------------------------------------------------------+
تمام انا ماراجعت النص الكامل فقط عدلت لك شرط الدخول على التقاطع وهذه قاعدة لمعظم المؤشرات فا حفظها ، الآن راجعت النص للأكسبيرت والشرط لصفقة واحدة يتم بأضافة متغير تحدد فيه ماتريد ثم تضعه كشرط اضافي ، تفضل الأكسبيرت بعد تصحيحه لكن طبعا ينقصه الكثير ويوجد اكسبيرت للماكد على جميع منصات الميتاتريدر اقراء الكود سيفيدك كثير .
تفضل الأكسبيرت بعد تصحيحه
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int StopLoss=100;
extern int TakeProfit=100;
extern double Lot=0.1;
datetime BarTime2 = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
{
Comment("AUOOB");
if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<0 &&iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2) >0)// &&OrdersTotal()==0)
{
if (BarTime2 < Time[0])
{
// we have a new bar opened
BarTime2 = Time[0]; // keep the new bar open time
double SL,TP;
if(StopLoss>0){SL=Ask-StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Ask+TakeProfit*Point;}else{TP= 0;}
OrderSend(Symbol(),OP_BUY,0.1,Ask,30,SL,TP,"",1500 0,0,Green);
}
}
if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1)>0 && iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2)<0) //&&OrdersTotal()==0)
if (BarTime2 < Time[0])
{
// we have a new bar opened
BarTime2 = Time[0]; // keep the new bar open time
if(StopLoss>0){SL=Bid+StopLoss*Point;}else{SL=0;}
if(TakeProfit>0){TP=Bid-TakeProfit*Point;}else{TP=0;}
OrderSend(Symbol(),OP_SELL,0.1,Bid,30,SL,TP,"",150 00,0,Red);
}
}
return(0);
}
//+------------------------------------------------------------------+
وعليكم السلام ورحمة الله وبركاته
يوجد طريقتين
الطريقه الأولى هي معرفة كود المؤشر ثم رسم خطوط الترند التي تريدها مباشرة أو حتى إذا أردت إستخدام الكود في الإكسبرت تستخدمه مباشرة
كيف تحسب الحد العلوي والسفلي
1- تحسب مجموع إغلاقات الشموع التي سترسم القناة عليها
2- تحسب مجموع إغلاقات الشموع مضروب في رقم الشمعه
3- تحسب مجموع أرقام الشموع
4- مجموع حاصل ضرب رقم الشمعه في نفسها
ثم تكون معادلة خط الوسطكود PHP:for(int i=0; i<barsToCount; i++)
{
sumy+=Close[i];
sumxy+=Close[i]*i;
sumx+=i;
sumx2+=i*i;
}
ويكون الناتج النهائيكود PHP:c=sumx2*barsToCount-sumx*sumx;
b=(sumxy*barsToCount-sumx*sumy)/c;
a=(sumy-sumx*b)/barsToCount;
قيمة الخط = a+b*x
لحساب الخط العلوي والسفلي
وهذا يعني إذا كان إغلاق الشمعه - قيمة خط الوسط أكبر من المتغير h ( تم إيجاد قيمته سابقا )كود PHP:for(x=0;x<barsToCount;x++)
{
if(Close[x]-LR_line[x] > h) h = Close[x]-LR_line[x];
if(LR_line[x] - Close[x]> l) l = LR_line[x] - Close[x];
}
تصبح قيمة h تساوي الإغلاق - خط الوسط ( لإستخراج عدد النقاط بين القيمتين )
نفس الكلام بالنسبه ل l
في النهاية تكون معادلة الخط العلوي
والخط السفليكود PHP:a+h+b*x;
وهذا مثال للمؤشر الذي يستخدم هذه المعادلاتكود PHP:a-h+b*x;
السلام عليكم و رحمة الله و بركاته
اريد افضل الاكسبرتات في ادارة الصفقات التي يمكنها فتح اكثر من صفقة بهدف مختلف و بستوب مختلف و يمكن عمل استوب من الباربوليك سار
لا يهم نوع الاستراتيجية في الاكسبرت الاهم ادارة الصفقات
وعليكم السلام ورحمة الله وبركاته
أولا بالنسبه لفتح أكثر من صفقة بهدف مختلف وستوب مختلف لن تختلف كثيرا عن طريقة فتح الصفقات العاديه
مثال
ثم سوف تجعل المتغيرات الخارجيه الخاصة بالهدف والأستوبكود PHP:if(Ma1>Ma2){
if(StopLoss1==0){SL=0;}else{SL=Ask-StopLoss1*point;}
if(TakeProfit1==0){TP=0;}else{TP=Ask+TakeProfit1*point;}
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
if(StopLoss2==0){SL=0;}else{SL=Ask-StopLoss2*point;}
if(TakeProfit2==0){TP=0;}else{TP=Ask+TakeProfit2*point;}
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
if(StopLoss3==0){SL=0;}else{SL=Ask-StopLoss3*point;}
if(TakeProfit3==0){TP=0;}else{TP=Ask+TakeProfit3*point;}
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
ثانيا بالنسبه لعمل ستوب لوز من البارابوليك ساركود PHP:extern int TakeProfit1=0;
extern int StopLoss1=0;
extern int TakeProfit2=0;
extern int StopLoss2=0;
extern int TakeProfit3=0;
extern int StopLoss3=0;
مثال
كود PHP:if(UseSarStopLoss){SL=iSAR(Symbol(),0,0.02,0.2,1);}
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage*Q,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);