المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4



الصفحات : 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15

kira-h
23-06-2017, 02:27 AM
شكراً جزيلاً استاذي العزيز لمساعدتك و طول اناتك و اعتذر للاطالة، الكود خاص بنوع واحد فقط ام بيع او شراء لكن عندما يعمل بيع مع شراء بيصير يفتح بيع فوق شراء وشراء فوق شراء وبيع فوق بيع المطلوب لا يتنفذ اي صفقات فوق اي امر موجود علي الشارت و الصورة المرفقة توضح الفكرة التي احاول ايصالها 1546

إذا تقصد صفقات التعزيز من نفس النوع فالدالة صحيحة
ارفق الاكسبيرت الذي قمت بعمله للتصحيح

rambo
23-06-2017, 09:55 AM
السلام عليكم أخي حسن
فجأة قام الاكسبيرت بفتح عدة صفقات غير مطلوبة ولم يحدد هدف وستوب وجائتني الملاحظة التالية :
external order
مالمقصود بهذه الملاحظة ولماذا تظهر ؟ أول مرة أراها بصراحة ؟
مرفق الصورة

kira-h
23-06-2017, 04:41 PM
السلام عليكم أخي حسن
فجأة قام الاكسبيرت بفتح عدة صفقات غير مطلوبة ولم يحدد هدف وستوب وجائتني الملاحظة التالية :
external order
مالمقصود بهذه الملاحظة ولماذا تظهر ؟ أول مرة أراها بصراحة ؟
مرفق الصورة

وعليكم السلام
لغويا تعني صفقة منفصلة أو خارجية...
وهي فقط عبارة عن تعليق (كومنت) الصفقة، ليست لها علاقة بأخطاء أو تحذيرات الاكسبيرت،
يعني إسأل مبرمج الاكسبيرت لتوضيح المعنى او ارفق الكود مفتوح للبحث فيه

sama97
24-06-2017, 10:13 AM
يعطيك العافية اخي، تفضل رابط الاكسبيرت و شكراً جزيلاً سلف
http://ge.tt/7KNghVl2

rambo
24-06-2017, 12:00 PM
وعليكم السلام
لغويا تعني صفقة منفصلة أو خارجية...
وهي فقط عبارة عن تعليق (كومنت) الصفقة، ليست لها علاقة بأخطاء أو تحذيرات الاكسبيرت،
يعني إسأل مبرمج الاكسبيرت لتوضيح المعنى او ارفق الكود مفتوح للبحث فيه

شكرا لك عزيزي حسن
الاكسبيرت مغلق الكود للاسف .. أنا الان بصدد برمجة نفس الفكرة تقريبا حتى يمكنني التعديل عليه لأي سبب طارئ في المستقبل
متشكرك كثير استاذي وتهمني كثير استشارتك دائما الله ينور عليك

kira-h
24-06-2017, 03:26 PM
يعطيك العافية اخي، تفضل رابط الاكسبيرت و شكراً جزيلاً سلف
http://ge.tt/7KNghVl2

تم تصحيح الأخطاء بالنسخة المرفقة

kira-h
24-06-2017, 03:27 PM
شكرا لك عزيزي حسن
الاكسبيرت مغلق الكود للاسف .. أنا الان بصدد برمجة نفس الفكرة تقريبا حتى يمكنني التعديل عليه لأي سبب طارئ في المستقبل
متشكرك كثير استاذي وتهمني كثير استشارتك دائما الله ينور عليك

بالتوفيق إن شاء الله

ابو عمر
24-06-2017, 06:51 PM
يعطيك العافية اخي، تفضل رابط الاكسبيرت و شكراً جزيلاً سلف
http://ge.tt/7KNghVl2


كيف ترفق ملفات وصور وفيديو في المشاركات (http://www.fxprg.com/vb/showthread.php?t=31581)

sama97
24-06-2017, 10:23 PM
تم تصحيح الأخطاء بالنسخة المرفقة

الف شكر استاذي العزيز يعطيك العافية يسلم ايديك، و كل سنة و حضرتك و كل الاخوة بالموقع بألف ألف خير

kira-h
25-06-2017, 05:59 PM
الف شكر استاذي العزيز يعطيك العافية يسلم ايديك، و كل سنة و حضرتك و كل الاخوة بالموقع بألف ألف خير

بالتوفيق إن شاء الله

sama97
01-07-2017, 02:49 AM
نعم صحيح في خطأ غير مقصود، بارك الله فيك
الصحيح كالتالي :


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool
s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

مرحبا، يعطيك العافية اخي، لو سمحت بموضوع المصفوفة كيف ممكن نكتب فيها شروط لفتح الاوردرات؟؟ و هل ممكن اضافتها لاي اكسبيرت او الها طرق خاصة بالتعامل معها؟ و هل تقبل تحديد TakeProfit و StopLoss و شكرا جزيلا سلف

kira-h
01-07-2017, 08:44 PM
مرحبا، يعطيك العافية اخي، لو سمحت بموضوع المصفوفة كيف ممكن نكتب فيها شروط لفتح الاوردرات؟؟ و هل ممكن اضافتها لاي اكسبيرت او الها طرق خاصة بالتعامل معها؟ و هل تقبل تحديد TakeProfit و StopLoss و شكرا جزيلا سلف

نعم ممكن
مثال :


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
double TP,SL;
for(int i=0;i<size;i++)
{
if(iClose(suffix+Symbols_Array[i]+perfix,0,1)>iOpen(suffix+Symbols_Array[i]+perfix,0,1))
{
if(Stoploss!=0){SL=MarketInfo(suffix+Symbols_Array[i]+perfix,MODE_ASK)-Stoploss*MarketInfo(suffix+Symbols_Array[i]+perfix,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(suffix+Symbols_Arr ay[i]+perfix,MODE_ASK)+Takeprofit*MarketInfo(suffix+Sym bols_Array[i]+perfix,MODE_POINT);}else TP=0;
int tk=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,SL,TP,"Kira-h",MagicNumber,0,Blue);
}
}
}

sama97
02-07-2017, 01:58 AM
يعطيك العافية اخي و شكراً جزيلاً.
سؤال جديد من بعد امرك، حالياً اعمل على اكسبيرت خدمي سيكون متاحاً للجميع ان شاء الله و مجاني، سؤالي هل يمكنني في حال قام احد الاشخاص ببيعه دون علمي ان اوقف جميع النسخ القديمة و توزيع اصدار جديد، في حال كان الرد ايجابا كيف يمكنني فعل ذلك، عذراً على الاطالة و شكراً سلف

kira-h
02-07-2017, 03:28 AM
يعطيك العافية اخي و شكراً جزيلاً.
سؤال جديد من بعد امرك، حالياً اعمل على اكسبيرت خدمي سيكون متاحاً للجميع ان شاء الله و مجاني، سؤالي هل يمكنني في حال قام احد الاشخاص ببيعه دون علمي ان اوقف جميع النسخ القديمة و توزيع اصدار جديد، في حال كان الرد ايجابا كيف يمكنني فعل ذلك، عذراً على الاطالة و شكراً سلف
غير ممكن، لكن يمكنك اضافة شرط رقم الحساب او تاريخ صلاحية
وعموما طالما الاكسبيرت مجاني فلا يهم اذا استخدم لاغراض اخرى كبيعه او ادارة الحسابات...

rambo
03-07-2017, 11:56 AM
السلام عليكم أخي حسن
ممكن لو تكرمت كود عدد الأوامر المعلقة المفتوحة الآن، وفق نوعها المعين، بدلالة كومنتها المعين
شكرا لك مقدما

Ahmed
03-07-2017, 12:29 PM
السلام عليكم أخي حسن
ممكن لو تكرمت كود عدد الأوامر المعلقة المفتوحة الآن، وفق نوعها المعين، بدلالة كومنتها المعين
شكرا لك مقدما

وعليكم السلام ورحمة الله وبركاتة
كود عدد الاوامر بدلالة النوع والكومنت


int Orderscnt(int type ,string comment)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()==type)
{
cnt++;
}
}
}
}
return(cnt);
}

rambo
03-07-2017, 03:24 PM
وعليكم السلام ورحمة الله وبركاتة
كود عدد الاوامر بدلالة النوع والكومنت


int Orderscnt(int type ,string comment)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()==type)
{
cnt++;
}
}
}
}
return(cnt);
}


شكرا لك أخي أحمد
لدي عدد كبير من الأوامر المعلقة المفتوحة بمختلف أنواعها وكومنتاتها
سؤالي هو
هل يلزمني كتابة دالة منفصلة لكل أمر معلق بنوعه وكومنته المختلف لحساب عدد صفقاته المفتوحة ؟
أم هذه الدالة أعلاه تشمل جميع أنواع الأوامر المعلقة وبمختلف أنواعها وكومنتاتاها
وبمجرد استدعاء الدالة وتحديد الأمر المعلق وكومنته في الاستدعاء يتم احتساب عدد الأوامر المعلقة المفتوحة وفق ما تم تحديده ؟
شكرا لك

Ahmed
03-07-2017, 03:45 PM
شكرا لك أخي أحمد
لدي عدد كبير من الأوامر المعلقة المفتوحة بمختلف أنواعها وكومنتاتها
سؤالي هو
هل يلزمني كتابة دالة منفصلة لكل أمر معلق بنوعه وكومنته المختلف لحساب عدد صفقاته المفتوحة ؟
أم هذه الدالة أعلاه تشمل جميع أنواع الأوامر المعلقة وبمختلف أنواعها وكومنتاتاها
وبمجرد استدعاء الدالة وتحديد الأمر المعلق وكومنته في الاستدعاء يتم احتساب عدد الأوامر المعلقة المفتوحة وفق ما تم تحديده ؟
شكرا لك

العفو اخي
هذه الدالة تعود لك بعدد اي نوع من الصفقات بدلالة الكومنت الذي تحدده وهي تكفي لجميع انواع الصفقات
مثال لعد الصفقات

Orderscnt(OP_BUY,"rambo")
Orderscnt(OP_SELL,"rambo")
Orderscnt(OP_BUYLIMIT,"rambo")
Orderscnt(OP_SELLLIMIT,"rambo")
Orderscnt(OP_BUYSTOP,"rambo")
Orderscnt(OP_SELLSTOP,"rambo")

sama97
03-07-2017, 08:14 PM
غير ممكن، لكن يمكنك اضافة شرط رقم الحساب او تاريخ صلاحية
وعموما طالما الاكسبيرت مجاني فلا يهم اذا استخدم لاغراض اخرى كبيعه او ادارة الحسابات...
شكرا اخي الكريم وهو كذلك.

sama97
03-07-2017, 08:17 PM
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
double SL,TP;
for(int i=0;i<size;i++)
{
if(TotalOrders(-1)<1 && iClose(START+Symbols_Array[i]+END,0,1)>iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_ASK)-Stoploss*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_ASK)+Takeprofit*MarketInfo(START+Symbols _Array[i]+END,MODE_POINT);}else TP=0;
int tk1=OrderSend(START+Symbols_Array[i]+END,OP_BUY,NewLots,MarketInfo(START+Symbols_Array[i]+END,MODE_ASK),30,SL,TP,"",MagicNumber,0,Blue);
}
else if(TotalOrders(-1)<1 && iClose(START+Symbols_Array[i]+END,0,1)<iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_BID)+Stoploss*MarketInfo(START+Symbols_A rray[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_BID)-Takeprofit*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else TP=0;
int tk2=OrderSend(START+Symbols_Array[i]+END,OP_SELL,NewLots,MarketInfo(START+Symbols_Arra y[i]+END,MODE_BID),30,SL,TP,"",MagicNumber,0,Blue);
}
}

}
اخي بالنسبة للمصفوفة بعد التجربة وجدت انه لا يعمل بالشكل المطلوب، حيث انه يقوم بفتح اوردرات على الزوج الحالي فقط الموجود على المنصة. هل يمكنك معالجته لو سمحت، مع جزيل الشكر

kira-h
03-07-2017, 10:36 PM
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int size=ArraySize(Symbols_Array);
double SL,TP;
for(int i=0;i<size;i++)
{
if(TotalOrders(-1)<1 && iClose(START+Symbols_Array[i]+END,0,1)>iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_ASK)-Stoploss*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_ASK)+Takeprofit*MarketInfo(START+Symbols _Array[i]+END,MODE_POINT);}else TP=0;
int tk1=OrderSend(START+Symbols_Array[i]+END,OP_BUY,NewLots,MarketInfo(START+Symbols_Array[i]+END,MODE_ASK),30,SL,TP,"",MagicNumber,0,Blue);
}
else if(TotalOrders(-1)<1 && iClose(START+Symbols_Array[i]+END,0,1)<iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_BID)+Stoploss*MarketInfo(START+Symbols_A rray[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_BID)-Takeprofit*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else TP=0;
int tk2=OrderSend(START+Symbols_Array[i]+END,OP_SELL,NewLots,MarketInfo(START+Symbols_Arra y[i]+END,MODE_BID),30,SL,TP,"",MagicNumber,0,Blue);
}
}

}
اخي بالنسبة للمصفوفة بعد التجربة وجدت انه لا يعمل بالشكل المطلوب، حيث انه يقوم بفتح اوردرات على الزوج الحالي فقط الموجود على المنصة. هل يمكنك معالجته لو سمحت، مع جزيل الشكر
أخي الكريم
أولا يجب كتابة الكود ضمن كود PHP كما بالصورة (بالوضع المتطور للمشاركة) حتى يكون مرتب وواضح بدون أخطاء
1786

ثانيا الخطأ لديك بشرط عدد الصفقات TotalOrders أكيد مقترن بالزوج الحالي فقط
أيضا لا تستخدم شرط else حتى يتم مراجعة الشروط كاملة في كل تكة سعرية
إذن الصحيح كالتالي :


int TotalOrders(string symbol,int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};
int tk,size=ArraySize(Symbols_Array);
double SL,TP;

for(int i=0;i<size;i++)
{
if(TotalOrders(START+Symbols_Array[i]+END)<1 && iClose(START+Symbols_Array[i]+END,0,1)>iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_ASK)-Stoploss*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_ASK)+Takeprofit*MarketInfo(START+Symbols _Array[i]+END,MODE_POINT);}else TP=0;
tk=OrderSend(START+Symbols_Array[i]+END,OP_BUY,Lots,MarketInfo(START+Symbols_Array[i]+END,MODE_ASK),30,SL,TP,"",MagicNumber,0,Blue);
}
if(TotalOrders(START+Symbols_Array[i]+END)<1 && iClose(START+Symbols_Array[i]+END,0,1)<iOpen(START+Symbols_Array[i]+END,0,1))
{
if(Stoploss!=0){SL=MarketInfo(START+Symbols_Array[i]+END,MODE_BID)+Stoploss*MarketInfo(START+Symbols_A rray[i]+END,MODE_POINT);}else SL=0;
if(Takeprofit!=0){TP=MarketInfo(START+Symbols_Arra y[i]+END,MODE_BID)-Takeprofit*MarketInfo(START+Symbols_Array[i]+END,MODE_POINT);}else TP=0;
tk=OrderSend(START+Symbols_Array[i]+END,OP_SELL,Lots,MarketInfo(START+Symbols_Array[i]+END,MODE_BID),30,SL,TP,"",MagicNumber,0,Blue);
}
}
}


ولا تنسى أن تضع الأزواج بقائمة الماركت واتش
1787

Ahmed
04-07-2017, 12:36 PM
السلام عليكم استاذ حسن
اريد ان اعرف فائدة هذه الاكواد في الاكسبيرت


//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
EventSetMillisecondTimer(300);

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
EventKillTimer();

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{


}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTimer()
{
OnTick();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{


}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

rambo
04-07-2017, 02:25 PM
العفو اخي
هذه الدالة تعود لك بعدد اي نوع من الصفقات بدلالة الكومنت الذي تحدده وهي تكفي لجميع انواع الصفقات
مثال لعد الصفقات

Orderscnt(OP_BUY,"rambo")
Orderscnt(OP_SELL,"rambo")
Orderscnt(OP_BUYLIMIT,"rambo")
Orderscnt(OP_SELLLIMIT,"rambo")
Orderscnt(OP_BUYSTOP,"rambo")
Orderscnt(OP_SELLSTOP,"rambo")


متشكرك كثير عزيزي أحمد
وفقك الله

Ahmed
04-07-2017, 03:21 PM
متشكرك كثير عزيزي أحمد
وفقك الله

العفو اخي rambo
اللهم امين

rambo
04-07-2017, 03:50 PM
السلام عليكم أستاذ حسن
والله صار لي يومين عم بحاول في هالمشكلة بس إلى الآن ما وصلت للحل للأسف
قمت بإستخدام الدالة التالية للحصول على آخر سعر لآخر صفقة معلقة مفتوحة بدلالة النوع والكومنت


double LastOpenPrice(int type , string comment)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderComment()==comment)
{
if(OrderType()==type)return(price);
}
}
return(0);
}

وعند استدعاء هذه الدالة تعمل بكفاءة وبدون مشاكل، ولكن عند استدعائها داخل الجملة الشرطية if لا تعمل ويكون العائد على الدالة صفر
وتأكدت بأن العائد صفر باستخدام الأمر برينت
وأنا بالطبع أريد العائد الصحيح وليس صفر، وأيضا لا أريد استدعائها واستخدامها الا داخل الجملة الشرطية if
بارك الله فيك

Ahmed
04-07-2017, 04:15 PM
وعليكم السلام ورحمة الله وبركاتة
جرب هذا الكود وهو لاستاذنا حسن كيرا
دالة تستخرج تفاصيل آخر صفقة مفعلة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت
وقد اضفت لك شرط الكومنت


double LastOrder(string info,int type=-1,string comment)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol() && mn==MagicNo && OrderComment()==comment)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
else if(info=="OpenTime")return(om);
else if(info=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}
مثال

LastOrderCurrent("OpenPrice",OP_BUYLIMIT,"rambo")

kira-h
04-07-2017, 09:58 PM
السلام عليكم أستاذ حسن
والله صار لي يومين عم بحاول في هالمشكلة بس إلى الآن ما وصلت للحل للأسف
قمت بإستخدام الدالة التالية للحصول على آخر سعر لآخر صفقة معلقة مفتوحة بدلالة النوع والكومنت


double LastOpenPrice(int type , string comment)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderComment()==comment)
{
if(OrderType()==type)return(price);
}
}
return(0);
}

وعند استدعاء هذه الدالة تعمل بكفاءة وبدون مشاكل، ولكن عند استدعائها داخل الجملة الشرطية if لا تعمل ويكون العائد على الدالة صفر
وتأكدت بأن العائد صفر باستخدام الأمر برينت
وأنا بالطبع أريد العائد الصحيح وليس صفر، وأيضا لا أريد استدعائها واستخدامها الا داخل الجملة الشرطية if
بارك الله فيك

وعليكم السلام
دالة معرفة سعر آخر صفقة مفتوحة بدلالة الكومنت والنوع كالتالي :


double LastOrderPrice(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&cm==comment&&ty==type)
{
return(op);
}
}
return(0);
}

kira-h
04-07-2017, 10:53 PM
السلام عليكم استاذ حسن
اريد ان اعرف فائدة هذه الاكواد في الاكسبيرت


//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
EventSetMillisecondTimer(300);

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
EventKillTimer();

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{


}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTimer()
{
OnTick();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{


}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

وعليكم السلام
الدالة OnTick يتم استداعائها بتنفيذ ما بداخلها كل تكة للسعر

الدالة OnInit يتم استدعائها لمرة واحدة عند بداية عمل الاكسبيرت

الدالة OnDeinit يتم استدعائها لمرة واحدة عند نهاية عمل الاكسبيرت

الداله OnTimer يتم إستدعائها كل وقت معين تقوم بتنفيذ الأوامر الموجوده بداخلها ويمكن أن يصل هذا الوقت حتى 1 ملي ثانيه
يتم إستدعائها في الإكسبرت أو المؤشرات فقط ولا يمكن إستخدامها مع الإسكربتات
لتفعيل الداله OnTimer يجب أن تحدد الفاصل الزمني لكل مره يتم إستدعاء الداله فيها بإستخدام الداله EventSetTimer
كما بالكود نجد
int OnInit()
{
EventSetMillisecondTimer(300);

return(INIT_SUCCEEDED);
}
يعني إستدعاء الداله OnTimer كل 300 ملي ثانيه

أو تستخدم
EventSetTimer(1);
ويعني إستدعاء الداله OnTimer كل 1 ثانيه

الداله EventKillTimer تستخدم لإنهاء عمل الداله OnTimer
مثلا لو تريد توقف عمل الداله OnTimer عند تحقق شرط معين

ثالثا: OnChartEvent
راجع المشاركة التالية :
OnChartEvent (http://www.fxprg.com/vb/showthread.php?t=31457&page=3&p=846554&viewfull=1#post846554)

Ahmed
04-07-2017, 11:02 PM
شكرا لك اخي حسن

rambo
05-07-2017, 01:28 PM
وعليكم السلام ورحمة الله وبركاتة
جرب هذا الكود وهو لاستاذنا حسن كيرا
دالة تستخرج تفاصيل آخر صفقة مفعلة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت
وقد اضفت لك شرط الكومنت


double LastOrder(string info,int type=-1,string comment)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol() && mn==MagicNo && OrderComment()==comment)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
else if(info=="OpenTime")return(om);
else if(info=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}
مثال

LastOrderCurrent("OpenPrice",OP_BUYLIMIT,"rambo")

شكرا لك أخي أحمد بارك الله فيك

rambo
05-07-2017, 01:29 PM
وعليكم السلام
دالة معرفة سعر آخر صفقة مفتوحة بدلالة الكومنت والنوع كالتالي :


double LastOrderPrice(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&cm==comment&&ty==type)
{
return(op);
}
}
return(0);
}


متشكرك كثير أستاذي العزيز حسن، سلمت يداك
وفقك الله

sama97
05-07-2017, 06:24 PM
يعطيك العافية اخي حسن لو سمحت اريد منك ان تراجع هذا الكود و تخبرني اين الخطأ و تصححه لو سمحت، حيث انه لا ينفذ صفقات البيع و ان نفذها فيقوم بفتح أكثر من امر في نفس الوقت


if(TotalOrders(-1)<1)
{
ticket=OrderSend(Symbol(),OP_BUY,NewLot,NormalizeD ouble(Ask,Digits),3*P,0,0,"",MagicNumber,0);
}
if(TotalOrders(OP_BUY)>0 && TotalOrders(OP_BUY)<MaxTrades && Ask>=LastOrderInfo("OpenPrice",OP_BUY)+Step*point)
{
ticket=OrderSend(Symbol(),OP_BUY,NewLot,NormalizeD ouble(Ask,Digits),3*P,0,0,"",MagicNumber,0);
}
if(TotalOrders(OP_BUY)>0 && TotalOrders(OP_BUY)<MaxTrades && Bid<=LastOrderInfo("OpenPrice",OP_SELL)-Step*point)
{
ticket=OrderSend(Symbol(),OP_SELL,NewLot,Normalize Double(Bid,Digits),3*P,0,0,"",MagicNumber,0);
}
}

كما اني اريد دالة لاظهار اجمالي الصفقات الرابحة و الخاسرة لكل عملة منفصلة ان وجدت مع جزيل الشكر و العرفان

kira-h
05-07-2017, 10:40 PM
يعطيك العافية اخي حسن لو سمحت اريد منك ان تراجع هذا الكود و تخبرني اين الخطأ و تصححه لو سمحت، حيث انه لا ينفذ صفقات البيع و ان نفذها فيقوم بفتح أكثر من امر في نفس الوقت


if(TotalOrders(-1)<1)
{
ticket=OrderSend(Symbol(),OP_BUY,NewLot,NormalizeD ouble(Ask,Digits),3*P,0,0,"",MagicNumber,0);
}
if(TotalOrders(OP_BUY)>0 && TotalOrders(OP_BUY)<MaxTrades && Ask>=LastOrderInfo("OpenPrice",OP_BUY)+Step*point)
{
ticket=OrderSend(Symbol(),OP_BUY,NewLot,NormalizeD ouble(Ask,Digits),3*P,0,0,"",MagicNumber,0);
}
if(TotalOrders(OP_BUY)>0 && TotalOrders(OP_BUY)<MaxTrades && Bid<=LastOrderInfo("OpenPrice",OP_SELL)-Step*point)
{
ticket=OrderSend(Symbol(),OP_SELL,NewLot,Normalize Double(Bid,Digits),3*P,0,0,"",MagicNumber,0);
}
}

كما اني اريد دالة لاظهار اجمالي الصفقات الرابحة و الخاسرة لكل عملة منفصلة ان وجدت مع جزيل الشكر و العرفان

لا ينفذ صفقة البيع لأن شروط فتح اول صفقة بيع غير موجودة كما فعلت بالشراء بأول شرط
بالنسبة لاجمالي الربح بالدولار راجع المشاركة التالية،http://www.fxprg.com/vb/showthread.php?t=31456&p=844601&viewfull=1#post844601 وتليها الربح الاجمالي بالنقاط

ثم تضعها بالكومنت
مثال :

Comment(Profit_By_USD());

kira-h
05-07-2017, 10:41 PM
متشكرك كثير أستاذي العزيز حسن، سلمت يداك
وفقك الله

العفو أخي الكريم،
بالتوفيق إن شاء الله

kira-h
05-07-2017, 10:42 PM
شكرا لك أخي أحمد بارك الله فيك

العفو أخي الكريم،
بالتوفيق إن شاء الله

sama97
06-07-2017, 12:32 AM
شكراً اخي ربي يسعدك، اعذرني لكن لم افهم كيف ان شروط البيع غير موجودة هلا تفضلت و شرحت لي هذه النقطة و ان اكملت معروفك صحح الكود لي لو سمحت، و الجزء الثاني من طلبي يتعلق باظهار عدد الصفقات الرابحة و الخاسرة لكل عملة و ليس قيمة الربح لعلي لم اوفق بالتفسير، عفوا لكثرة الأسئلة و شكرا لسعة حلمك معنا و افادتنا من بحر علمك

kira-h
06-07-2017, 12:56 AM
شكراً اخي ربي يسعدك، اعذرني لكن لم افهم كيف ان شروط البيع غير موجودة هلا تفضلت و شرحت لي هذه النقطة و ان اكملت معروفك صحح الكود لي لو سمحت، و الجزء الثاني من طلبي يتعلق باظهار عدد الصفقات الرابحة و الخاسرة لكل عملة و ليس قيمة الربح لعلي لم اوفق بالتفسير، عفوا لكثرة الأسئلة و شكرا لسعة حلمك معنا و افادتنا من بحر علمك
اشرح الفكرة حتى استطيع التصحيح مع كود دالة OrdersTotal
بالنسبة للجزء الثاني
دالة عدد الصفقات الرابحة بدلالة اسم الزوج كالتالي :


int ProfitOrders(string symbol)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&OrderProfit()>=0)
{
cnt++;
}
}
}
return(cnt);
}


دالة عدد الصفقات الخاسلة بدلالة اسم الزوج كالتالي :


int LossOrders(string symbol)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&OrderProfit()<0)
{
cnt++;
}
}
}
return(cnt);
}


أمثلة :
عدد الصفقات الرابحة لزوج اليورودولار كالتالي:

ProfitOrders("EURUSD");

عدد الصفقات الخاسرة لزوج الأسترالي دولار كالتالي :

LossOrders("AUDUSD");

sama97
06-07-2017, 09:15 AM
يعطيك العافية استاذي حاضر سأشرح الفكرة
ان فتح اول صفقة شراء ثم تحرك السعر للاعلى يقوم بفتح صفقة شراء اخرى،،، ان كانت اول صفقة تفعلت هي الشراء و تحرك السعر 50 نقطة للاسفل يقوم بفتح بيع و العكس في حالة البيع، اتمنى ان يكون الشرح واضحاً استاذي.


int TotalOrders(int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber() && (OrderType()==type || type==-1))
{
cnt++;
}
}
}
return(cnt);
}

و بالنسبة لموضوع مجمل الصفقات سأوضح لسيادتك فكرتي، ارجو ان يتسع صدرك لطول موضوعي، اريد ان يظهر على الشارت اسم الزوج و ناتج صفقات الشراء ( مثلاً الشراء ربح 1 دولار) ، و ناتج صفقات البيع المفتوحة على هذا الزوج ( مثلاً خسارة 5دولار) ، و الناتج الإجمالي لصفقات الزوج (في حالتنا هذه هي خسارة 4 دولار) ، ارجو ان اكون قد وفقت بالتوضيح و اشكرك جدأ لصبرك و مساعدتك.

sama97
06-07-2017, 10:05 AM
مثال اخر لتوضيح جزء الصفقات.
مثال تم تشغيل الاكسبرت علي يورو دولار و دولار ين المطلوب انة يعرف قيمة sl و tp للصفقات الحالية لكل زوج بمعني في 3 صفقات علي يورو دولار sl=10 و tp=50 اذا ناتج يورو دولار = 40 ودولار ين في صفقتين مفتوحين sl=70 و tp=30 اذا الناتج =-40 المطلوب عرض قيمة الاستوب والهدف علي الشارت + جمعهم مع بعض لكل زوج مستقل بنفسة sl+tp=ربح او خسارة

kira-h
07-07-2017, 03:10 AM
يعطيك العافية استاذي حاضر سأشرح الفكرة
ان فتح اول صفقة شراء ثم تحرك السعر للاعلى يقوم بفتح صفقة شراء اخرى،،، ان كانت اول صفقة تفعلت هي الشراء و تحرك السعر 50 نقطة للاسفل يقوم بفتح بيع و العكس في حالة البيع، اتمنى ان يكون الشرح واضحاً استاذي.


int TotalOrders(int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber() && (OrderType()==type || type==-1))
{
cnt++;
}
}
}
return(cnt);
}

و بالنسبة لموضوع مجمل الصفقات سأوضح لسيادتك فكرتي، ارجو ان يتسع صدرك لطول موضوعي، اريد ان يظهر على الشارت اسم الزوج و ناتج صفقات الشراء ( مثلاً الشراء ربح 1 دولار) ، و ناتج صفقات البيع المفتوحة على هذا الزوج ( مثلاً خسارة 5دولار) ، و الناتج الإجمالي لصفقات الزوج (في حالتنا هذه هي خسارة 4 دولار) ، ارجو ان اكون قد وفقت بالتوضيح و اشكرك جدأ لصبرك و مساعدتك.
الخطأ بشرط البيع التبريدي والصحيح كالتالي :

if(TotalOrders(OP_BUY)>0 && TotalOrders(OP_BUY)<MaxTrades && Bid<=LastOrderInfo("OpenPrice",OP_BUY)-Step*point)
{
ticket=OrderSend(Symbol(),OP_SELL,NewLot,Normalize Double(Bid,Digits),3*P,0,0,"",MagicNumber,0);
}

أما بالنسبة لطلبك الثاني يمكنك استخدام دالة الربح الاجمالي بالنقاط بدلالة اسم الزوج كالتالي:

double Profit_PIPS(string symbol)
{
double pips,pipsB,pipsS;
for(int i=0;i<OrdersTotal();i++)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double op=OrderOpenPrice();

if(OrderSymbol()==symbol)
{
if(ot==OP_BUY){pipsB+=(NormalizeDouble(symbol,MODE _BID)-op)/MarketInfo(symbol,MODE_POINT);}
else if(ot==OP_SELL){pipsS+=(op-NormalizeDouble(symbol,MODE_ASK))/MarketInfo(symbol,MODE_POINT);}
pips=pipsB+pipsS;
}
}
return(pips);
}

sama97
07-07-2017, 03:24 AM
1844 المشكلة لا زالت موجودة استاذي عذراً

rambo
07-07-2017, 05:54 PM
السلام عليكم أستاذ حسن
أتذكر بأني شاهدت سابقا العديد من الاكسبيرتات تحتوي على خاصية ecn mode = true ، والسؤال هو ما فائدة هذه الخاصية وما هو الكود تبعها لو تكرمت
سؤالي الثاني بخصوص الاكسبيرت الخاص بي عندما أقوم بتشغيله على أي شركة لا توجد به أي مشكلة ويعمل وفق ما هو مبرمج، سواء على منصات أربعة أرقام أو خمس أرقام وبدون مشاكل برمجية
بإستثناء اذا كان الحساب ecn في جميع الشركات عندما أقوم بتشغيله لا تتم عملية تحديد الهدف والستوب وفق ما هو مبرمج ويصبح الهدف والستوب أرقام عشوائية
ما هو السبب يا ترى، هل لأنه الحساب ecn تظهر مثل هذه المشاكل ؟
هل للكوميشن علاقة في عدم دقة الهدف والستوب ويتم احتسابه تلقائيا في حسابات ECN أم ليس له علاقة بالهدف والستوب ؟

Ahmed
07-07-2017, 09:07 PM
وعليكم السلام ورحمة الله وبركاتة
فائدة خاصية

extern bool ECN_Mode = true;
في حالة انك تستخدم حساب ECN لايمكنك فتح الصفقة تحتوي على استوب لوز وتيك بروفت
فانك على الأرجح سوف ترى رسالة OrderSend Error 130 عندما يحاول الاكسبرت فتح الصفقة
يجب ان تقوم بفتح الصفقة اولا ثم بعد ذلك تعدل الهدف والاستوب للصفقة عن طريق OrderModify

kira-h
07-07-2017, 10:48 PM
المشكلة لا زالت موجودة استاذي عذراً

ارفق الاكسبيرت للمراجعة

kira-h
07-07-2017, 10:56 PM
السلام عليكم أستاذ حسن
أتذكر بأني شاهدت سابقا العديد من الاكسبيرتات تحتوي على خاصية ecn mode = true ، والسؤال هو ما فائدة هذه الخاصية وما هو الكود تبعها لو تكرمت
سؤالي الثاني بخصوص الاكسبيرت الخاص بي عندما أقوم بتشغيله على أي شركة لا توجد به أي مشكلة ويعمل وفق ما هو مبرمج، سواء على منصات أربعة أرقام أو خمس أرقام وبدون مشاكل برمجية
بإستثناء اذا كان الحساب ecn في جميع الشركات عندما أقوم بتشغيله لا تتم عملية تحديد الهدف والستوب وفق ما هو مبرمج ويصبح الهدف والستوب أرقام عشوائية
ما هو السبب يا ترى، هل لأنه الحساب ecn تظهر مثل هذه المشاكل ؟
هل للكوميشن علاقة في عدم دقة الهدف والستوب ويتم احتسابه تلقائيا في حسابات ecn أم ليس له علاقة بالهدف والستوب ؟

وعليكم السلام
فائدة الشرط لعمل تعديل الصفقة بعد فتحها بوضع الهدف والوقف
لكن حسب التحديث الجديد لمنصة الميتاتريدر لم نعد بحاجة إليها
كذلك لا أظن بوجود منصة ميتاتريدر4 تتوافق مع نظام ecn، لذلك فالحساب غالبا من نوع stp وهذا النوع سيضع الهدف والوقف مباشرة بعد فتح الصفقة تلقائيا.
عموما لمعرفة الأخطاء راجع خانتي الجورنال والاكسبيرتس

sama97
07-07-2017, 11:24 PM
ارفق الاكسبيرت للمراجعةتفضل اخي ها هو الاكسبيرت املي كبير جدا بمساعدتك القيمة مع جزيل الشكر و التقدير لجهودك

kira-h
08-07-2017, 02:31 AM
تفضل اخي ها هو الاكسبيرت املي كبير جدا بمساعدتك القيمة مع جزيل الشكر و التقدير لجهودك

مرفق الاكسبيرت

sama97
08-07-2017, 02:47 AM
مرفق الاكسبيرت

شكرا لجهودك الواضحة و تعبك معنا اخ حسن، لكن للاسف عاد لمشكلته الاصلية. اعتذر عن اتعابك معي و شكرا مرة أخرى لطول اناتك.

rambo
08-07-2017, 11:21 AM
وعليكم السلام ورحمة الله وبركاتة
فائدة خاصية

extern bool ECN_Mode = true;
في حالة انك تستخدم حساب ECN لايمكنك فتح الصفقة تحتوي على استوب لوز وتيك بروفت
فانك على الأرجح سوف ترى رسالة OrderSend Error 130 عندما يحاول الاكسبرت فتح الصفقة
يجب ان تقوم بفتح الصفقة اولا ثم بعد ذلك تعدل الهدف والاستوب للصفقة عن طريق OrderModify

شكرا لك أخي العزيز أحمد على مجهودك المستمر معنا
الله يبارك فيك ويوفقك يا رب

rambo
08-07-2017, 11:28 AM
وعليكم السلام
فائدة الشرط لعمل تعديل الصفقة بعد فتحها بوضع الهدف والوقف
لكن حسب التحديث الجديد لمنصة الميتاتريدر لم نعد بحاجة إليها
كذلك لا أظن بوجود منصة ميتاتريدر4 تتوافق مع نظام ecn، لذلك فالحساب غالبا من نوع stp وهذا النوع سيضع الهدف والوقف مباشرة بعد فتح الصفقة تلقائيا.
عموما لمعرفة الأخطاء راجع خانتي الجورنال والاكسبيرتس


شكرا لك أخي العزيز الغالي حسن على مساعدتك الدائمة للكل
لدي في قائمة الجورنال لا يوجد أخطاء ولكن في قائمة الاكسبيرت توجد علامة التحذير عند وضع الأمر المعلق وأيضا عند حذفه
لماذا في بعض الأحيان تظهر علامة التحذير في قائمة الاكسبيرت على الرغم من عدم وجود أي علامة خطأ أو تحذير عند عمل كومبايل للاكسبيرت ؟
سؤال آخر لو تكرمت
هل ينفع في مثل حالتي هذه ضرورة استخدام الهدف والوقف مخفي عن البروكر ؟ أم أن الأمر ليس له علاقة ؟

Ahmed
08-07-2017, 07:55 PM
شكرا لك أخي العزيز أحمد على مجهودك المستمر معنا
الله يبارك فيك ويوفقك يا رب

اللهم امين ولك مثلها اخي

kira-h
08-07-2017, 08:05 PM
شكرا لجهودك الواضحة و تعبك معنا اخ حسن، لكن للاسف عاد لمشكلته الاصلية. اعتذر عن اتعابك معي و شكرا مرة أخرى لطول اناتك.

العفو أخي
جربت الاكسبيرت ولا يوجد تكرار للصفقات
فما هو الخطأ الذي عاد؟!

kira-h
08-07-2017, 08:07 PM
شكرا لك أخي العزيز الغالي حسن على مساعدتك الدائمة للكل
لدي في قائمة الجورنال لا يوجد أخطاء ولكن في قائمة الاكسبيرت توجد علامة التحذير عند وضع الأمر المعلق وأيضا عند حذفه
لماذا في بعض الأحيان تظهر علامة التحذير في قائمة الاكسبيرت على الرغم من عدم وجود أي علامة خطأ أو تحذير عند عمل كومبايل للاكسبيرت ؟
سؤال آخر لو تكرمت
هل ينفع في مثل حالتي هذه ضرورة استخدام الهدف والوقف مخفي عن البروكر ؟ أم أن الأمر ليس له علاقة ؟

علامات التحذير ليس لها تأثير على عمل الاكسبيرت
اما عن الهدف والوقف المخفي فليس ضروري إلا للحماية أو التمويه

rambo
09-07-2017, 10:45 AM
علامات التحذير ليس لها تأثير على عمل الاكسبيرت
اما عن الهدف والوقف المخفي فليس ضروري إلا للحماية أو التمويه

شكرا لك أخي العزيز حسن
بصراحة ما فهمت نقطة سبب ظهور علامة التحذير في قائمة الاكسبيرت على الرغم من أنها لا تؤثر على عمل الاكسبيرت كما في الصورة أدناه
1876
أنا أستنتج بأنها ليست علامة تحذير بالمعنى الحرفي ولكن سبب ظهور هذه العلامة الصفراء هي لتمييز أمر معين عن باقي الأوامر وايضاح مدى أهميته وتأثيره
هل هذا صحيح أستاذ

kira-h
09-07-2017, 05:03 PM
شكرا لك أخي العزيز حسن
بصراحة ما فهمت نقطة سبب ظهور علامة التحذير في قائمة الاكسبيرت على الرغم من أنها لا تؤثر على عمل الاكسبيرت كما في الصورة أدناه
1876
أنا أستنتج بأنها ليست علامة تحذير بالمعنى الحرفي ولكن سبب ظهور هذه العلامة الصفراء هي لتمييز أمر معين عن باقي الأوامر وايضاح مدى أهميته وتأثيره
هل هذا صحيح أستاذ
تلك ليست علامة تحذير بل تنبيه
يعني مثلا عند سحب الاكسبيرت على الشارت ستجد تنبيه بذلك وبالاعدادات المستخدمة، كذلك عند فتح أو إغلاق أو موديفاي الصفقة...

rambo
10-07-2017, 09:22 AM
تلك ليست علامة تحذير بل تنبيه
يعني مثلا عند سحب الاكسبيرت على الشارت ستجد تنبيه بذلك وبالاعدادات المستخدمة، كذلك عند فتح أو إغلاق أو موديفاي الصفقة...


ألف شكر لك أخي العزيز حسن
فهمتها الآن الله ينور عليك ويبارك لك وييسر جميع أمورك

kira-h
10-07-2017, 07:14 PM
ألف شكر لك أخي العزيز حسن
فهمتها الآن الله ينور عليك ويبارك لك وييسر جميع أمورك

وإياك أخي
والله الموفق

Ahmed
12-07-2017, 12:29 PM
السلام عليكم استاذ حسن
اريد كود يضع هدف للصفقات المفتوحة على اي زوج
علما باني ساشغل الكود على زوج واحد فقط

kira-h
12-07-2017, 05:45 PM
السلام عليكم استاذ حسن
اريد كود يضع هدف للصفقات المفتوحة على اي زوج
علما باني ساشغل الكود على زوج واحد فقط
وعليكم السلام
راجع الكود المرفق

Ahmed
12-07-2017, 09:28 PM
وعليكم السلام
راجع الكود المرفق

جزاكم الله خيرا

rambo
12-07-2017, 10:37 PM
السلام عليكم مشرفنا العزيز حسن
ممكن تصحيح الدالة في الأسفل:
المطلوب هو دالة خاصة بالكوميشن بدلالة النوع والكومنت للصفقة المفتوحة حاليا


double orderCommission(int type , string comment)
{

bool z;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
z=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int ot=OrderType(),
mn=OrderMagicNumber();
double oc=OrderCommission();

if(sy==Symbol()&&mn==MagicNumber && OrderComment()== comment )
{
if(OrderType()==type )
{
return(oc);
}
}
}
return(0);
}

kira-h
13-07-2017, 01:40 AM
السلام عليكم مشرفنا العزيز حسن
ممكن تصحيح الدالة في الأسفل:
المطلوب هو دالة خاصة بالكوميشن بدلالة النوع والكومنت للصفقة المفتوحة حاليا


double orderCommission(int type , string comment)
{

bool z;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
z=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int ot=OrderType(),
mn=OrderMagicNumber();
double oc=OrderCommission();

if(sy==Symbol()&&mn==MagicNumber && OrderComment()== comment )
{
if(OrderType()==type )
{
return(oc);
}
}
}
return(0);
}


وعليكم السلام
لمعرفة كوميشن آخر صفقة مفتوحة بدلالة الكومنت والنوع كالتالي :


double orderCommission(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool z=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber();
double oc=OrderCommission();

if(sy==Symbol()&&mn==MagicNumber&&cm==comment)
{
if(ot==type)
{
return(oc);
}
}
}
return(0);
}

kira-h
13-07-2017, 01:40 AM
جزاكم الله خيرا

وإياك اخي الركيم

rambo
13-07-2017, 12:42 PM
شكرا لك أخي العزيز حسن
قمت بالتعديل على متغير الاندكس كما في الأسفل

double orderCommission(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool z=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber();
double oc=OrderCommission();

if(sy==Symbol()&&mn==MagicNumber&&cm==comment)
{
if(ot==type)
{
return(oc);
}
}
}
return(0);
}

لأنه قبل التغيير وبعد التغيير لم يعطني الكوميشن الصحيح وأعطاني العائد على الدالة هو صفر
ما هو خطئي أستاذ حسن

kira-h
13-07-2017, 04:43 PM
شكرا لك أخي العزيز حسن
قمت بالتعديل على متغير الاندكس كما في الأسفل

double orderCommission(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool z=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int ot=OrderType(),
mn=OrderMagicNumber();
double oc=OrderCommission();

if(sy==Symbol()&&mn==MagicNumber&&cm==comment)
{
if(ot==type)
{
return(oc);
}
}
}
return(0);
}

لأنه قبل التغيير وبعد التغيير لم يعطني الكوميشن الصحيح وأعطاني العائد على الدالة هو صفر
ما هو خطئي أستاذ حسن

الدالة صحيحة أخي
وإذا الناتج 0 فهذا معناه انه لا يوجد كوميشن

rambo
13-07-2017, 06:32 PM
شكرا لك أستاذ حسن
تم التغلب على المشكلة وكانت عندي في زيادة مسافة واحدة فقط في كومنت الاستدعاء
حيث أن :

orderCommission("buy 1" , OP_BUY) != orderCommission(" buy 1" , OP_BUY);
جعله الله في ميزان حسناتك ووفقك لما يحب ويرضى

kira-h
14-07-2017, 12:16 AM
شكرا لك أستاذ حسن
تم التغلب على المشكلة وكانت عندي في زيادة مسافة واحدة فقط في كومنت الاستدعاء
حيث أن :

orderCommission("buy 1" , OP_BUY) != orderCommission(" buy 1" , OP_BUY);
جعله الله في ميزان حسناتك ووفقك لما يحب ويرضى

واياك اخي، امين
والله الموفق

ميدو تانجو
14-07-2017, 09:46 AM
السلام عليكم
أخي حسن اواجه مشكلة في تطبيق دالة التريلينج .
في المنتدى القديم انت كنت قد وضعت شرح لها وكانت سهلة لكن هنا اجدها معقدة و استطيع فهمها ابدا
هل لو تكرمت ووضعتها بصيغة اسهل قليلا لني احتاجها في تصميمي لأكسبرت.
وجزاك الله خيرا

kira-h
14-07-2017, 04:23 PM
السلام عليكم
أخي حسن اواجه مشكلة في تطبيق دالة التريلينج .
في المنتدى القديم انت كنت قد وضعت شرح لها وكانت سهلة لكن هنا اجدها معقدة و استطيع فهمها ابدا
هل لو تكرمت ووضعتها بصيغة اسهل قليلا لني احتاجها في تصميمي لأكسبرت.
وجزاك الله خيرا
وعليكم السلام
راجع المشاركة التالية :
دالة التريلينغ (http://www.fxprg.com/vb/showthread.php?t=31456&p=844599&viewfull=1#post844599)

ميدو تانجو
15-07-2017, 07:35 AM
وعليكم السلام
راجع المشاركة التالية :
دالة التريلينغ (http://www.fxprg.com/vb/showthread.php?t=31456&p=844599&viewfull=1#post844599)

هذه الدالة هي ما اتكلم عنها اجدها صعبة الفهم عن طريقتك القديمة وبالتحديد في هذه النقاط
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
ماذا تعني ot<=OP_SELL ؟
ولماذا لا اجد ot<=OP_BUY؟
ولماذا استخدمنا NormalizeDouble ؟
وهل هي كاملة في حالتي البيع والشراء؟
وشكرا جزيلا لك

kira-h
15-07-2017, 02:43 PM
هذه الدالة هي ما اتكلم عنها اجدها صعبة الفهم عن طريقتك القديمة وبالتحديد في هذه النقاط
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
ماذا تعني ot<=OP_SELL ؟
ولماذا لا اجد ot<=OP_BUY؟
ولماذا استخدمنا NormalizeDouble ؟
وهل هي كاملة في حالتي البيع والشراء؟
وشكرا جزيلا لك

هي نفس الدالة القديمة مع بعض الاختصارات، وكاملة تعمل على البيع والشراء، ولا يوجد فرق من حيث التنفيذ
ot<=OP_SELL تعني اذا كانت الصفقة شراء او بيع، لأن الشراء ياخد القيمة 0 والبيع القيمة 1، وبالتالي وكأننا نقول ot<=1
ولهذا لم نستخدم ot<=OP_BUY بمعنى ot<=0 أي مخصصة للشراء فقط ونحن نريد الدالة للشراء والبيع
أما NormalizeDouble لضبط عدد الأرقام بعد الفاصلة لعدد عشري مثل الاسعار

الدالة الاصلية للتريلنغ كالتالي :


void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((OrderOpenPrice()+(TrailingStop*po int)),Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop*point),Digits))||(OrderStopLoss()==0 ))
{
bool modify1=OrderModify(OrderTicket(),OrderOpenPrice() ,NormalizeDouble(Bid-(TrailingStop*point),Digits),OrderTakeProfit(),0,B lue);
}
}
}
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))
{
bool modify2=OrderModify(OrderTicket(),OrderOpenPrice() ,NormalizeDouble(Ask+(TrailingStop*point),Digits), OrderTakeProfit(),0,Red);
}
}
}
}
}
}

ميدو تانجو
16-07-2017, 06:45 AM
هي نفس الدالة القديمة مع بعض الاختصارات، وكاملة تعمل على البيع والشراء، ولا يوجد فرق من حيث التنفيذ
ot<=OP_SELL تعني اذا كانت الصفقة شراء او بيع، لأن الشراء ياخد القيمة 0 والبيع القيمة 1، وبالتالي وكأننا نقول ot<=1
ولهذا لم نستخدم ot<=OP_BUY بمعنى ot<=0 أي مخصصة للشراء فقط ونحن نريد الدالة للشراء والبيع
أما NormalizeDouble لضبط عدد الأرقام بعد الفاصلة لعدد عشري مثل الاسعار

الدالة الاصلية للتريلنغ كالتالي :


void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((OrderOpenPrice()+(TrailingStop*po int)),Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop*point),Digits))||(OrderStopLoss()==0 ))
{
bool modify1=OrderModify(OrderTicket(),OrderOpenPrice() ,NormalizeDouble(Bid-(TrailingStop*point),Digits),OrderTakeProfit(),0,B lue);
}
}
}
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))
{
bool modify2=OrderModify(OrderTicket(),OrderOpenPrice() ,NormalizeDouble(Ask+(TrailingStop*point),Digits), OrderTakeProfit(),0,Red);
}
}
}
}
}
}


شكرا لك اخي حسن على التوضيح وجعله الله في ميزان حسناتك

kira-h
16-07-2017, 12:49 PM
بالتوفيق ان شاء الله

fanfar
18-07-2017, 03:46 AM
السلام عليكم
لدي استفسار عن التعامل مع المصفوفة ممكن شرح مختصر عنها لو سمحت و عن كيفية اضافة شرط اقصى اسبريد

fxover
18-07-2017, 12:55 PM
الاستاذ الكبير حسن
كيف احول هذا الاستدعاء الى icustom
اريد ان يستدعي متوسط حسابي مخصص وليس المتوسط الموجود في الميتا تريدر
او اي مؤشر اخر


bool Buy(int Level){
double ma=iMA(NULL,0,MaPeriod,0,MODE_SMMA,PRICE_MEDIAN,0) ;
double low=ma+Level*point;
if(Open[0]>low&&Close[0]<=low&&Close[0]>low-3*point)return(true);
return(false);
}
bool Sell(int Level){
double ma=iMA(NULL,0,MaPeriod,0,MODE_SMMA,PRICE_MEDIAN,0) ;
double up=ma+Level*point;
if(Open[0]<up&&Close[0]>=up&&Close[0]<up+3*point)return(true);
return(false);
}

kira-h
18-07-2017, 08:48 PM
السلام عليكم
لدي استفسار عن التعامل مع المصفوفة ممكن شرح مختصر عنها لو سمحت و عن كيفية اضافة شرط اقصى اسبريد

وعليكم السلام
المصفوفات تعمل في أي مكان تقوم بتعريفها مثلها مثل المتغيرات لكن الفرق فقط أن المصفوفه تستطيع أن تحمل أكثر من قيمه حسب حجم المصفوفه
مثلا لو قمت بتعريف مصفوفه

double array[10];

فهذا يعني أن المصفوفه تحفظ 10 قيم وتبدأ من 0 إلى 9


array[0]
array[1]
array[2]
array[3]
array[4]
array[5]
array[6]
array[7]
array[8]
array[9]



وهذه بعض الأمثلة
+ مصفوفة الأزواج :


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}


+ مضاعفات اختيارية بناء على المصفوفة :
http://www.fxprg.com/vb/showthread.php?t=31456&p=844598&viewfull=1#post844598

وهذا الموضوع به شرح للمصفوفات
https://book.mql4.com/variables/arrays


أما بالنسبة لشرط أقصى سبريد راجع المشاركة التالية :
http://www.fxprg.com/vb/showthread.php?t=31457&page=5&p=852508&viewfull=1#post852508

kira-h
18-07-2017, 09:20 PM
الاستاذ الكبير حسن
كيف احول هذا الاستدعاء الى icustom
اريد ان يستدعي متوسط حسابي مخصص وليس المتوسط الموجود في الميتا تريدر
او اي مؤشر اخر


bool Buy(int Level){
double ma=iMA(NULL,0,MaPeriod,0,MODE_SMMA,PRICE_MEDIAN,0) ;
double low=ma+Level*point;
if(Open[0]>low&&Close[0]<=low&&Close[0]>low-3*point)return(true);
return(false);
}
bool Sell(int Level){
double ma=iMA(NULL,0,MaPeriod,0,MODE_SMMA,PRICE_MEDIAN,0) ;
double up=ma+Level*point;
if(Open[0]<up&&Close[0]>=up&&Close[0]<up+3*point)return(true);
return(false);
}

يمكنك عمل مؤشر وتستدعي هذه الدوال
ويبقى تختار شكل المؤشر هل عبارة عن إشارات بالجزء السفلي من الشارت مثل الماكد ام عبارة عن أسهم أم أوبجكتس،،، وهكذا
اما عن طريقة عمل مؤشر فهذا يطول شرحه
وبالمرفق مثال لمؤشر أسهم بسيط لتقاطع موفينجين

بالنسبة للمتوسط المخصص، ما هي طريقة حسابك له؟

fxover
18-07-2017, 11:29 PM
يمكنك عمل مؤشر وتستدعي هذه الدوال
ويبقى تختار شكل المؤشر هل عبارة عن إشارات بالجزء السفلي من الشارت مثل الماكد ام عبارة عن أسهم أم أوبجكتس،،، وهكذا
اما عن طريقة عمل مؤشر فهذا يطول شرحه
وبالمرفق مثال لمؤشر أسهم بسيط لتقاطع موفينجين

بالنسبة للمتوسط المخصص، ما هي طريقة حسابك له؟
شكرا لردك الكريم انا اقصد مثلا اريد ان استخدم البولنجر بدل المتوسط الحسابي في الكود اعلاه
حيث اذا قطع السعر حد البولنجر الاعلى بيع والشراء العكس هل يمكن تعديله لطفا

kira-h
19-07-2017, 05:49 PM
شكرا لردك الكريم انا اقصد مثلا اريد ان استخدم البولنجر بدل المتوسط الحسابي في الكود اعلاه
حيث اذا قطع السعر حد البولنجر الاعلى بيع والشراء العكس هل يمكن تعديله لطفا

الكود كالتالي:

bool Buy()
{
double lo=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}

doctor.forex
19-07-2017, 05:50 PM
السلام عليكم أخى الكريم حسن
أريد وضع شرط time_step فى دالة فتح الصفقة بحيث يكون الـtime_step هو المدة الزمنية بين الصفقة التى سيتم فتحها والصفقة السابقة .
هل تكون
TimeCurrent()-OrderOpenTime () >= Time_step
أم سيكون هناك دالة خارجية لتوقيت آخر صفقة تم فتحها ؟
ولكم جزيل الشكر

kira-h
19-07-2017, 05:54 PM
السلام عليكم أخى الكريم حسن
أريد وضع شرط time_step فى دالة فتح الصفقة بحيث يكون الـtime_step هو المدة الزمنية بين الصفقة التى سيتم فتحها والصفقة السابقة .
هل تكون
TimeCurrent()-OrderOpenTime () >= Time_step
أم سيكون هناك دالة خارجية لتوقيت آخر صفقة تم فتحها ؟
ولكم جزيل الشكر
وعليكم السلام
الشرط صحيح ولكن يجب عمل دالة خارجية تستخرج توقيت آخر صفقة مفتوحة وهي كالتالي :



datetime LastOrderTime()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
datetime ot=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNo)
{
return(ot);
}
}
return(0);
}



if(TimeCurrent()-LastOrderTime()) >= Time_step)
Time_step بالثواني

fxover
20-07-2017, 01:33 AM
الكود كالتالي:

bool Buy()
{
double lo=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}
الف شكر..شغال تمام

fxover
20-07-2017, 01:54 PM
اخي حسن سؤال هل يمكن اضافة close at next هنا
ام في مكان اخر من كود الاكسبيرت



bool Buy()
{
double lo=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}

kira-h
20-07-2017, 04:13 PM
اخي حسن سؤال هل يمكن اضافة close at next هنا
ام في مكان اخر من كود الاكسبيرت



bool Buy()
{
double lo=iBands(Symbol(),0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}

ستحتاج لدالة الاغلاق بدلالة النوع كجواب للشرط العكسي بالدالة الرئيسية كالتالي :


input bool CloseAtNext=true;

void OnTick()
{
if(CloseAtNext)
{
if(Buy()==true)CloseOrders(OP_SELL);
if(Sell()==true)CloseOrders(OP_BUY);
}
}




void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),50); }
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}

fxover
20-07-2017, 06:51 PM
اخي حسن يظهر معي هذا الخطأ
عند اضافة الكود

kira-h
20-07-2017, 06:53 PM
اخي حسن يظهر معي هذا الخطأ
عند اضافة الكود

ارفق الاكسبيرت للمراجعة

fxover
20-07-2017, 07:44 PM
طبعا ..تفضل
هو احد اكسبيرتات استاذنا مستر دولار

فقط ارجو اضافة خيار close at next

kira-h
20-07-2017, 10:46 PM
طبعا ..تفضل
هو احد اكسبيرتات استاذنا مستر دولار

فقط ارجو اضافة خيار close at next

مرفق الاكسبيرت المعدل مع تصحيح الاخطارات

fxover
21-07-2017, 01:47 AM
مرفق الاكسبيرت المعدل مع تصحيح الاخطارات

الف شكر ..كل الحب والاحترام

fanfar
21-07-2017, 01:23 PM
شكراً اخي سأتابع الشروحات

fanfar
21-07-2017, 03:28 PM
السلام عليكم
لو سمحت اخي ارفق مؤشر خارجي ارجو كتابة شروط فتح الصفقات له، عندما يكون 50% و اللون احمر يفتح صفقة بيع، و فتح صفقة شرا لما النسبة 50% و اللون اخضر، الهدف 20 نقطة و الاستوب لما يكون النسبة 0و اللون رمادي، و لما يتغير اتجاه السعر يفتح مع الاتجاه، و اهم شيء يفتح اول ما يندرج على الشارت. شكراً لك

reglement
21-07-2017, 05:11 PM
لو سمحت يا اخي
اريد ان اضيف الماجيك نمبر للاكسبيرت
ماهي معادلة الماجيك وكيف اضيفها وشكرا

kira-h
21-07-2017, 11:38 PM
لو سمحت يا اخي
اريد ان اضيف الماجيك نمبر للاكسبيرت
ماهي معادلة الماجيك وكيف اضيفها وشكرا

ستقوم باضافة شرط الماجك نمبر بكل الدوال الخارجية كالتريلينغ ودالة حساب عدد الصفقت ...


if(OrderMagicNumber()==MagicNo)


ثم تضع المتغير MagicNo بدوال فتح الصفقات
مثال :

OrderSend(Symbol(),OP_BUY,Lots,Ask,5*Q,0,0,"Kira-h",MagicNo,0,Blue);

والمتغير الخارجي

input int MagicNo=2017;

kira-h
21-07-2017, 11:39 PM
الف شكر ..كل الحب والاحترام

العفو أخي والله الموفق

Ahmed
22-07-2017, 04:03 PM
السلام عليكم استاذ حسن
اريد وظيفة بريك ايفن اذا وصل الربح 50 نقطة يتحرك الاستوب ليحجز ربح 20
وكلما كان الفرق خمسين نقطة بين الاستوب والربح يتحرك الاستوب ليحجز 20 نقطة اخرى
بارك الله فيك

kira-h
22-07-2017, 07:21 PM
السلام عليكم استاذ حسن
اريد وظيفة بريك ايفن اذا وصل الربح 50 نقطة يتحرك الاستوب ليحجز ربح 20
وكلما كان الفرق خمسين نقطة بين الاستوب والربح يتحرك الاستوب ليحجز 20 نقطة اخرى
بارك الله فيك
وعليكم السلام
ستستخدم دالة التريلينغ كالتالي :


//-----------Trailing Stop fonction
void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop*point),Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop*point),Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid+(TrailingStep*point),Digits )<NormalizeDouble((op-(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop*point),Digits)) )||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop*point),Digits),tp,0,Red);
}
}
}
}
}
}


ثم الشروط ببدالة الدالة الرئيسية كالتالي:


void OnTick()
{
if(TrailingStop>0)MoveTrailingStop();
}


بحيث المتغيرات الخارجية كالتالي:


input double TrailingStop=0,
TrailingStep=0;


TrailingStep هي عدد النقاط التي سيبدأ من بعدها إستخدام التريلينج ستوب
على سبيل المثال إذا جعلت التريلينج ستيب 10 نقاط وجعلت التريلينج ستوب 30 نقطه في هذه الحاله سيبدأ بتحريك الأستوب لوز إلى نقطة الدخول بعد ربح 40 نقطه وليس ثلاثين نقطه

Ahmed
22-07-2017, 09:42 PM
جزاك الله خيرا استاذي

Waddah
22-07-2017, 10:05 PM
السلام عليكم أستاذ حسن ....عندي سؤالين لو سمحت
1- عندي إكسبرت يفحص مجموعة أزواج حسب إستراتيجية معينة - عند فتح صفقة على زوج معين لا يفتح أي صفقات أخرى على زوج آخر(ممكن يفتح صفقات تعزيز على الزوج نفسه) حتى إغلاق كل الصفقات ويعيد البحث من جديد

2- هل يمكن عمل تريلنغ ستوب بالدولار لمجموعة صفقات - مثلا 4 صفقات مفتوحة ورابحة 500 دولار كيف أضع ستوب لكل الصفقات بحيث لو ضرب الستوب يبقى الربح 300 دولار

kira-h
23-07-2017, 03:46 AM
السلام عليكم أستاذ حسن ....عندي سؤالين لو سمحت
1- عندي إكسبرت يفحص مجموعة أزواج حسب إستراتيجية معينة - عند فتح صفقة على زوج معين لا يفتح أي صفقات أخرى على زوج آخر(ممكن يفتح صفقات تعزيز على الزوج نفسه) حتى إغلاق كل الصفقات ويعيد البحث من جديد

2- هل يمكن عمل تريلنغ ستوب بالدولار لمجموعة صفقات - مثلا 4 صفقات مفتوحة ورابحة 500 دولار كيف أضع ستوب لكل الصفقات بحيث لو ضرب الستوب يبقى الربح 300 دولار

وعليكم السلام
1- نعم يمكن ذلك بعمل شرط إذا يوجد صفقة مفتوحة يتم فتح صفقات تعزيز بنفس اسم الزوج والنوع ويتم معرفة ذلك من خلال دوال خارجية لكل مواصفات الصفقة المفتوحة
مثال :
دالة عدد الصفقات إجمالا على كل الأزواج كالتالي :


int Orders()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
cnt++;
}
}
return(cnt);
}


ودالة تستخرج اسم الزوج كالتالي :


string LastOrderName()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
{
return(sy);
}
}
return("");
}


ودالة لمعرفة نوع وسعر آخر صفقة مفتوحة كالتالي :


double LastOrder(string info)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int ty=OrderType();
double op=OrderOpenPrice();
{
if(info=="Type")return(ty);
else if(info=="Price")return(op);
}
}
return(0);
}


فتكون شروط فتح التعزيزات كالتالي :


if(Orders()>0)
{
if(LastOrder("Type")==OP_BUY)
{
if(Ask>=LastOrder("Price")+Step*point)
{
tk=OrderSend(LastOrderName(),OP_BUY,Lots,Normalize Double(Ask,Digits),30,0,0,"Kira-h",MagicNo,0,Blue);
}
}

if(LastOrder("Type")==OP_SELL)
{
if(Bid<=LastOrder("Price")-Step*point)
{
tk=OrderSend(LastOrderName(),OP_SELL,Lots,Normaliz eDouble(Bid,Digits),30,0,0,"Kira-h",MagicNo,0,Red);
}
}
}


//-----

2- دالة التريلينغ بالدولار كالتالي :


input double TrailingStop_USD=0,
TrailingStep_USD=0;

void OnTick()
{
if(TrailingStop_USD>0)Trailing_USD();
}


void Trailing_USD()
{
if(Profit_By_USD()>=TrailingStop_USD&&((GlobalVariableGet(Symbol()+MagicNo+"Step")<(Profit_By_USD()-(TrailingStop_USD-TrailingStep_USD)))
||GlobalVariableGet(Symbol()+MagicNo+"Stop")==0))
{
GlobalVariableSet(Symbol()+MagicNo+"Stop",Profit_By_USD()-TrailingStop_USD);
GlobalVariableSet(Symbol()+MagicNo+"Step",Profit_By_USD()-(TrailingStop_USD-TrailingStep_USD));
}
if(Profit_By_USD()<=GlobalVariableGet(Symbol()+MagicNo+"Step")&&GlobalVariableGet(Symbol()+MagicNo+"Stop")!=0)
{
CloseAllOrders();
GlobalVariableDel(Symbol()+MagicNo+"Stop");
GlobalVariableDel(Symbol()+MagicNo+"Step");
}
}

void CloseAllOrders()
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID ),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_AS K),50);}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}

kira-h
23-07-2017, 03:55 AM
جزاك الله خيرا استاذي

وإياك أخي الكريم

Ahmed
23-07-2017, 09:55 PM
السلام عليكم استاذ حسن
الرجاء توضيح الفرق بين كود ربح اخر صفقة بالدولار
وكود ربح كل الصفقات بالدولار
مع جزيل الشكر

kira-h
23-07-2017, 10:45 PM
السلام عليكم استاذ حسن
الرجاء توضيح الفرق بين كود ربح اخر صفقة بالدولار
وكود ربح كل الصفقات بالدولار
مع جزيل الشكر

وعليكم السلام
- دالة ربح آخر صفقة كالتالي :


double LastOrderProfit(int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
return(pt);
}
}
}
return(0);
}


- دالة إجمالي الربح بالدولار كالتالي:


double TotalProfit(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}



والفرق بين الدالتين واضح بحيث بالدالة الأولى نستخدم الحلقة من نوع :

for(int i=OrdersTotal()-1;i>=0;i--)
بحيث سيبحث بدءا من آخر صفقة إلى أول صفقة
وستعود بقيمة الربح (لآخر صفقة)

return(pt)

بينما بالدالة الثانية نستخدم الحلقة من نوع:

for(int i=0;i<OrdersTotal();i++)
سيبحث بدءا من أول صفقة إلى آخر صفقه
وستعود بقيمة إجمالي ربح الصفقات

return(pts)
بحيث
pts+=pt+sw+cm
الرمز =+ أي أننا نجمع قيمه ربح الصفقة السابقه + القيمه للصفقة الجديده وهكذا... إلى أن يجمع كل أرباح الصفقات

Ahmed
23-07-2017, 10:56 PM
بارك الله فيك استاذ حسن
وجزاك الله خيرا

kira-h
23-07-2017, 11:00 PM
بارك الله فيك استاذ حسن
وجزاك الله خيرا
وإياك أخي الكريم
لكن لماذا استخدمنا OrdersTotal-1؟
لأن عدد الصفقات يبدأ من 0 حتى ( مجموع الصفقات 1- )
مثلا لو كان يوجد 5 صفقات مفتوحه فترتيبهم سيكون 0 , 1 , 2 , 3 , 4
الصفقة الأخيره رقمها 4 وليس 5 ويعبر عنها بـ OrdersTotal-1

Ahmed
24-07-2017, 07:26 AM
شكرا جزيلا على الايضاح التفصيلي
بارك الله فيك

fanfar
24-07-2017, 03:51 PM
السلام عليكم
لو سمحت اخي ارفق مؤشر خارجي ارجو كتابة شروط فتح الصفقات له، عندما يكون 50% و اللون احمر يفتح صفقة بيع، و فتح صفقة شرا لما النسبة 50% و اللون اخضر، الهدف 20 نقطة و الاستوب لما يكون النسبة 0و اللون رمادي، و لما يتغير اتجاه السعر يفتح مع الاتجاه، و اهم شيء يفتح اول ما يندرج على الشارت. شكراً لك

للتذكير اخ حسن لو سمحت ممكن مساعدتك

fanfar
24-07-2017, 04:01 PM
سؤال تاني غلبتك معي عفواً
هل هذا الكود صح ام غلط، و ايضاً كتبت الشروط مع مصفوفة طلع فيها اخطاء هو لازم تكون الشروط مستقلة او داخل المصفوفة؟ يا ريت حضرتك تساعدني


bool Buy()
{
double lo=iBands(A+Symbols_Array[i]+Z,0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(A+Symbols_Array[i]+Z,0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}

kira-h
24-07-2017, 04:20 PM
سؤال تاني غلبتك معي عفواً
هل هذا الكود صح ام غلط، و ايضاً كتبت الشروط مع مصفوفة طلع فيها اخطاء هو لازم تكون الشروط مستقلة او داخل المصفوفة؟ يا ريت حضرتك تساعدني


bool Buy()
{
double lo=iBands(A+Symbols_Array[i]+Z,0,20,2,0,0,MODE_LOWER,0);
if(Open[0]>lo&&Close[0]<=lo)return(true);
else return(false);
}

bool Sell()
{
double up=iBands(A+Symbols_Array[i]+Z,0,20,2,0,0,MODE_UPPER,0);
if(Open[0]<up&&Close[0]>=up)return(true);
else return(false);
}


الصحيح أن تجعل اسم الزوج متغير
مثال :


bool Buy(string symbol)
{
double lo=iBands(symbol,0,20,2,0,0,MODE_LOWER,0);
if(iOpen(symbol,0,0)>lo&&iClose(symbol,0,0)<=lo)return(true);
else return(false);
}

bool Sell(string symbol)
{
double up=iBands(symbol,0,20,2,0,0,MODE_UPPER,0);
if(iOpen(symbol,0,0)<up&&iClose(symbol,0,0)>=up)return(true);
else return(false);
}


ثم تضع بالشروط اسم المصفوفة أو الزوج
مثال :


if(Sell(A+Symbols_Array[i]+Z))

if(Buy(A+Symbols_Array[i]+Z))

kira-h
24-07-2017, 04:48 PM
السلام عليكم
لو سمحت اخي ارفق مؤشر خارجي ارجو كتابة شروط فتح الصفقات له، عندما يكون 50% و اللون احمر يفتح صفقة بيع، و فتح صفقة شرا لما النسبة 50% و اللون اخضر، الهدف 20 نقطة و الاستوب لما يكون النسبة 0و اللون رمادي، و لما يتغير اتجاه السعر يفتح مع الاتجاه، و اهم شيء يفتح اول ما يندرج على الشارت. شكراً لك

وعليكم السلام
لا أعتقد انه ممكن استخراج النسبة المئوية لاوبجكت بهذا الشكل !

"Daily Av = 79 Range :....:....:..|.:....: 67% of Av"

لذلك يجب معرفة الشروط من كود المؤشر والتي تعطي هذه النسبة ثم تستخدمها مباشرة بالشروط
اما بالنسبة لشرط الألون يمكن ذلك باستخدام الوظيفة ObjectGet وتستخرج قيمة اللون من الوظيفة OBJPROP_COLOR

ObjectGet(string name,OBJPROP_COLOR)
مثال
قيمة لون السطر الأول والثاني كالتالي :

double color1=ObjectGet("AvPercent",OBJPROP_COLOR),
color2=ObjectGet("AvPercent1",OBJPROP_COLOR);
ثم نستخدم الكومنت لمعرفة قيمة كل لون كالتالي :


Comment("Color1: ",color1," Color2: ",color2);

والنتيجة كانت 65280 والتي تعني اللون الأخضر ، ثم 4678655 والتي تعني اللون البني (حسب ما نراه بألوان السطرين على الشارت)

وبهذا نستنتج الشروط أنه إذا كانت قمية لون السطر الأول يساوي قيمة 65280 فهذا يعني أن لونه أخضر، وإذا يخالفه فهذا معناه ان لونه أحمر
نفس الشيء بالسطر الثاني
ومن خلالها نضع شروط الشراء والبيع
مثال :


color clr1,clr2;

if(color1==65280)clr1=Lime;else clr1=Red;
if(color2==4678655 )clr2=Red;else clr2=Lime;

if(clr1==Lime)//--Buy Order
if(clr1==Red)//--Sell Order

if(clr2==Lime)//Buy Order
if(clr2==Red)//Sell Order

fanfar
24-07-2017, 05:09 PM
الصحيح أن تجعل اسم الزوج متغير
مثال :


bool Buy(string symbol)
{
double lo=iBands(symbol,0,20,2,0,0,MODE_LOWER,0);
if(iOpen(symbol,0,0)>lo&&iClose(symbol,0,0)<=lo)return(true);
else return(false);
}

bool Sell(string symbol)
{
double up=iBands(symbol,0,20,2,0,0,MODE_UPPER,0);
if(iOpen(symbol,0,0)<up&&iClose(symbol,0,0)>=up)return(true);
else return(false);
}


ثم تضع بالشروط اسم المصفوفة أو الزوج
مثال :


if(Sell(A+Symbols_Array[i]+Z))

if(Buy(A+Symbols_Array[i]+Z))


شكرا اخي قمت حالا بتطبيق ما اشرت به علي و ظهر الخطأ التالي لو سمحت كيف تتم معالجته
2150

kira-h
24-07-2017, 05:29 PM
شكرا اخي قمت حالا بتطبيق ما اشرت به علي و ظهر الخطأ التالي لو سمحت كيف تتم معالجته
2150

ارفق الاكسبيرت للمراجعة

fanfar
24-07-2017, 06:09 PM
ارفق الاكسبيرت للمراجعة

اتفضل اخي هل المصفوفة يتم دمجها مع BreakEven او TrailingStop ام تخص العملات فقط

هل في فرق بين BreakEven او TrailingStop في الاكسبرت العادي بدون مصفوفة والاكسبرت الذي يحتوي علي مصفوفة

kira-h
24-07-2017, 07:19 PM
اتفضل اخي هل المصفوفة يتم دمجها مع BreakEven او TrailingStop ام تخص العملات فقط

هل في فرق بين BreakEven او TrailingStop في الاكسبرت العادي بدون مصفوفة والاكسبرت الذي يحتوي علي مصفوفة

مرفق الاكسبيرت

fanfar
24-07-2017, 07:41 PM
مرفق الاكسبيرت

سلمت يداك اخي بارك الله فيك

ابو عمر
24-07-2017, 09:24 PM
شكرا اخي حسن

Waddah
25-07-2017, 12:41 PM
السلام عليكم ....كيف يستطيع الإكسبرت التمييز بين حساب السنت والحساب العادي ؟

kira-h
25-07-2017, 05:29 PM
السلام عليكم ....كيف يستطيع الإكسبرت التمييز بين حساب السنت والحساب العادي ؟

وعليكم السلام
لا توجد وظيفة للتمييز بين أنواع الحسابات، لكن يمكن معرفة أقل لوت ممكن فتحه بالحساب حسب الزوج من خلال الوظيفة
MarketInfo(Symbol(),MODE_MINLOT)

وأقصى لوت

MarketInfo(Symbol(),MODE_MAXLOT)

kira-h
25-07-2017, 05:34 PM
سلمت يداك اخي بارك الله فيك


شكرا اخي حسن

العفو والله الموفق

fanfar
25-07-2017, 11:52 PM
مرفق الاكسبيرت
اخي العزيز بعد التطبيق على اكسبيرت اخر و رغم انه يعمل بشكل جيد جدا اتضح ان صفقات التعزيز لا تعمل و ان عملت فذلك لعملة الشارت الحالي فقط هلا اتممت معروفك و صححت لي الوضع


if(SELL==true && TotalOrders(OP_SELL)>0 && TotalOrders(OP_SELL)<MaxTrades && MarketInfo(A+Symbols_Array[i]+Z,MODE_BID)>=LastOrderInfo("OpenPrice")+Step*point)



و هاهي التتمة


double LastOrderInfo(string symbol,string index)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber)
{
if(index=="Lot")return(OrderLots());
else if(index=="OpenPrice")return(OrderOpenPrice());
}
}
return(0);
}

kira-h
26-07-2017, 12:27 AM
اخي العزيز بعد التطبيق على اكسبيرت اخر و رغم انه يعمل بشكل جيد جدا اتضح ان صفقات التعزيز لا تعمل و ان عملت فذلك لعملة الشارت الحالي فقط هلا اتممت معروفك و صححت لي الوضع


if(SELL==true && TotalOrders(OP_SELL)>0 && TotalOrders(OP_SELL)<MaxTrades && MarketInfo(A+Symbols_Array[i]+Z,MODE_BID)>=LastOrderInfo("OpenPrice")+Step*point)



و هاهي التتمة


double LastOrderInfo(string symbol,string index)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber)
{
if(index=="Lot")return(OrderLots());
else if(index=="OpenPrice")return(OrderOpenPrice());
}
}
return(0);
}


الصحيح كالتالي :


if(SELL==true && TotalOrders(A+Symbols_Array[i]+Z,OP_SELL)>0 && TotalOrders(A+Symbols_Array[i]+Z,OP_SELL)<MaxTrades
&& MarketInfo(A+Symbols_Array[i]+Z,MODE_BID)>=LastOrderInfo(A+Symbols_Array[i]+Z,"OpenPrice")+Step*MarketInfo(A+Symbols_Array[i]+Z,MODE_POINT)

fanfar
26-07-2017, 12:40 AM
مرة اخرى سؤال لحضرتك ننتفع من بحر علمك مع الاخوة اعضاء المنتدى الكريم ادامك الله اخي و رزقك بحسب نيتك و كرمك معنا
هل يمكن التعامل مع التايم فريم كمصفوفة ام ان ذلك غير ممكن؟؟؟

kira-h
26-07-2017, 01:57 AM
مرة اخرى سؤال لحضرتك ننتفع من بحر علمك مع الاخوة اعضاء المنتدى الكريم ادامك الله اخي و رزقك بحسب نيتك و كرمك معنا
هل يمكن التعامل مع التايم فريم كمصفوفة ام ان ذلك غير ممكن؟؟؟

وإياك أخي
نعم ممكن مثل مصفوفة الأزواج

fanfar
26-07-2017, 09:52 AM
شكراً للافادة اخي الكريم، هل ما قمت به بهذا الشكل صحيح ام خاطئ؟


string TimeFrame_Array[]={"1", "5","15", "30", "60", "240"};
int tf,size=ArraySize(TimeFrame_Array);

kira-h
26-07-2017, 05:15 PM
شكراً للافادة اخي الكريم، هل ما قمت به بهذا الشكل صحيح ام خاطئ؟


string TimeFrame_Array[]={"1", "5","15", "30", "60", "240"};
int tf,size=ArraySize(TimeFrame_Array);


الصحيح كالتالي :

int TimeFrame_Array[]={1,5,15,30,60,240};
int tf,size=ArraySize(TimeFrame_Array);

Ahmed
27-07-2017, 07:02 AM
السلام عليكم استاذ حسن
اريد عمل متغير احفظ به الوقت الحالي + 60 دقيقة
فهل سيكون المتغير بهذا الشكل

timer=TimeCurrent()+60;

kira-h
27-07-2017, 03:24 PM
السلام عليكم استاذ حسن
اريد عمل متغير احفظ به الوقت الحالي + 60 دقيقة
فهل سيكون المتغير بهذا الشكل

timer=TimeCurrent()+60;

وعليكم السلام
الصحيح كالتالي

datetime timer=TimeCurrent()+60*60;

لأن TimeCurrent بالثواني وبالتالي كل دقيقة بها 60 ثانية، لهذا إذا أردت إضافة 60 دقيقة تضربها في 60 ثانية

Ahmed
27-07-2017, 08:06 PM
شكرا لك اخي حسن

kira-h
28-07-2017, 01:17 AM
شكرا لك اخي حسن

العفو أخي والله الموفق

fanfar
28-07-2017, 01:52 AM
الصحيح كالتالي :

int TimeFrame_Array[]={1,5,15,30,60,240};
int tf,size=ArraySize(TimeFrame_Array);

شكرا لك اخي بارك الله بجهودك و ادامك عونا و مشعلا ينير طريقنا، سؤال ارجو ان القى الايجاب عنه لديك هل يوجد دالة تقوم بأخذ ربح جزء من الصفقة بعد الوصول إلى عدد نقط معينة؟

kira-h
29-07-2017, 04:23 AM
شكرا لك اخي بارك الله بجهودك و ادامك عونا و مشعلا ينير طريقنا، سؤال ارجو ان القى الايجاب عنه لديك هل يوجد دالة تقوم بأخذ ربح جزء من الصفقة بعد الوصول إلى عدد نقط معينة؟
وإياك أخي الكريم
نعم ممكن
ستقوم بعمل دالة تقوم بحساب عدد مرات إغلاق الصفقة التي لها نفس سعر وتوقيت افتتاح الصفقة كالتالي :


int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++; // increment order counter
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Ma gicNo)continue; // order is not for this symbol, go to next order
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
return(closecount);
}


ثم دالة الاغلاق الجزئي كالتالي :


void PartialClose()
{
bool close;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
int t=OrderTicket();
double op=OrderOpenPrice();
datetime ot=OrderOpenTime();
double ol=OrderLots();
int oty=OrderType();
int closecount=OrderCloseCount(op,ot);
double pcb=NormalizeDouble(PercentClose*ol/100,2);
double pcs=NormalizeDouble(PercentClose*ol/100,2);
{
if(oty==OP_BUY)
{
if(Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(t,pcb,Bid,3*Q);
}
}
if(oty==OP_SELL)
{
if(Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(t,pcs,Ask,3*Q);
}
}
}
}
}


ثم الشروط بالدالة الرئيسية كالتالي :


void OnTick()
{
if(PartialProfit>0)PartialClose();
}


بحيث المتغيرات الخارجية كالتالي :


input int PercentClose=50;//نسبة الاغلاق الجزءي لحجم العقد
input double PartialProfit=10;//الربح الجزئي بالنقاط

Waddah
29-07-2017, 12:17 PM
السلام عليكم
عندي مؤشر أسهم ...لكن هذه الأسهم ليس لها إندكس ..... هل من الممكن التعامل معها ك Object لصنع إكسبرت ؟ ممكن شرح بسيط للدوال اللازمة

Ahmed
29-07-2017, 01:11 PM
السلام عليكم استاذ حسن
بالنسبه لتوقيت عمل ونهاية عمل الاكسبيرت
اي الكودين افضل
الكود الاول

if(Time[0] >= start_Time && Time[0] <= end_Time) trade = true;
الكود الثاني

if(TimeCurrent() >= start_Time && TimeCurrent() <= end_Time) trade = true;

kira-h
29-07-2017, 06:12 PM
السلام عليكم
عندي مؤشر أسهم ...لكن هذه الأسهم ليس لها إندكس ..... هل من الممكن التعامل معها ك Object لصنع إكسبرت ؟ ممكن شرح بسيط للدوال اللازمة

وعليكم السلام
هذا على حسب طريقة عمل المؤشر ولكن عموما يتم استخدام الوظيفة ObjecGet لمعرفة قيمة أو لون أو توقيت... الأوبجكت، ومنها تستنتج الشروط

kira-h
29-07-2017, 06:13 PM
السلام عليكم استاذ حسن
بالنسبه لتوقيت عمل ونهاية عمل الاكسبيرت
اي الكودين افضل
الكود الاول

if(Time[0] >= start_Time && Time[0] <= end_Time) trade = true;
الكود الثاني

if(TimeCurrent() >= start_Time && TimeCurrent() <= end_Time) trade = true;
وعليكم السلام
كلاهما صحيح لكن الثاني أدق لأنه يتعامل مع التوقيت الحالي للسيرفر ()TimeCurrent وليس كتوقيت افتتاح آخر شمعة [0]Time

Ahmed
29-07-2017, 10:35 PM
شكرا لك اخي حسن
وبارك الله فيك

fanfar
29-07-2017, 11:34 PM
استاذنا العزيز سؤال حيرني و ارجو ايجاد الجواب لديك، استخدم موفينج 200 ترند و اريد معرفة زاوية الترند هل هناك طريقة لمعرفتها لو سمحت؟؟؟

kira-h
30-07-2017, 01:08 AM
شكرا لك اخي حسن
وبارك الله فيك

وإياك أخي الكريم

kira-h
30-07-2017, 01:10 AM
استاذنا العزيز سؤال حيرني و ارجو ايجاد الجواب لديك، استخدم موفينج 200 ترند و اريد معرفة زاوية الترند هل هناك طريقة لمعرفتها لو سمحت؟؟؟

صعب تحديد الزوايا بدقة لأن الشارت متغير بسبب تمدده وتقلصه...، مما يؤدي إلى تغير معظم المعطيات الهندسية من بينها الزوايا)
ويمكنك التجربة برسم ترند مائل بشارت ممدد على آخره ثم حدد قيمة الزاوية بعينك فقط وقارنها بنفس الزاوية عند تقليص الشارت ستلاحظ الفرق في تغير الزاوية،،،

fanfar
31-07-2017, 09:45 AM
2318
يسعد اوقاتك اخ حسن، بالنسبة للزاوية اريدها ان تظهر امام الموفينج ولو كانت متغيرة، كما في الصورة المرفقة بدلا من السعر تظهر قياس الزاوية، و احتاج معرفة كيفية الت6بير عن انفجار البولينجر ضمن اكسبيرت، و اخيرا اريد رايك الشخصي في مؤشر الايشميكو و اشاراته لفتح صفقة هل يكفي وحده ام يحتاج مؤشر اخر لتاكيد الاشارة و اخيراً طريقة استدعائه و شكراً جزيلا

Waddah
31-07-2017, 01:07 PM
وعليكم السلام
هذا على حسب طريقة عمل المؤشر ولكن عموما يتم استخدام الوظيفة ObjecGet لمعرفة قيمة أو لون أو توقيت... الأوبجكت، ومنها تستنتج الشروط

أستاذ بالنسبة للمؤشر NRP الذي عملت إكسبرت له مؤخرا أي من التالي صحيح :
double V2 = ObjectGet("SBNR arrows",OBJPROP_PRICE
double V1 = ObjectGet("SBNR arrows",OBJPROP_LEVELVALUE

لم تنجح ولا واحدة في إعادة القيمة ....

kira-h
31-07-2017, 05:27 PM
2318
يسعد اوقاتك اخ حسن، بالنسبة للزاوية اريدها ان تظهر امام الموفينج ولو كانت متغيرة، كما في الصورة المرفقة بدلا من السعر تظهر قياس الزاوية، و احتاج معرفة كيفية الت6بير عن انفجار البولينجر ضمن اكسبيرت، و اخيرا اريد رايك الشخصي في مؤشر الايشميكو و اشاراته لفتح صفقة هل يكفي وحده ام يحتاج مؤشر اخر لتاكيد الاشارة و اخيراً طريقة استدعائه و شكراً جزيلا

الصورة غير موجودة، ارفقها عن طريق الوضع المتطور للمشاركة
عموما هذا مثال لطريقة قياس زاوية الترند كالتالي:


double price1=ObjectGet("Trend",OBJPROP_PRICE1);
double price2=ObjectGet("Trend",OBJPROP_PRICE2);
double Time1=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME1),false);
double Time2=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME2),false);

double price_diff=((price2-price1)/point);
double time_diff=(Time2-Time1);
double angle=MathArctan(price_diff/time_diff);

لكن في كل الحالات خاطئ أن تحسب الزاوية لمقياس رسم غير ثابت فالنتائج لن تكون ثابته أبدا

بالنسبة للايشيموكو تعريفه كالتالي :


double iIchimoku(
string symbol, // symbol
int timeframe, // timeframe
int tenkan_sen, // period of Tenkan-sen line
int kijun_sen, // period of Kijun-sen line
int senkou_span_b, // period of Senkou Span B line
int mode, // line index
int shift // shift
);


مثال لمعرفة قيمة خط السنكوسبان B عند الشمعة 1 :

double B=iIchimoku(Symbol(),0,9,26,52,MODE_SENKOUSPANB,1) ;

kira-h
31-07-2017, 05:40 PM
أستاذ بالنسبة للمؤشر NRP الذي عملت إكسبرت له مؤخرا أي من التالي صحيح :
double V2 = ObjectGet("SBNR arrows",OBJPROP_PRICE
double V1 = ObjectGet("SBNR arrows",OBJPROP_LEVELVALUE

لم تنجح ولا واحدة في إعادة القيمة ....

بالنسبة لهذا المؤشر يعطي على الشارت الكثير من الأسهم من نوع Objects لها نفس الاسم + توقيت الشمعة
لذلك سنقوم بتمييز آخر سهم عن طريق نوعه 233 يعني صاعد و 234 هابط ، ثم تمييز الشمعة التي ظهر عليها السهم بتحقق شرط توقيت الشمعة هو نفس توقيت السهم
يمكن معرفة كود أي نوع أوبجكت من الجدول التالي :
Wingdings (https://docs.mql4.com/constants/objectconstants/wingdings)

وتكون الشروط كالتالي :


int Arrow_Code=ObjectGet("SBNR arrows:"+Time[1],OBJPROP_ARROWCODE);
datetime Arrow_Time=ObjectGet("SBNR arrows:"+Time[1],OBJPROP_TIME1);

if(Arrow_Code==233 && Arrow_Time==Time[1])//Buy

if(Arrow_Code==234 && Arrow_Time==Time[1])//Sell

Waddah
31-07-2017, 08:54 PM
بالنسبة لهذا المؤشر يعطي على الشارت الكثير من الأسهم من نوع Objects لها نفس الاسم + توقيت الشمعة
لذلك سنقوم بتمييز آخر سهم عن طريق نوعه 233 يعني صاعد و 234 هابط ، ثم تمييز الشمعة التي ظهر عليها السهم بتحقق شرط توقيت الشمعة هو نفس توقيت السهم
يمكن معرفة كود أي نوع أوبجكت من الجدول التالي :
Wingdings (https://docs.mql4.com/constants/objectconstants/wingdings)

وتكون الشروط كالتالي :


int Arrow_Code=ObjectGet("SBNR arrows:"+Time[1],OBJPROP_ARROWCODE);
datetime Arrow_Time=ObjectGet("SBNR arrows:"+Time[1],OBJPROP_TIME1);

if(Arrow_Code==233 && Arrow_Time==Time[1])//Buy

if(Arrow_Code==234 && Arrow_Time==Time[1])//Sell

مشكور جدا جدا .... وهنا لا يمكن استدعاء المؤشر من الإكسبرت ولكن يجب وضعه على الشارت صح ؟.... هل يمكن للإكسبرت استدعاء تمبلت يحوي المؤشر بواسطة ChartApplyTemplate ؟؟

kira-h
31-07-2017, 10:47 PM
مشكور جدا جدا .... وهنا لا يمكن استدعاء المؤشر من الإكسبرت ولكن يجب وضعه على الشارت صح ؟.... هل يمكن للإكسبرت استدعاء تمبلت يحوي المؤشر بواسطة ChartApplyTemplate ؟؟
نعم صح
ويمكن استدعاء أي تمبلت، بل يمكنك استدعاء تمبلت به أي كان من المؤشرات وأي اكسبيرت سواء نفسه أو اكسبيرت آخر، لأنه عبارة عن تمبلت محفوظ بكل خصائصه

Waddah
01-08-2017, 12:17 PM
نعم صح
ويمكن استدعاء أي تمبلت، بل يمكنك استدعاء تمبلت به أي كان من المؤشرات وأي اكسبيرت سواء نفسه أو اكسبيرت آخر، لأنه عبارة عن تمبلت محفوظ بكل خصائصه

ماهي الصيغة الصحيحة : ( لم تعمل أي منها )
ChartApplyTemplate(0,"C:\\Program Files\\FBS Trader 4\\templates\\Nrep.tpl")
ChartApplyTemplate(0,"\\Nrep.tpl");
ChartApplyTemplate(0,"Nrep.tpl");

kira-h
01-08-2017, 06:12 PM
ماهي الصيغة الصحيحة : ( لم تعمل أي منها )
ChartApplyTemplate(0,"C:\\Program Files\\FBS Trader 4\\templates\\Nrep.tpl")
ChartApplyTemplate(0,"\\Nrep.tpl");
ChartApplyTemplate(0,"Nrep.tpl");

الصحيح كالتالي:

ChartApplyTemplate(0,"Nrep");

kira-h
04-08-2017, 12:41 AM
السلام عليكم

أريد برمجة اكسبرت بسيط يقوم بالتالي

استدعاء مؤشر zigzag باعداداته الإفتراضية وبعد تكوين آخر قمة او قاع يقوم الاكسبرت بحساب عدد الشموع بين آخر قمة وقاع وبعدها يقوم بعمل معين (كود آخر بناءا على عدد الشموع) مع وضع شروط معينة وفق النتيجة المستخرجة (عدد الشموع)

فأرجو المساعدة بوضع كود الإكسبرت وسأقوم إن شاء الله باكمال الباقي

وعليكم السلام
ستقوم بعمل دالة تعود بتوقيت القاع بدلالة ترتيب القيعان (القاع 1 أو 2 ...) كالتالي :



datetime BottomTime(int num)
{
int Num;
for(int i=0;i<200;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(Time[i]);
}
}
return(zig);
}


ثم دالة تعود بتوقيت القمة بدلالة ترتيب القمم (القمة 1 أو 2 ...) كالتالي :


datetime TopTime(int num)
{
int Num;
for(int i=0;i<200;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(Num==num)return(Time[i]);
}
}
return(zig);
}


وأخيرا دالة حساب عدد الشموع بين توقيتي آخر قمة وقاع كالتالي :


int CountBars()
{
int bars;
for(int i=1;i<200;i++)
{
if((TopTime(1)<BottomTime(1)&&Time[i]>=BottomTime(2)&&Time[i]<=TopTime(1))
||(TopTime(1)>BottomTime(1)&&Time[i]>=TopTime(2)&&Time[i]<=BottomTime(1)))
{
bars++;
}
}
return(bars);
}

Jek_So
04-08-2017, 10:21 AM
شكرا أستاذ كيرا فعلا عمل مذهل منك ياغامي :)

بارك الله فيك

Jek_So
04-08-2017, 11:31 AM
ممكن يا استاذ مساعدة لأن مؤشر الزيجزاج دوخني حقا
لدي بعض الأسئلة بخصوصه؟
1- بالنسبة لاسدعاء المؤشر بالدالة iCustom

iCustom(Symbol(),0,"ZigZag",12,5,3,0,0);
في بعض الأحيان يمشي الزيجزاج مع كل شمعة تخلق وهنا يعتبر الكود آخر سعر للزيجزاج؟
-لكن في حالة ثبات قيمة الزيجزاج عند شمعة ما لمدة معينة وهذا يحدثفي كثير من الأحيان ما الذي تعنيه قيمة هذا الكود؟

2- أرغب بمعرفة ما إذا كان آخر خط للزيجزاج صاعد أو هابط ومن ثم بعد ثبات الخط عند شمعة ميعنة أقوم بمقارنة سعر افتتاح الشمعة التالية التي تفتح مع سعر الزيجزاج
فأواجه مشكلة في المقارنة ممكن كود ذلك جزاء الله خيرا

3-كيف يمكنني أخذ قيمتي الهاي واللوا لآخر خط زيجزاج مكون؟ لتخزينهما واستعمالهما

4- كيف أعرف رقم الشمعة بالنسبة لاخر قمة للزيجزاج (اذا كان خطه صاعد طبعا)

أكثرت عليك، في انتظار اجاباتك وبارك الله فيك

أعلم ان المؤشر يعيد نفسه وفوق هذا وجع رأس ولكن أريد تعلم هيكلته وأفلتر استراتيجية لي

kira-h
04-08-2017, 04:46 PM
ممكن يا استاذ مساعدة لأن مؤشر الزيجزاج دوخني حقا
لدي بعض الأسئلة بخصوصه؟
1- بالنسبة لاسدعاء المؤشر بالدالة iCustom

iCustom(Symbol(),0,"ZigZag",12,5,3,0,0);
في بعض الأحيان يمشي الزيجزاج مع كل شمعة تخلق وهنا يعتبر الكود آخر سعر للزيجزاج؟
-لكن في حالة ثبات قيمة الزيجزاج عند شمعة ما لمدة معينة وهذا يحدثفي كثير من الأحيان ما الذي تعنيه قيمة هذا الكود؟

2- أرغب بمعرفة ما إذا كان آخر خط للزيجزاج صاعد أو هابط ومن ثم بعد ثبات الخط عند شمعة ميعنة أقوم بمقارنة سعر افتتاح الشمعة التالية التي تفتح مع سعر الزيجزاج
فأواجه مشكلة في المقارنة ممكن كود ذلك جزاء الله خيرا

3-كيف يمكنني أخذ قيمتي الهاي واللوا لآخر خط زيجزاج مكون؟ لتخزينهما واستعمالهما

4- كيف أعرف رقم الشمعة بالنسبة لاخر قمة للزيجزاج (اذا كان خطه صاعد طبعا)

أكثرت عليك، في انتظار اجاباتك وبارك الله فيك

أعلم ان المؤشر يعيد نفسه وفوق هذا وجع رأس ولكن أريد تعلم هيكلته وأفلتر استراتيجية لي
الكود يعني قيمة الزيجزاج بالشمعة 0
بالنسبة لمعرفة قيم القمم والقيعان السابقة فهي عن طريق الدوال التالية :
دالة قيمة القاع السابق بدلالة الترتيب :


double ZigZagBottom(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}


وقيمة القمة السابقة بدلالة الترتيب :


double ZigZagTop(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}

Ahmed
05-08-2017, 04:15 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يغلق الصفقات المفتوحه حسب هذه الشروط
اذا كان الربح اكبر من صفر وحصل اشارة عكسيه لمؤشر الباربولك سار
طبعا شروط فتح الصفقة ستكون من مؤشر الباربولك سار

kira-h
05-08-2017, 09:24 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يغلق الصفقات المفتوحه حسب هذه الشروط
اذا كان الربح اكبر من صفر وحصل اشارة عكسيه لمؤشر الباربولك سار
طبعا شروط فتح الصفقة ستكون من مؤشر الباربولك سار

وعليكم السلام
ستقوم بعمل دالة إجمالي الربح بالدولار بدلالة النوع كالتالي :


double TotalProfit(int type=-1)
{
double profit;
for (int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
cm=OrderCommission(),
sw=OrderSwap();

if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1))
{
profit+=pt+cm+sw;
}
}
return(profit);
}


ثم قيم البارابولك سار عند الشمعة 1 وعند الشمعة 2 ببداية الدالة الرئيسية OnTick كالتالي :


double sar1=iSAR(Symbol(),0,Step,Maximum,1);
double sar2=iSAR(Symbol(),0,Step,Maximum,2);


ثم تكون شروط الاغلاق في حالة تقصد الربح الاجمالي كالتالي :


if(TotalProfit()>0)
{
if((sar1<Open[1]&&sar2>Open[2])||(sar1>Open[1]&&sar2<Open[2]))CloseOrders();
}


أو في حالة تقصد أرباح البيع منفصلة عن ارباح الشراء كالتالي :


if(TotalProfit(OP_SELL)>0&&sar1<Open[1]&&sar2>Open[2])CloseOrders(OP_SELL);
if(TotalProfit(OP_BUY)>0&&sar1>Open[1]&&sar2<Open[2])CloseOrders(OP_BUY);


وفي النهاية دالة الاغلاق كالتالي :


void CloseOrders(int type=-1)
{
bool select,close,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();

if(tt>0&&sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}

reglement
06-08-2017, 01:04 AM
1-كيف اجعل للاكسبيرت تاريخ صلاحية و يظهر على شاشة الميتاتريدر
وطريقة تحويله من mq4 الى ex وشكرا

Ahmed
06-08-2017, 07:23 AM
ألف شكر لك أخي العزيز حسن

kira-h
06-08-2017, 06:35 PM
1-كيف اجعل للاكسبيرت تاريخ صلاحية و يظهر على شاشة الميتاتريدر
وطريقة تحويله من mq4 الى ex وشكرا

ستقوم بعمل الشروط ببداية الدالة الرئيسية OnTick
مثال :


void OnTick()
{
Comment("Expiration date is 2017.10.01 00:00");

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}
}

kira-h
06-08-2017, 06:36 PM
ألف شكر لك أخي العزيز حسن

بالتوفيق إن شاء الله

Waddah
13-08-2017, 02:36 PM
أستاذ حسن في إكسبرت يعمل على مصفوفة أزواج لو سمحت ممكن التالي :
لوضع ماجيك نمبر لكل زوج هل صحيح التالي int Magic = i +50 حيث 50 رقم اختياري ممكن يكون أي رقم و i اندكس الزوج في المصفوفة
دالة عدد الصفقات المفعلة على الزوج (لم تنجح معي حلقتين for ...)

مع الشكر الجزيل

kira-h
14-08-2017, 12:35 AM
أستاذ حسن في إكسبرت يعمل على مصفوفة أزواج لو سمحت ممكن التالي :
لوضع ماجيك نمبر لكل زوج هل صحيح التالي int Magic = i +50 حيث 50 رقم اختياري ممكن يكون أي رقم و i اندكس الزوج في المصفوفة
دالة عدد الصفقات المفعلة على الزوج (لم تنجح معي حلقتين for ...)

مع الشكر الجزيل

السلام عيكم
ما هو سبب استخدام هذا الشرط ؟
عموما حتى لو تم عمل هذا الشرط فسيحدث خلل تام بالاكسبيرت لأن الدوال الفرعية تعتمد على نفس الماجك نمبر لكل الأزواج وبالتالي سيستمر الاكسبيرت في فتح الصفقات
وكذلك نفس الشيء ببقية الدوال التي بها شرط الماجك نمبر

Waddah
14-08-2017, 10:25 AM
السلام عيكم
ما هو سبب استخدام هذا الشرط ؟
عموما حتى لو تم عمل هذا الشرط فسيحدث خلل تام بالاكسبيرت لأن الدوال الفرعية تعتمد على نفس الماجك نمبر لكل الأزواج وبالتالي سيستمر الاكسبيرت في فتح الصفقات
وكذلك نفس الشيء ببقية الدوال التي بها شرط الماجك نمبر

طيب ما هو الكود الصحيح لدالة عدد الصفقات المفعلة لزوج معين - وعدد الصفقات الإجمالية ........مع جزيل الشكر

reglement
14-08-2017, 02:13 PM
تحية لك
أريد كتابة عنوان البريد الالكتروني والاسم على الاكسبيرت لكي يظهر على الميتاتريدر ...وشكرا

shivaa
14-08-2017, 04:23 PM
السلام عليكم
استاذى kira-h
انا محتاج مساعده منك استاذى
فى عمل كود
انا شغال الان فى عمل اكسبيرت يعتمد على
استراتجيه خاصه
بعد التجربه الاكسبيرت وجته يعمل بكفاءه عندما يكون فى تزبزب
ولكن مع الاتجاه يدمر الحساب
فكرت اعمل هيدج بضرب لوت فى 2 للصفقات الخسرانه وبعد مسافه من النقط الدخول للصفقات الخسرانه
وكانت الصدمه هو تفعيل ثم الرجوع للخساره
فكرت اضيف مؤشر الدعم والمقاومه للاكسبيرت
للسف لم اتمكن
طلبى
مرفق المؤشر الدعم والمقاومه
اريد دمجه مع الاكسبيرت او استدعائه من الخارج
فى صوره شرح للمطلوب

اكون شكر لستاذى

kira-h
14-08-2017, 11:21 PM
طيب ما هو الكود الصحيح لدالة عدد الصفقات المفعلة لزوج معين - وعدد الصفقات الإجمالية ........مع جزيل الشكر

- دالة عدد الصفقات المفعلة بدلالة اسم الزوج كالتالي :


int Orderscnt(string symbol)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol&&OrderMagicNumber()==MagicNo)
{
cnt++;
}
}
}
return(cnt);
}


مثال :
Orderscnt("EURUSD");

- دالة إجمالي عدد الصفقات المفعلة كالتالي :

int TotalOrders()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
cnt++;
}
}
return(cnt);
}

kira-h
14-08-2017, 11:23 PM
تحية لك
أريد كتابة عنوان البريد الالكتروني والاسم على الاكسبيرت لكي يظهر على الميتاتريدر ...وشكرا
تقصد يظهر على الشارت
ستستخدم الكومنت بالدالة الرئيسية
مثال :

Comment("Programmed by Kira-h\nhassan.mb@hotmail.com\nwww.forexprog.com\nCopyr ight ©2017");

kira-h
14-08-2017, 11:30 PM
السلام عليكم
استاذى kira-h
انا محتاج مساعده منك استاذى
فى عمل كود
انا شغال الان فى عمل اكسبيرت يعتمد على
استراتجيه خاصه
بعد التجربه الاكسبيرت وجته يعمل بكفاءه عندما يكون فى تزبزب
ولكن مع الاتجاه يدمر الحساب
فكرت اعمل هيدج بضرب لوت فى 2 للصفقات الخسرانه وبعد مسافه من النقط الدخول للصفقات الخسرانه
وكانت الصدمه هو تفعيل ثم الرجوع للخساره
فكرت اضيف مؤشر الدعم والمقاومه للاكسبيرت
للسف لم اتمكن
طلبى
مرفق المؤشر الدعم والمقاومه
اريد دمجه مع الاكسبيرت او استدعائه من الخارج
فى صوره شرح للمطلوب

اكون شكر لستاذى



وعليكم السلام
دالة استدعاء المؤشر بدلالة قيم الأندكس (الألوان) كالتالي :

double SR(int index)
{
return(iCustom(Symbol(),0,"Support and Resistance",index,1));
}

فتكون الشروط كالتالي :

if(Close[1]>SR(0))//Open Buy
if(Close[1]<SR(1))//Open Sell

shivaa
14-08-2017, 11:45 PM
وعليكم السلام
دالة استدعاء المؤشر بدلالة قيم الأندكس (الألوان) كالتالي :

double SR(int index)
{
return(iCustom(Symbol(),0,"Support and Resistance",index,1));
}

فتكون الشروط كالتالي :

if(Close[1]>SR(0))//Open Buy
if(Close[1]<SR(1))//Open Sell

شاكر ليك
وجزاك الله خيرااااااااا

shivaa
14-08-2017, 11:46 PM
وعليكم السلام
دالة استدعاء المؤشر بدلالة قيم الأندكس (الألوان) كالتالي :

double SR(int index)
{
return(iCustom(Symbol(),0,"Support and Resistance",index,1));
}

فتكون الشروط كالتالي :

if(Close[1]>SR(0))//Open Buy
if(Close[1]<SR(1))//Open Sell

كيف اضيفه داخل الاكسبيرت
شاكر ليك
وجزاك الله خيرااااااااا

kira-h
15-08-2017, 01:26 AM
كيف اضيفه داخل الاكسبيرت
شاكر ليك
وجزاك الله خيرااااااااا
وإياك اخي
ستضيف الشروط إلى شروطك الخاصة الموجودة بالاكسبيرت
إذا الأمر صعب يمكنك أن ترفق الاكسبيرت للتصحيح

Waddah
16-08-2017, 10:50 AM
أستاذ حسن ... أقوم ببرمجة Dashboard لإستراتيجية معينة ....
أريد أن يتم تحديث البيانات كل ربع ساعة مثلا وليس كل تكة سعر حتى لا يثقل على المنصة كيف يتم هذا ؟
هل يمكن استخدام( )EventSetTimer - أين أضع هذه الدالة في Ontik أم في OnInti ?
مع جزيل الشكر

kira-h
16-08-2017, 06:16 PM
أستاذ حسن ... أقوم ببرمجة Dashboard لإستراتيجية معينة ....
أريد أن يتم تحديث البيانات كل ربع ساعة مثلا وليس كل تكة سعر حتى لا يثقل على المنصة كيف يتم هذا ؟
هل يمكن استخدام( )EventSetTimer - أين أضع هذه الدالة في Ontik أم في OnInti ?
مع جزيل الشكر
استخدم الشرط التالي :


datetime time;

if(time!=iTime(Symbol(),PERIOD_M15,0))
{
// محتوى الكود
time=iTime(Symbol(),PERIOD_M15,0);
}


وبهذا سيتم تحديث الاستراتيجية كل إغلاق شمعة ربع ساعة

fanfar
18-08-2017, 12:12 AM
السلام عليكم ورحمة الله وبركاته
اريد شرط لتحديد اقصى عمولة لو سمحتم ان كان موجوداً.

samizhraldeen
18-08-2017, 01:52 AM
السلام عليكم اخي كيرا اريد سؤالك عن ID
فان برنامج forex ea generator
يقول ضع ال ID
هكذا مكتوب بالجملة
C:/Users/Edit this/app data/roming/meta quotes/terminal/ID/mql4
ولا اعرف من اين احصل عليه
(ID)

sabil
18-08-2017, 11:02 AM
لدي سؤالين برمجيين مستر حسن
الاول : ازاي اخلي الاكسبرت مش يفتح شراء غير لما يكون اخر اوردر بيع والعكس مش يفتح بيع غير بعد اوردر شراء
دا طبعاً بعد ما يفتح الاوردر الاساسي

الثاني : ازاي اعمل ترخيص لمؤشر او اكسبرت يشتغل بمدة محددة ويقف

kira-h
18-08-2017, 05:25 PM
السلام عليكم ورحمة الله وبركاته
اريد شرط لتحديد اقصى عمولة لو سمحتم ان كان موجوداً.

وعليكم السلام
كيف ستستخدم هذا الشرط ؟
عموما يوجد وظيفة للعمولة ()OrderCommission

kira-h
18-08-2017, 05:26 PM
السلام عليكم اخي كيرا اريد سؤالك عن id
فان برنامج forex ea generator
يقول ضع ال id
هكذا مكتوب بالجملة
c:/users/edit this/app data/roming/meta quotes/terminal/id/mql4
ولا اعرف من اين احصل عليه
(id)

وعليكم السلام
هذا الموضوع مخصص فقط للأسئلة البرمجية للغة الـ mql4

kira-h
18-08-2017, 05:29 PM
لدي سؤالين برمجيين مستر حسن
الاول : ازاي اخلي الاكسبرت مش يفتح شراء غير لما يكون اخر اوردر بيع والعكس مش يفتح بيع غير بعد اوردر شراء
دا طبعاً بعد ما يفتح الاوردر الاساسي

الثاني : ازاي اعمل ترخيص لمؤشر او اكسبرت يشتغل بمدة محددة ويقف
السلام عليكم
هل الصفقة السابقة مغلقة أم مفتوحة، إذا كانت مغلقة فهل الصفقة الأساسية مفتوحة أم مغلقة ؟
بالنسبة لسؤالك الثاني
الترخيص يوضع ببداية الكود
مثال :

#property copyright "Copyright © 2017, Programmed by Kira-h"
#property link "hassan.mb@hotmail.com"
#property version "1.00"

وتاريخ الصلاحية ببداية الدالة الرئيسية كالتالي :

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}

fanfar
18-08-2017, 11:22 PM
في عملات عمولتها متغي وضع شرط اقصى عمولة تماما مثل تحديد اقصى اسبريد بكل حال سلمت يداك شكرا، و لدي طلب اخر لو سمحت اريد دالة تقوم بحفظ السعر الحالي لحظة تشغيل الاكسبيرت على الشارت مع شرط فتح صفقة بعد عدد نقاط محدد عن السعر المحفوظ.

sabil
19-08-2017, 12:35 AM
السلام عليكم
هل الصفقة السابقة مغلقة أم مفتوحة، إذا كانت مغلقة فهل الصفقة الأساسية مفتوحة أم مغلقة ؟
بالنسبة لسؤالك الثاني
الترخيص يوضع ببداية الكود
مثال :

#property copyright "Copyright © 2017, Programmed by Kira-h"
#property link "hassan.mb@hotmail.com"
#property version "1.00"

وتاريخ الصلاحية ببداية الدالة الرئيسية كالتالي :

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}


الاوامر كلها مباشرة سواء الاساسية او غيرها
بس مش عارف بردو لو انا عندي صفقتين بيع وشراء وبعدين ظهرت اشارة شراء لكن الصفقة الاخيرة كانت بيع (واتقفلت) هل هيقراها ولا لاء ؟

sabil
19-08-2017, 12:36 AM
السلام عليكم
هل الصفقة السابقة مغلقة أم مفتوحة، إذا كانت مغلقة فهل الصفقة الأساسية مفتوحة أم مغلقة ؟
بالنسبة لسؤالك الثاني
الترخيص يوضع ببداية الكود
مثال :

#property copyright "Copyright © 2017, Programmed by Kira-h"
#property link "hassan.mb@hotmail.com"
#property version "1.00"

وتاريخ الصلاحية ببداية الدالة الرئيسية كالتالي :

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}


الاوامر كلها مباشرة سواء الاساسية او غيرها
بس مش عارف بردو لو انا عندي صفقتين بيع وشراء وبعدين ظهرت اشارة شراء لكن الصفقة الاخيرة كانت بيع (واتقفلت) هل هيقراها ولا لاء ؟

kira-h
19-08-2017, 01:23 AM
الاوامر كلها مباشرة سواء الاساسية او غيرها
بس مش عارف بردو لو انا عندي صفقتين بيع وشراء وبعدين ظهرت اشارة شراء لكن الصفقة الاخيرة كانت بيع (واتقفلت) هل هيقراها ولا لاء ؟
ستقوم بعمل دالة فرعية لمعرفة نوع آخر صفقة مغلقة كالتالي:


int LastOrderType()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}


ثم تكون الشروط كلتالي :

if(LastOrderType()==OP_BUY)//OpenSell
if(LastOrderType()==OP_SELL)//OpenBuy

kira-h
19-08-2017, 01:29 AM
في عملات عمولتها متغي وضع شرط اقصى عمولة تماما مثل تحديد اقصى اسبريد بكل حال سلمت يداك شكرا، و لدي طلب اخر لو سمحت اريد دالة تقوم بحفظ السعر الحالي لحظة تشغيل الاكسبيرت على الشارت مع شرط فتح صفقة بعد عدد نقاط محدد عن السعر المحفوظ.
يمكنك ذلك باستخدام متغيرات الجلوبال Global Variables
مثال لحفظ السعر لحظة التشغيل:

int OnInit()
{
GlobalVariableSet(Symbol()+MagicNo,Bid);//حفظ السعر الحالي لحظة التشغيل
return(0);
}

ثم تقوم باستدعائها من خلال :

GlobalVariableGet(Symbol()+MagicNo);

sabil
19-08-2017, 03:44 PM
ستقوم بعمل دالة فرعية لمعرفة نوع آخر صفقة مغلقة كالتالي:


int LastOrderType()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}


ثم تكون الشروط كلتالي :

if(LastOrderType()==OP_BUY)//OpenSell
if(LastOrderType()==OP_SELL)//OpenBuy

اخر صفقة مفتوحة او مغلقة وليست مغلقة فقط اخي حسن

kira-h
19-08-2017, 04:19 PM
اخر صفقة مفتوحة او مغلقة وليست مغلقة فقط اخي حسن

ستقوم بما يلي :


int Orderscnt(int type=-1)//عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

int LastOrderType()//نوع آخر صفقة مغلقة
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

int LastCurrentType()//نوع آخر صفقة مفتوحة
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

if((Orderscnt()==0&&LastOrderType()==OP_BUY)||(Orderscnt()>0&&LastCurrentType()==OP_BUY))//OpenSell
if((Orderscnt()==0&&LastOrderType()==OP_SELL)||(Orderscnt()>0&&LastCurrentType()==OP_SELL))//OpenBuy

sabil
19-08-2017, 08:52 PM
ستقوم بما يلي :


int Orderscnt(int type=-1)//عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

int LastOrderType()//نوع آخر صفقة مغلقة
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

int LastCurrentType()//نوع آخر صفقة مفتوحة
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

if((Orderscnt()==0&&LastOrderType()==OP_BUY)||(Orderscnt()>0&&LastCurrentType()==OP_BUY))//OpenSell
if((Orderscnt()==0&&LastOrderType()==OP_SELL)||(Orderscnt()>0&&LastCurrentType()==OP_SELL))//OpenBuy


اخي حسن حضرتك لغبطتني
طيب خلينا في الصفقات المفتوحة فقط
عايز دالة اخر صفقة مفتوحة فقط

fanfar
19-08-2017, 09:36 PM
حاولت كتابة الشروط لكن لا يزال هناك اخطاء، يرجى مراجعة الكود و تصحيح الأخطاء لو سمحت اخي

sal_moh85
20-08-2017, 10:50 AM
سلام عليكم اخ حسن كير ارجوا المساعده في كتابة كود revers
مثال عشان توضح الفكره
ظهرة اشارة شراء اكسبريت اشترى بس ضرب الستوب لوز (عاوز كود يفتح مباشرصفقة بيع طبعا بدون نظر لي شروط البيع )يعني اول ما يضرب ستوب مباشر يفعل صفقه معاكسه بي تفس ستوب لوز وبي نفس تيك بروفيت
وفي حال صفقة شراء جابت الهدف يتم عم يستنى اشاراة الدخول في بيع وفي شراء
وشكرا

Waddah
20-08-2017, 03:56 PM
السلام عليكم : كيف أجعل الإكسبرت يقراء الأزواج الموجودة في الماركت ووتش والقابلة للتجارة ( بدلا من عمل مصفوفة أزواج لإكسبرت متعدد الأزواج ) الفكرة ان الماركت ووتش هو مصفوفة جاهزة لماذا لا أقراء منه مباشرة ؟؟؟؟ هل يمكن هذا ؟

kira-h
20-08-2017, 07:05 PM
حاولت كتابة الشروط لكن لا يزال هناك اخطاء، يرجى مراجعة الكود و تصحيح الأخطاء لو سمحت اخي

تم التصحيح بالنسخة المرفقة

kira-h
20-08-2017, 07:23 PM
السلام عليكم : كيف أجعل الإكسبرت يقراء الأزواج الموجودة في الماركت ووتش والقابلة للتجارة ( بدلا من عمل مصفوفة أزواج لإكسبرت متعدد الأزواج ) الفكرة ان الماركت ووتش هو مصفوفة جاهزة لماذا لا أقراء منه مباشرة ؟؟؟؟ هل يمكن هذا ؟
وعليكم السلام
يمكن معرفة الأزواج الموجودة بالماركت واتش

int start()
{
string ListSymbols="";
for(int i=0;i<SymbolsTotal(true);i++)
{
ListSymbols=StringConcatenate(ListSymbols,SymbolNa me(i,true),"\n");
}
Comment(ListSymbols);
return(0);
}

صياد الجراح
20-08-2017, 07:44 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية من القلب

باذن الله تعالى .. نويت اتعلم لغة mql4 .. وعشان اتعلم البرمجة مش حتجى معايا بالكلام النظرى الكتير .. حزهق منها بسرعة
وانا بلف كده لاقيت برمجة نفس المؤشر بطرق مختلفة لاكتر من مبرمج .. وحيحصل لى تشتت بينهم

عشان كده قررت اركز مع شرح حضرتك وشرح استاذ حكيم فقط لانه شرح دخال عملى على طول .. والرجوع والمتابعة مع حضرتك فى التطبيق والاسئلة

.
.

بعد اول يوم لى مع البرمجة والتركيز فى عمل المؤشرات فقط فى البداية :-

حنبدء نعمل مؤشر يظهر اسهم لتقاطع 2 موفينج مع بعض مع تنبه كتابى باسم العملة والفريم .. وحنمشى بالتسلسل الاتى :-

1- عمل مؤشر لاظهار تنبه عند تقاطع 2 موفينج
2- اضافة اسم العملة والفريم للتنبه
3- أظهار الاسهم على الشارت بعد التقاطع
4- تطيبق عملى لنفس الطريقة على مؤشرات اخرى

أولا :- عمل مؤشر لتنبه عند تقاطع 2 موفينج مع اغلاق الشمعة 1
بدون متغيرات خارجية

وعند المحاولة

ظهر لى هذا الخطأ .. ماذا يعنى ..

2682

- حابب افهم معنى الخطا عشان لو ظهر تانى فى اى وقت يكون عندى دراى بالمعنى

ملحوظة

-انا حابب افتح موضوع خاص بى خارج موضوع الاسئلة البرمجية لعدم التشتت فقط واكون ماشى بتسلسل اقدر ارجع له اى وقت وحضرتك تابع معايا فيه ..
- لو سمحت لى بفتح موضوع مستقل ..سوف اقوم بفتح الموضوع مباشرة

.
.

لك ودى وتقديرى

sal_moh85
20-08-2017, 07:59 PM
افتراضي
سلام عليكم اخ حسن كير ارجوا المساعده في كتابة كود revers
مثال عشان توضح الفكره
ظهرة اشارة شراء اكسبريت اشترى بس ضرب الستوب لوز (عاوز كود يفتح مباشرصفقة بيع طبعا بدون نظر لي شروط البيع )يعني اول ما يضرب ستوب مباشر يفعل صفقه معاكسه بي تفس ستوب لوز وبي نفس تيك بروفيت
وفي حال صفقة شراء جابت الهدف يتم عم يستنى اشاراة الدخول في بيع وفي شراء

kira-h
20-08-2017, 08:04 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية من القلب

باذن الله تعالى .. نويت اتعلم لغة mql4 .. وعشان اتعلم البرمجة مش حتجى معايا بالكلام النظرى الكتير .. حزهق منها بسرعة
وانا بلف كده لاقيت برمجة نفس المؤشر بطرق مختلفة لاكتر من مبرمج .. وحيحصل لى تشتت بينهم

عشان كده قررت اركز مع شرح حضرتك وشرح استاذ حكيم فقط لانه شرح دخال عملى على طول .. والرجوع والمتابعة مع حضرتك فى التطبيق والاسئلة

.
.

بعد اول يوم لى مع البرمجة والتركيز فى عمل المؤشرات فقط فى البداية :-

حنبدء نعمل مؤشر يظهر اسهم لتقاطع 2 موفينج مع بعض مع تنبه كتابى باسم العملة والفريم .. وحنمشى بالتسلسل الاتى :-

1- عمل مؤشر لاظهار تنبه عند تقاطع 2 موفينج
2- اضافة اسم العملة والفريم للتنبه
3- أظهار الاسهم على الشارت بعد التقاطع
4- تطيبق عملى لنفس الطريقة على مؤشرات اخرى

أولا :- عمل مؤشر لتنبه عند تقاطع 2 موفينج مع اغلاق الشمعة 1
بدون متغيرات خارجية

وعند المحاولة

ظهر لى هذا الخطأ .. ماذا يعنى ..

2682

- حابب افهم معنى الخطا عشان لو ظهر تانى فى اى وقت يكون عندى دراى بالمعنى

ملحوظة //
انا حابب افتح موضوع خاص بى خارج موضوع الاسئلة البرمجةلعدم التشتت فقط واكون ماشى بتسلسل اقدر ارجع له اى وقت وحضرتك تابع معايا فيه ..
- لو سمحت لى بفتح موضوع مستقل ..سوف اقوم بفتح الموضوع مباشرة

.
.

لك ودى وتقديرى

السلام عليكم
اخي بداية لن تتمكن من البرمجة دون تعلم الأساسيات يعني النظري مهم جدا،
أما عن التطبيقي يأتي مع الخبرة المتراكمة وذلك بمراجعة المشاكل والحلول البرمجية ، ثم مراجعة أكواد من هم أكثر خبرة منك، ومع مرور الزمن تجد نفسك اكتسبت الكثير من المهارات تلقائيا
أما بالنسبة لموضوع برمجي خاص بك فهذا صعب متابعته، وعموما يمكنك طرح أي سؤال برمجي هنا بالموضوع ثم تحفظها بالمفضلة أو نسخها بملف خارجي حتى تستطيع العودة إليها
بالنسبة للخطأ أن الدالة OnCalculate غير موجودة وهي الأساسية لعمل الشروط بها
بالتوفيق إن شاء الله

sal_moh85
20-08-2017, 08:14 PM
افتراضي
سلام عليكم اخ حسن كير ارجوا المساعده في كتابة كود revers
مثال عشان توضح الفكره
ظهرة اشارة شراء اكسبريت اشترى بس ضرب الستوب لوز (عاوز كود يفتح مباشرصفقة بيع طبعا بدون نظر لي شروط البيع )يعني اول ما يضرب ستوب مباشر يفعل صفقه معاكسه بي تفس ستوب لوز وبي نفس تيك بروفيت
وفي حال صفقة شراء جابت الهدف يتم عم يستنى اشاراة الدخول في بيع وفي شراء

kira-h
20-08-2017, 08:50 PM
افتراضي
سلام عليكم اخ حسن كير ارجوا المساعده في كتابة كود revers
مثال عشان توضح الفكره
ظهرة اشارة شراء اكسبريت اشترى بس ضرب الستوب لوز (عاوز كود يفتح مباشرصفقة بيع طبعا بدون نظر لي شروط البيع )يعني اول ما يضرب ستوب مباشر يفعل صفقه معاكسه بي تفس ستوب لوز وبي نفس تيك بروفيت
وفي حال صفقة شراء جابت الهدف يتم عم يستنى اشاراة الدخول في بيع وفي شراء

وعليكم السلام
ستقوم بعمل دالة فرعية (بمعنى خارج الدوال الرئيسية) لمعرفة نتيجة آخر صفقة مغلقة كالتالي :


double LastOrderProfit(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
return(pt);
}
}
}
return(0);
}


وتقوم بعمل دالة فرعية لمعرفة توقيت إغلاق آخر صفقة كالتالي:

datetime LastOrderTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
datetime cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
return(cm);
}
}
}
return(0);
}

ودالة فرعية لمعرفة نوع آخر صفقة مغلقة كالتالي :

double LastOrderType()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

ودالة حساب عدد الصفقات المفعلة كالتالي:

int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

ثم تكون الشروط بالدالة الرئيسية كالتالي :


if(Orderscnt()==0&&LastOrderProfit()<0&&LastOrderTime()>=Time[1])
{
if(LastOrderType()==OP_BUY)//OpenSell

if(LastOrderType()==OP_SELL)//OpenBuy
}

صياد الجراح
20-08-2017, 10:07 PM
السلام عليكم
اخي بداية لن تتمكن من البرمجة دون تعلم الأساسيات يعني النظري مهم جدا،
أما عن التطبيقي يأتي مع الخبرة المتراكمة وذلك بمراجعة المشاكل والحلول البرمجية ، ثم مراجعة أكواد من هم أكثر خبرة منك، ومع مرور الزمن تجد نفسك اكتسبت الكثير من المهارات تلقائيا
أما بالنسبة لموضوع برمجي خاص بك فهذا صعب متابعته، وعموما يمكنك طرح أي سؤال برمجي هنا بالموضوع ثم تحفظها بالمفضلة أو نسخها بملف خارجي حتى تستطيع العودة إليها
بالنسبة للخطأ أن الدالة OnCalculate غير موجودة وهي الأساسية لعمل الشروط بها
بالتوفيق إن شاء الله

ربنا يبارك اخى حسن

اكيد طبعا النظرى مهم ولكن نظرى حيكون جزء جزء مع التطيبق اول باول ..

انا اليوم اتعرفت على صيغة كتابة دوال الاوامر واستدعاء الاوامر من المنصة والمؤشرات الخارجية وبديت بالفعل بالتطيبق على مؤشر بسيط لتقاطع الموفينج وبعد ما انتهى منه حبدء اطبقه على مؤشرات اخرى تكون عبارة عن تقاطع خطين زى الاستوك وtdi .. وبعدها انقل على نوع اخر من المؤشرات

انا الان وصلت لهذه المرحلة والمؤشر اشتغل على الشارت ولكن لا تظهر الاسهم

2684

الكود البرمجى مرفق

ياريت حضرتك تصلح لى الكود .. للمؤشر يظهر اسهم عند تقاطع 2 موفينج مع ظهور تنبه كتابى شراء او بيع

وانا اقارن واعرف المشكلة فين

تحياتى

sabil
21-08-2017, 03:08 PM
ستقوم بما يلي :


int Orderscnt(int type=-1)//عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

int LastOrderType()//نوع آخر صفقة مغلقة
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

int LastCurrentType()//نوع آخر صفقة مفتوحة
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();

if(sy==Symbol()&&mn==MagicNo)
{
return(ty);
}
}
return(0);
}

if((Orderscnt()==0&&LastOrderType()==OP_BUY)||(Orderscnt()>0&&LastCurrentType()==OP_BUY))//OpenSell
if((Orderscnt()==0&&LastOrderType()==OP_SELL)||(Orderscnt()>0&&LastCurrentType()==OP_SELL))//OpenBuy


عملت التعديل ده
ولكن بردو الاكسبرت مش شغال زي ما انا عايز

لذلك انا عايز اشتغل على الصفقات المفتوحة فقط وليس المغلقة ربما تحل المشكلة دي

kira-h
21-08-2017, 04:32 PM
عملت التعديل ده
ولكن بردو الاكسبرت مش شغال زي ما انا عايز

لذلك انا عايز اشتغل على الصفقات المفتوحة فقط وليس المغلقة ربما تحل المشكلة دي

كل الحلول التي اقترحتها عليك صحيحة
الان تريد فقط متابعة الصفقة المفتوحة ستستخدم الجزء الأخير من الشروط فقط
يعني :


if(Orderscnt()>0&&LastCurrentType()==OP_BUY)//OpenSell
if(Orderscnt()>0&&LastCurrentType()==OP_SELL)//OpenBuy

الكود معناه إذا كان في صفقات مفتوحة وآخر صفقة شراء افتح بيع، وإذا آخر صفقة بيع افتح شراء

kira-h
21-08-2017, 05:50 PM
ربنا يبارك اخى حسن

اكيد طبعا النظرى مهم ولكن نظرى حيكون جزء جزء مع التطيبق اول باول ..

انا اليوم اتعرفت على صيغة كتابة دوال الاوامر واستدعاء الاوامر من المنصة والمؤشرات الخارجية وبديت بالفعل بالتطيبق على مؤشر بسيط لتقاطع الموفينج وبعد ما انتهى منه حبدء اطبقه على مؤشرات اخرى تكون عبارة عن تقاطع خطين زى الاستوك وtdi .. وبعدها انقل على نوع اخر من المؤشرات

انا الان وصلت لهذه المرحلة والمؤشر اشتغل على الشارت ولكن لا تظهر الاسهم

الكود البرمجى مرفق

ياريت حضرتك تصلح لى الكود .. للمؤشر يظهر اسهم عند تقاطع 2 موفينج مع ظهور تنبه كتابى شراء او بيع

وانا اقارن واعرف المشكلة فين

تحياتى

حتى تكون الاستفاذة عامة، تم عمل مثال تطبيقي مع الشرح بالموضوع المخصص للتطبيقات من هنا :
مثال تطبيقي لعمل مؤشر اسهم لتقاطع موفينجين (http://www.fxprg.com/vb/showthread.php?t=31456&p=871631&viewfull=1#post871631)

sabil
21-08-2017, 08:05 PM
كل الحلول التي اقترحتها عليك صحيحة
الان تريد فقط متابعة الصفقة المفتوحة ستستخدم الجزء الأخير من الشروط فقط
يعني :


if(Orderscnt()>0&&LastCurrentType()==OP_BUY)//OpenSell
if(Orderscnt()>0&&LastCurrentType()==OP_SELL)//OpenBuy

الكود معناه إذا كان في صفقات مفتوحة وآخر صفقة شراء افتح بيع، وإذا آخر صفقة بيع افتح شراء

شكرا يا برنس
جاري التجربة ...

Waddah
21-08-2017, 09:40 PM
السلام عليكم أستاذ .... كيف أجعل الإكسبرت يقرأ آخر إشارة من مؤشر ما وليس التي حدثت في الشمعة السابقة : مثلا أريد للإكسبرت أن يحدد أن آخر تقاطع للستوكاستيك كان هابط قد يكون من 4 او عشر شمعات سابقة .....

sabil
22-08-2017, 03:03 PM
للاسف الكود لا يعمل بشكل جيد
انظر الى الصورة المرفقة
ستجد ان عدد صفقات الشراء اكثر بثلاثة اضعاف البيع رغم ان المفروض يبقوا متعادلين او واحدة تكون ازيد بفارق صفقة واحدة فقط

بجانب ان الاكسبرت فتح صفقتين شراء ورا بعض بعد تكرار شروط الدخول والمفروض يفتح شراء واحد فقط ومش يفتح تاني مهما اتوفرت الشروط غير لما يفتح صفقة بيع عند توافر شروط البيع

kira-h
22-08-2017, 06:09 PM
للاسف الكود لا يعمل بشكل جيد
انظر الى الصورة المرفقة
ستجد ان عدد صفقات الشراء اكثر بثلاثة اضعاف البيع رغم ان المفروض يبقوا متعادلين او واحدة تكون ازيد بفارق صفقة واحدة فقط

بجانب ان الاكسبرت فتح صفقتين شراء ورا بعض بعد تكرار شروط الدخول والمفروض يفتح شراء واحد فقط ومش يفتح تاني مهما اتوفرت الشروط غير لما يفتح صفقة بيع عند توافر شروط البيع

الكود سليم أخي، لكنك لم توظفه بالطريقة الصحيحة حسب ما تريد
اشرح الفكرة كاملة وارفق الاكسبيرت للتصحيح

sabil
22-08-2017, 06:39 PM
الكود سليم أخي، لكنك لم توظفه بالطريقة الصحيحة حسب ما تريد
اشرح الفكرة كاملة وارفق الاكسبيرت للتصحيح

مرفق صورة ...

صياد الجراح
22-08-2017, 11:28 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية طيبة

ماذا يكون معنى هذا الخطأ ..

2721

السطر الموجود فيه الخطأ مكتوب بهذا الشكل

2722

تحياتى

kira-h
23-08-2017, 12:01 AM
مرفق صورة ...
الصورة غير كافية

kira-h
23-08-2017, 12:04 AM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية طيبة

ماذا يكون معنى هذا الخطأ ..

2721

السطر الموجود فيه الخطأ مكتوب بهذا الشكل

2722

تحياتى
معناه ان المتغير FastMa1 غير معرف، يعني لم تعرفه عن إذا عدد عشري double أو عدد صحيح int أو كومنت string أو لون color أو توقيت datetime ...
وبما أن FastMa1 تعريف لقيمة موفينج ستكون عبارة عن عدد عشري، يعني ستضع قبلها double

صياد الجراح
23-08-2017, 12:55 AM
معناه ان المتغير FastMa1 غير معرف، يعني لم تعرفه عن إذا عدد عشري double أو عدد صحيح int أو كومنت string أو لون color أو توقيت datetime ...
وبما أن FastMa1 تعريف لقيمة موفينج ستكون عبارة عن عدد عشري، يعني ستضع قبلها double

بسم الله الرحمن الرحيم

بارك الله فيك اخى حسن

هو معرف بالفعل فى الكود مثل ماهو واضح بالصورة

2725

الكود مرفق

بعد اذنك معالجته وكتابه ما تم فعله بالظبط عشان اقدر افهم ماذا حدث .. لاى وقت اخر يظهرفيه نفس الخطأ معايا

.
.

لك ودى وتقديرى

صياد الجراح
23-08-2017, 01:39 AM
بسم الله الرحمن الرحيم

بارك الله فيك اخى حسن

هو معرف بالفعل فى الكود مثل ماهو واضح بالصورة

2725

الكود مرفق

بعد اذنك معالجته وكتابه ما تم فعله بالظبط عشان اقدر افهم ماذا حدث .. لاى وقت اخر يظهرفيه نفس الخطأ معايا

.
.

لك ودى وتقديرى

الف شكر استاذ حسن

تم معالجة الخطأ وكان الخطأ عدم وجود علامة { قبل المعرف

لك ودى وتقديرى

kira-h
23-08-2017, 05:12 AM
الف شكر استاذ حسن

تم معالجة الخطأ وكان الخطأ عدم وجود علامة { قبل المعرف

لك ودى وتقديرى

نعم صحيح وهذا الخطأ يظهر فقط عند استخدام التحليل الدقيق للكود

#property strict

وايضا في خطأ تقني بالشروط بحيث الشرط الزمني مكرر احذفه واجعل الكود هكذا :

if(OP_Alert)
{
if(nam_B=="BUY")
{

if(Time0 != Time[0]){ Time0 = Time[0];Alert("BUY"," ",Symbol()," ",Ask," ",Period(),("MIN"));
SendNotification("MA1"+" "+Symbol()+" "+" BUY"+" "+DoubleToStr(Ask,Digits)+" "+"Equity"+" "+DoubleToStr(AccountEquity(), 2)+" "+"Balance"+" "+DoubleToStr(AccountBalance(), 2));
}tag=Time[0];

}
if(nam_S=="SELL")
{
if (Time0 != Time[0]){ Time0 = Time[0];Alert("SELL"," ",Symbol()," ",Bid," ",Period(),("MIN"));
SendNotification("MA1"+" "+Symbol()+" "+" SELL"+" "+DoubleToStr(Bid,Digits)+" "+"Equity"+" "+DoubleToStr(AccountEquity(), 2)+" "+"Balance"+" "+DoubleToStr(AccountBalance(), 2));
}

}
}
}

صياد الجراح
23-08-2017, 04:37 PM
نعم صحيح وهذا الخطأ يظهر فقط عند استخدام التحليل الدقيق للكود

#property strict

وايضا في خطأ تقني بالشروط بحيث الشرط الزمني مكرر احذفه واجعل الكود هكذا :

if(OP_Alert)
{
if(nam_B=="BUY")
{

if(Time0 != Time[0]){ Time0 = Time[0];Alert("BUY"," ",Symbol()," ",Ask," ",Period(),("MIN"));
SendNotification("MA1"+" "+Symbol()+" "+" BUY"+" "+DoubleToStr(Ask,Digits)+" "+"Equity"+" "+DoubleToStr(AccountEquity(), 2)+" "+"Balance"+" "+DoubleToStr(AccountBalance(), 2));
}tag=Time[0];

}
if(nam_S=="SELL")
{
if (Time0 != Time[0]){ Time0 = Time[0];Alert("SELL"," ",Symbol()," ",Bid," ",Period(),("MIN"));
SendNotification("MA1"+" "+Symbol()+" "+" SELL"+" "+DoubleToStr(Bid,Digits)+" "+"Equity"+" "+DoubleToStr(AccountEquity(), 2)+" "+"Balance"+" "+DoubleToStr(AccountBalance(), 2));
}

}
}
}

بسم الله الرحمن الرحيم

بارك الله فيك استاذ حسن ..

بعض التوضيحات فقط اخى حسن بعد اذنك :-

1- فى حالة حذف كود التحليل الدقيق #property strict ..هل يؤثر على عمل المؤشر او الاكسيبرت ؟

2- الخطا التقنى للشرط الزمنى TIME=0 انه مكرر .. هل لانه موجود بالفعل فى المتغيرات الداخلية ؟ ام تقصد شئ اخر

3- ماهو الفرق بين دالة start .. ودالة OnCalculate ؟

لك ودى وتقديرى لشخصك الكريم

kira-h
23-08-2017, 05:31 PM
بسم الله الرحمن الرحيم

بارك الله فيك استاذ حسن ..

بعض التوضيحات فقط اخى حسن بعد اذنك :-

1- فى حالة حذف كود التحليل الدقيق #property strict ..هل يؤثر على عمل المؤشر او الاكسيبرت ؟ جرب وستعلم الجواب بنفسك

2- الخطا التقنى للشرط الزمنى TIME=0 انه مكرر .. هل لانه موجود بالفعل فى المتغيرات الداخلية ؟ ام تقصد شئ اخر لأنه يوجد شرط زمني آخر قبل شرط التنبيه

3- ماهو الفرق بين دالة start .. ودالة OnCalculate ؟

لك ودى وتقديرى لشخصك الكريم
3- لا يوجد فرق كبير في الدوال الاساسية فهي نفس الشيئ باستثناء دالة OnCalculate بها العديد من الاستخدامات لتقوم بالدور التحليلي

int OnCalculate (const int rates_total, // size of input time series
const int prev_calculated, // bars handled in previous call
const datetime& time[], // Time
const double& open[], // Open
const double& high[], // High
const double& low[], // Low
const double& close[], // Close
const long& tick_volume[], // Tick Volume
const long& volume[], // Real Volume
const int& spread[] // Spread
);

كما تلاحظ فإن الدالة تحتوي العديد من الوظائف المعرفة مسبقاً حتى تسهل عليك ما تقوم به من تحليل، وبشكل مبسط هي على الترتيب:
- rates_total هي عدد الشموع الاجمالي على لشارت الحالي التي يستطيع المؤشر التعامل معها والتحليل عليها
- prev_calculated عندما يبدأ مؤشرك في عمله وبعد اول حركة للسعر تصبح prev_calculated هي القيمة التي تعود عليك عند استدعاء دالة OnCalculate وهي تعنى بمتابعة التحديثات الدائمة لاي حركة سعرية
- باقي البارمترات هي مصفوفات معرفة مسبقاً في لغة mql4 وتحتوي على معلومات اعلى / ادني سعر وقت غلاق وفتح الشموع وما الى ذلك ..

sabil
25-08-2017, 04:09 AM
الصورة غير كافية
مرفق الاكسبرت
اتمنى التعديل
واسف ع التأخير

صياد الجراح
25-08-2017, 03:47 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية من القلب

تم الانتهاء من عمل اول مؤشر والتطيبق عليه بعمل اكثر من مؤشر

سوف اقوم بطرح كل التطيبقات فى موضوع مستقل باذن الله تعالى

حنصعب الموضوع عليا شوية ونبدء نتعامل ونضيف المستويات الخطية واستخدامها فى الشروط

انا قمت ببرمجة مؤشر الاستوك كاسهم .. ( الرجاء التصحيح لو هناك اخطاء فى البرمجة )

عاوز ازود المستويات له بحيث :-

لا تظهر الاسهم الشرائية الا اذا كان التقاطع تحت مستوى 50 مثلا
ولا تظهر الاسهم البيعية الا اذا التقاطع فوق مستوى 60 مثلا

مع اضافات المستويين( upline - downline) الى الاعدادات الخارجية لتغييرهم يدويا ..

المؤشر مرفق

.
.

لك ودى وتقديرى

kira-h
25-08-2017, 05:33 PM
مرفق الاكسبرت
اتمنى التعديل
واسف ع التأخير

تم التصحيح بالنسخة المرفقة

kira-h
25-08-2017, 05:37 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية من القلب

تم الانتهاء من عمل اول مؤشر والتطيبق عليه بعمل اكثر من مؤشر

سوف اقوم بطرح كل التطيبقات فى موضوع مستقل باذن الله تعالى

حنصعب الموضوع عليا شوية ونبدء نتعامل ونضيف المستويات الخطية واستخدامها فى الشروط

انا قمت ببرمجة مؤشر الاستوك كاسهم .. ( الرجاء التصحيح لو هناك اخطاء فى البرمجة )

عاوز ازود المستويات له بحيث :-

لا تظهر الاسهم الشرائية الا اذا كان التقاطع تحت مستوى 50 مثلا
ولا تظهر الاسهم البيعية الا اذا التقاطع فوق مستوى 60 مثلا

مع اضافات المستويين( upline - downline) الى الاعدادات الخارجية لتغييرهم يدويا ..

المؤشر مرفق

.
.

لك ودى وتقديرى

مرفق المؤشر
بالتوفيق إن شاء الله

صياد الجراح
25-08-2017, 06:59 PM
مرفق المؤشر
بالتوفيق إن شاء الله

بارك الله فيك اخى حسن .. الف شكر

هذه النقطة كده تمام .. مفهومة الحمد لله

قبل ما اسيب الاستوك واروح اطبق على مؤشرات اخرى

استفسار بسيط ..

- اذا انا عاوز اتعامل مع خط واحد فقط من الخطين بمعنى ..

مثالا / لو عاوز اخلى المؤشر يظهر السهم لما الخط السريع فقط يكون فوق مستوى 70 يرسم السهم الهابط
تحت مستوى 30 يرسم سهم صاعد .. (ولا علاقة لنا بالخط البطى او تقاطع الخطين )

الاستفسار :-

هل فى هذه الحالة اتعامل مع استدعاء دالة الاستوك عادى ..

وبعدها اعطى شروط ظهور السهم على اساس اسم الخط السريع mode_main

ولا اعطى شروط ظهور السهم على اساس القيمة kperiod .. ؟

.
.

لك ودى وتقديرى

kira-h
25-08-2017, 09:21 PM
بارك الله فيك اخى حسن .. الف شكر

هذه النقطة كده تمام .. مفهومة الحمد لله

قبل ما اسيب الاستوك واروح اطبق على مؤشرات اخرى

استفسار بسيط ..

- اذا انا عاوز اتعامل مع خط واحد فقط من الخطين بمعنى ..

مثالا / لو عاوز اخلى المؤشر يظهر السهم لما الخط السريع فقط يكون فوق مستوى 70 يرسم السهم الهابط
تحت مستوى 30 يرسم سهم صاعد .. (ولا علاقة لنا بالخط البطى او تقاطع الخطين )

الاستفسار :-

هل فى هذه الحالة اتعامل مع استدعاء دالة الاستوك عادى ..

وبعدها اعطى شروط ظهور السهم على اساس اسم الخط السريع mode_main

ولا اعطى شروط ظهور السهم على اساس القيمة kperiod .. ؟

.
.

لك ودى وتقديرى

ستستخدم فقط الجزء الذي قمت بإضافته بالشروط وتحذف شروط المقارنة

صياد الجراح
26-08-2017, 12:12 AM
ستستخدم فقط الجزء الذي قمت بإضافته بالشروط وتحذف شروط المقارنة
بسم الله الرحمن الرحيم

بارك الله فيك اخى حسن ..

تم التنفيذ بنجاح .. الحمد لله

حقوم بالتطيبق اليوم على اكتر من مؤشر أخر ..

وسوف أعود لك مرة اخرى فى طلب تطيبق جديد على نوع اخر من المؤشرات باذن الله تعالى ..

.
.

لك ودى وتقديرى لشخصك الكريم

kira-h
26-08-2017, 04:47 PM
بسم الله الرحمن الرحيم

بارك الله فيك اخى حسن ..

تم التنفيذ بنجاح .. الحمد لله

حقوم بالتطيبق اليوم على اكتر من مؤشر أخر ..

وسوف أعود لك مرة اخرى فى طلب تطيبق جديد على نوع اخر من المؤشرات باذن الله تعالى ..

.
.

لك ودى وتقديرى لشخصك الكريم

بالتوفيق إن شاء الله

kuyt2017
26-08-2017, 11:05 PM
شكرا جدا على مساعدة الاعضاء بالدوال المفيدة
عندى طلب لو سمحت لو امكن حضرتك تفيدنى
عاوز دالة المضاعفات العادية وهى كل مثلا 15 نقطه يفتح صفقة ضعف الى قبلها او مره ونص قد اللى قبلها وطريقة اضافتها فى الاكسبرت
كمان دالة ايقاف الاكسبرت قبل الاخبار المهمه للزوجين المفتوحين على الشارت ب 30 دقيقة مثلا
وشكرا جدا

fanfar
27-08-2017, 02:38 AM
السلام عليكم و كل عام و حضرتك و كل اعضاء المنتدى بخير
اخي الاكسبيرت يعمل بشكل جيد الف شكر، لكنه يحفظ سعر البدايه فقط، لو سمحت اريد ان يحفظ السعر الحالي لما يشتغل و بعدها يحفظ سعر الاهداف سواء كانت تيك بروفيت ا بريك ايفن او تريلينج ستوب، هل يمكن ان تعدله لو سمحت.

sabil
27-08-2017, 04:11 PM
تم التصحيح بالنسخة المرفقة

الف شكر ياغالي
جاري التجربة عند افتتاح السوق

kira-h
27-08-2017, 05:17 PM
السلام عليكم و كل عام و حضرتك و كل اعضاء المنتدى بخير
اخي الاكسبيرت يعمل بشكل جيد الف شكر، لكنه يحفظ سعر البدايه فقط، لو سمحت اريد ان يحفظ السعر الحالي لما يشتغل و بعدها يحفظ سعر الاهداف سواء كانت تيك بروفيت ا بريك ايفن او تريلينج ستوب، هل يمكن ان تعدله لو سمحت.
وعليكم السلام
هذا الموضوع مخصص فقط للأسئلة البرمجية
لكن يمكنك فتح موضوع جديد تشرح فيه المطلوب بالتفصيل مع الصور

kira-h
27-08-2017, 05:18 PM
الف شكر ياغالي
جاري التجربة عند افتتاح السوق

العفو اخي الكريم

kira-h
27-08-2017, 05:21 PM
شكرا جدا على مساعدة الاعضاء بالدوال المفيدة
عندى طلب لو سمحت لو امكن حضرتك تفيدنى
عاوز دالة المضاعفات العادية وهى كل مثلا 15 نقطه يفتح صفقة ضعف الى قبلها او مره ونص قد اللى قبلها وطريقة اضافتها فى الاكسبرت
كمان دالة ايقاف الاكسبرت قبل الاخبار المهمه للزوجين المفتوحين على الشارت ب 30 دقيقة مثلا
وشكرا جدا
العفو أخي
بالنسبة للمضاعفات ستقوم بعمل التالي :
ستقوم بعمل دالة تستخرج سعر أو لوت او ربح آخر صفقة مفتوحة بدلالة نوعها كالتالي:


double LastOrder(string info,int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Price")return(op);
}
}
}
return(0);
}


ودالة لحساب عدد الصفقات بدلالة نوعها كالتالي :



int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


ثم تكون الشروط كالتالي :

if(Orderscnt(OP_BUY)==0)double NewLotsB=Lots;//حجم عقود الشراء
if(Orderscnt(OP_BUY)>0&&LastOrder("Profit",OP_BUY)<0)NewLotsB=LastOrder("Lots",OP_BUY)*2;//مضاعفات الضرب لاخر صفقة خاسرة

if(Orderscnt(OP_BUY)==0||(Orderscnt(OP_BUY)>0&&Ask<=LastOrder("Price",OP_BUY)-150*Point))//شروط عقود الشراء
{
int tk=OrderSend(Symbol(),OP_BUY,NewLotsB,NormalizeDou ble(Ask,Digits),30,0,0,"",MagicNo,0,Blue);
}
وبنفس الطريقة تضع شروط مضاعفات صفقات البيع

أما دالة ايقاف الاكسبيرت عند توقيت معين (وقت الأخبار) ستستخدم الشروط التالية ببداية الدالة الرئيسية OnTick :

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))return;

kuyt2017
27-08-2017, 08:00 PM
العفو أخي
بالنسبة للمضاعفات ستقوم بعمل التالي :
ستقوم بعمل دالة تستخرج سعر أو لوت او ربح آخر صفقة مفتوحة بدلالة نوعها كالتالي:


double LastOrder(string info,int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Price")return(op);
}
}
}
return(0);
}


ودالة لحساب عدد الصفقات بدلالة نوعها كالتالي :



int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


ثم تكون الشروط كالتالي :

if(Orderscnt(OP_BUY)==0)double NewLotsB=Lots;//حجم عقود الشراء
if(Orderscnt(OP_BUY)>0&&LastOrder("Profit",OP_BUY)<0)NewLotsB=LastOrder("Lots",OP_BUY)*2;//مضاعفات الضرب لاخر صفقة خاسرة

if(Orderscnt(OP_BUY)==0||(Orderscnt(OP_BUY)>0&&Ask<=LastOrder("Price",OP_BUY)-150*Point))//شروط عقود الشراء
{
int tk=OrderSend(Symbol(),OP_BUY,NewLotsB,NormalizeDou ble(Ask,Digits),30,0,0,"",MagicNo,0,Blue);
}
وبنفس الطريقة تضع شروط مضاعفات صفقات البيع

أما دالة ايقاف الاكسبيرت عند توقيت معين (وقت الأخبار) ستستخدم الشروط التالية ببداية الدالة الرئيسية OnTick :

if(TimeCurrent()>=StrToTime("2017.10.01 00:00"))return;

شكرا جدا على دالة المضاعفات
بالنسبة لدالة الاخبار كنت عاوز ادالة المعتمدة على مؤشر الاخبار تشتغل اوتوماتك من نفسها حسب اشعارات مؤشر الاخبار

kira-h
27-08-2017, 08:22 PM
شكرا جدا على دالة المضاعفات
بالنسبة لدالة الاخبار كنت عاوز ادالة المعتمدة على مؤشر الاخبار تشتغل اوتوماتك من نفسها حسب اشعارات مؤشر الاخبار

أخي الكريم الموضوع مخصص للأسئلة البرمجية
افتح موضوع طلب جديد واشرح فيه التعديلات التي تريد بالتفصيل ، مع الاكسبيرت والمؤشر

fanfar
27-08-2017, 09:37 PM
يعطيك العافية اعتقد طلبي يندرج تحت مسمى سؤال برمجي انه تعديل لاكسبيرت اشرفت عليه حضرتك

mr.forex
28-08-2017, 06:50 AM
السلام عليكم
أستاذ البرمجة القدير حسن اتمنى ان تكون بأفضل
في البداية وعند تعريف المتغيرات أريد تعريف متغير خاص بأعلى سعر للشمعة السابقة
حاب استفسر عن الفرق بين تعريف المتغير خارج الدالة أون تيك


double a = iHigh("USDCHF",PERIOD_M5,1);

void OnTick()
{
}


وبين تعريف المتغير داخل الدالة أون تيك


void OnTick()
{
double a = iHigh("USDCHF",PERIOD_M5,1);
}


الحالة الثالثة



double a;
void OnTick()
{
a = iHigh("USDCHF",PERIOD_M5,1);
}


مالفرق بين الثلاث حالات وكيف سوف يقرأها الاكسبيرت

kira-h
28-08-2017, 11:19 PM
السلام عليكم
أستاذ البرمجة القدير حسن اتمنى ان تكون بأفضل
في البداية وعند تعريف المتغيرات أريد تعريف متغير خاص بأعلى سعر للشمعة السابقة
حاب استفسر عن الفرق بين تعريف المتغير خارج الدالة أون تيك


double a = iHigh("USDCHF",PERIOD_M5,1);

void OnTick()
{
}


وبين تعريف المتغير داخل الدالة أون تيك


void OnTick()
{
double a = iHigh("USDCHF",PERIOD_M5,1);
}


الحالة الثالثة



double a;
void OnTick()
{
a = iHigh("USDCHF",PERIOD_M5,1);
}


مالفرق بين الثلاث حالات وكيف سوف يقرأها الاكسبيرت

وعليكم السلام
لا يوجد فرق بين الحالتين الأخيرتين وسيتم معرفة قيمة المتغير كل تكة للسعر
اما الحالة الأولى تعمل مرة واحدة فقط يعني قيمة واحدة لا تتغير

mr.forex
29-08-2017, 11:25 AM
وعليكم السلام
لا يوجد فرق بين الحالتين الأخيرتين وسيتم معرفة قيمة المتغير كل تكة للسعر
اما الحالة الأولى تعمل مرة واحدة فقط يعني قيمة واحدة لا تتغير

شكرا لك أستاذ حسن
تحياتي وتقديري لك

sal_moh85
29-08-2017, 01:51 PM
سلام عليكم استاذ حسن
وكل عام وانت بخير والجميع
سوال بخصوص كود شروط فتح الصفقه
مثال بشان يوضح الامر اكتير
if(Rsi>20)هاد شرط الشراء تمام بس انا حابب ضيف بي نفس جمله شرطيه شرط تانيه بيع
يعني
if(Rsi>20=buy)elsa if(Rsi>20&&clos<open=sell) في نفس الشرط
طبعا هي طريقه متل هيدج بس فيها تكنيك معين لفتح صفقه شراء او البيع مثال توضيح اكتير
فرضا السوق في حالة تريند صاعد اعتماد الشمعه فوق موفيج 200
حصل تقاطع لي استوكاستك من مستوى 20 تفعلة صفقة شراء بس ضربة ستوب لوز ام عن طريق تحديد الخساره او عن طريق اشاره معاكسه لي صفقه
في هذه نقطه اريد فتح صفقة بيع اي صفقه معاكسه لي صفقة شراءبشروط انا اضعها منفصله تمام عن شروط البيع العاديه
شروط البيع العاديه
السوق في حالة تريند هابط اعتماد الشمعه تحت موفيج 200 وتقاطع استوكاستك من عند 80 ونفس الكلام ينطبق على البيع اذا ضربت الستوب لوز يفتح صفقه معاكسه بنفس شروط السابقه وشكرا جزيلا

kira-h
29-08-2017, 05:37 PM
شكرا لك أستاذ حسن
تحياتي وتقديري لك

العفو أخي وبالتوفيق إن شاء الله

kira-h
29-08-2017, 08:02 PM
سلام عليكم استاذ حسن
وكل عام وانت بخير والجميع
سوال بخصوص كود شروط فتح الصفقه
مثال بشان يوضح الامر اكتير
if(Rsi>20)هاد شرط الشراء تمام بس انا حابب ضيف بي نفس جمله شرطيه شرط تانيه بيع
يعني
if(Rsi>20=buy)elsa if(Rsi>20&&clos<open=sell) في نفس الشرط
طبعا هي طريقه متل هيدج بس فيها تكنيك معين لفتح صفقه شراء او البيع مثال توضيح اكتير
فرضا السوق في حالة تريند صاعد اعتماد الشمعه فوق موفيج 200
حصل تقاطع لي استوكاستك من مستوى 20 تفعلة صفقة شراء بس ضربة ستوب لوز ام عن طريق تحديد الخساره او عن طريق اشاره معاكسه لي صفقه
في هذه نقطه اريد فتح صفقة بيع اي صفقه معاكسه لي صفقة شراءبشروط انا اضعها منفصله تمام عن شروط البيع العاديه
شروط البيع العاديه
السوق في حالة تريند هابط اعتماد الشمعه تحت موفيج 200 وتقاطع استوكاستك من عند 80 ونفس الكلام ينطبق على البيع اذا ضربت الستوب لوز يفتح صفقه معاكسه بنفس شروط السابقه وشكرا جزيلا

وعليكم السلام
المرجو التوضيح بصورة من الشارت

boubakeur
30-08-2017, 09:37 AM
السلام عليكم كل عام و انتم بخير بمناسبة حلول عيد الاضحى المبارك و تحية خاصة للاخ حسن كيرا
أرجو المساعدة في اكمال برمجة اكسبيرت بسيط قمت ببرمجته من موقع مجاني لكنه محدود في الخصائص

الاكسبيرت يعتمد على مؤشرين هما cci و rsi
الاكسبيرت صحيح و يفتح الصفقات حسب الشروط التالية:
الدخول شراء عند اغلاق شمعة صاعدة فوق مستوى cci100 و يكون السعر بين مستوى(rsi55 و 60rsi)
الدخول بيع عند اغلاق شمعة هابطة تحت مستوى 100cci و يكون السعر بين مستوى(rsi45 و rsi40)

اذا امكن اخي حسن اريد دالة إضافة إعدادات المؤشرين إلى الإعدادات الخارجية للاكسبيرت و كيفية كتابة الدالة في النص البرمجي لكي اتمكن من تغيير قيم المؤشرين و تكون كالتالي:


Use CCI = false-true
CCI Period = 14
CCI Price= Close
CCI Level 1 = 100
CCI Level 2 = -100

Use Rsi = false-true
RSI Period = 14
RSI Price = Close
RSI level 1= 40
RSI level 2= 45
RSI level 3= 55
RSI level 4= 60

كذلك اذا امكن اريد الدوال التالية و كيفية كتابتهم في النص البرمجي :
دالة التوقيت Time Filter
دالة Max lots
دالة Break even

و هذا هو الكود و شكرا مسبقا

extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;

double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((iCCI(NULL,0,14,PRICE_CLOSE,2)<100)&&(iCCI(NULL,0,14,PRICE_CLOSE,1)>100)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)>55)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)<60)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",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((iCCI(NULL,0,14,PRICE_CLOSE,2)>-100)&&(iCCI(NULL,0,14,PRICE_CLOSE,1)<-100)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)<45)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)>40)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",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(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(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);
}

sabil
30-08-2017, 03:16 PM
لو عايز اقيد الاكسبرت واخليه مش يشتغل الا على فريم معين ومش يشتغل على اي فريم تاني ولو غيرت الفريم المقصود يدي تنبيه بتشغيل الاكسبرت على فريم كذا ...
وده طبعا منفصل عن شروط الخروج نفسها
بمعنى
عايز مثلا الاكسبرت مش يشتغل الا على فريم الاربع ساعات
اما شروط الدخول والخروج على فريم النصف ساعة
انا مش بتكلم عن ترابط فريمات
لاء دي حاجة مختلفة

kira-h
30-08-2017, 07:11 PM
لو عايز اقيد الاكسبرت واخليه مش يشتغل الا على فريم معين ومش يشتغل على اي فريم تاني ولو غيرت الفريم المقصود يدي تنبيه بتشغيل الاكسبرت على فريم كذا ...
وده طبعا منفصل عن شروط الخروج نفسها
بمعنى
عايز مثلا الاكسبرت مش يشتغل الا على فريم الاربع ساعات
اما شروط الدخول والخروج على فريم النصف ساعة
انا مش بتكلم عن ترابط فريمات
لاء دي حاجة مختلفة

الشرط كالتالي :

void OnTick()
{
if(Period()!=PERIOD_H4)return;
///بقية الكود
}

kira-h
30-08-2017, 09:08 PM
السلام عليكم كل عام و انتم بخير بمناسبة حلول عيد الاضحى المبارك و تحية خاصة للاخ حسن كيرا
أرجو المساعدة في اكمال برمجة اكسبيرت بسيط قمت ببرمجته من موقع مجاني لكنه محدود في الخصائص

الاكسبيرت يعتمد على مؤشرين هما cci و rsi
الاكسبيرت صحيح و يفتح الصفقات حسب الشروط التالية:
الدخول شراء عند اغلاق شمعة صاعدة فوق مستوى cci100 و يكون السعر بين مستوى(rsi55 و 60rsi)
الدخول بيع عند اغلاق شمعة هابطة تحت مستوى 100cci و يكون السعر بين مستوى(rsi45 و rsi40)

اذا امكن اخي حسن اريد دالة إضافة إعدادات المؤشرين إلى الإعدادات الخارجية للاكسبيرت و كيفية كتابة الدالة في النص البرمجي لكي اتمكن من تغيير قيم المؤشرين و تكون كالتالي:


Use CCI = false-true
CCI Period = 14
CCI Price= Close
CCI Level 1 = 100
CCI Level 2 = -100

Use Rsi = false-true
RSI Period = 14
RSI Price = Close
RSI level 1= 40
RSI level 2= 45
RSI level 3= 55
RSI level 4= 60

كذلك اذا امكن اريد الدوال التالية و كيفية كتابتهم في النص البرمجي :
دالة التوقيت Time Filter
دالة Max lots
دالة Break even

و هذا هو الكود و شكرا مسبقا

extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;

double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((iCCI(NULL,0,14,PRICE_CLOSE,2)<100)&&(iCCI(NULL,0,14,PRICE_CLOSE,1)>100)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)>55)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)<60)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",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((iCCI(NULL,0,14,PRICE_CLOSE,2)>-100)&&(iCCI(NULL,0,14,PRICE_CLOSE,1)<-100)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)<45)&&(iRSI(NULL,0,14,PRICE_CLOSE,1)>40)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",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(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(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);
}

وعليكم السلام وعيد مبارك سعيد
مرفق الكود




input bool EnableTimeFilter=false;
input string Start_Hour="00:00";
input string End_Hour="23:00";

extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0,
BreakEven=0,
BreakEvenPips=0;
extern int Slippage=3;

input bool Use_CCI = true;
input int CCI_Period = 14,
CCI_Price= PRICE_CLOSE,
CCI_Level_1 = 100,
CCI_Level_2 = -100;

input bool Use_Rsi = true;
input int RSI_Period = 14,
RSI_Price = PRICE_CLOSE,
RSI_level_1= 40,
RSI_level_2= 45,
RSI_level_3= 55,
RSI_level_4= 60;

bool TimeFilter(string StartH,string EndH)
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + StartH);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + EndH);
if(!(Time[0]>=Start&&Time[0]<=End))
{
return(false);
}
return(true);
}

//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool s;
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
//-----
if(BreakEven>0)
{

for(cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op+BreakEvenPi ps*MyPoint,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>BreakEven*MyPoint)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
s=OrderModify(tk,op,NormalizeDouble(op-BreakEvenPips*MyPoint,Digits),tp,0,Red);
}
}
}
}
}

}

for(cnt=0;cnt<OrdersTotal();cnt++)
{
s= OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
s=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+M yPoint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}

if(EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return(0);
double TheStopLoss=0;
double TheTakeProfit=0;

if( TotalOrdersCount()==0 )
{
int result=0;
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)<CCI_Level_1&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)>CCI_Level_1)||!Use_CCI)
&&((Use_Rsi&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_3&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_4)||!Use_Rsi)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
return(0);
}
if(((Use_CCI&&iCCI(Symbol(),0,CCI_Period,CCI_Price,2)>CCI_Level_2&&iCCI(Symbol(),0,CCI_Period,CCI_Price,1)<CCI_Level_2)||!Use_CCI)
&&((iRSI(Symbol(),0,RSI_Period,RSI_Price,1)<RSI_level_1&&iRSI(Symbol(),0,RSI_Period,RSI_Price,1)>RSI_level_2)||!Use_Rsi)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
s=OrderSelect(result,SELECT_BY_TICKET);
s=OrderModify(OrderTicket(),OrderOpenPrice(),Norma lizeDouble(TheStopLoss,Digits),NormalizeDouble(The TakeProfit,Digits),0,Green);
}
return(0);
}
}
return(0);
}

int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;

}
return (result);
}

أبو عمر
01-09-2017, 01:11 PM
السلام عليكم ورحمة الله
كل عام وأنتم بخير
الأخ م حسن المحترم :
عندي طلب برمجي وهو عمل معادلة أو خوازمية للحصول على القيم السفلية (الإفتتاح أو الإغلاق لا يهم ) لكل شمعة ولتكن b.. وكذلك القيم العلوية u (سواء كانت Open أو Close )
بمعنى أوضح : أريد الحصول على قيم الإغلاق أو الإفتتاح ولكن من الجهة السفلية .. فمثلاً إذا كانت b1 شمعة رابحة فالمطلوب هو قيمة الإفتتاح وإذا كانت خاسرة فالمطلوب هو سعر الإغلاق .. المهم أريد القيم من الأسفل سواء افتتاح أو إغلاق ... هذه القيم السفلية والعلوية أريد (وحتى الشمعة الخامسة) أريد استخدامها في صيغة برمجية أخرى :
كمثال للتوضيح فقط إذا كان الشرط : b1+b2/b3-b4+b5 ..... جواب الشرط
وللتذكير فإن هذه القيم هي قيم الإفتتاح أو الإغلاق للشمعات من 1 إلى 5 ... ولكن من الجهة السفلية


هل وضحت الفكرة ؟؟؟

kira-h
01-09-2017, 02:26 PM
اخي ابو عمر الفكرة غير واضحة يمكن التوضيح بصور من الشارت
وكل عام وانتم بخير

أبو عمر
01-09-2017, 02:41 PM
اخي ابو عمر الفكرة غير واضحة يمكن التوضيح بصور من الشارت
وكل عام وانتم بخير
أخي لاحظ في الرسم القيم b كلها سفلية (بالنسبة لجسم الشمعة) 2920سواء إغلاق أو فتح أنا أريد إحضار سريع لهذه القيم بغرض توظيفها في صيغة برمجية أخرى ... يعنى أنا لا يمكن أن أوصف المطلوب بسعر الإغلاق أو الفتح لأنه مختلف أن أريد القيم السفلية لجسم الشمعة سواء كانت إغلاق أو فتح .. ونفس الشيء بالنسبة للقسم العلوي للشمعات

sabil
01-09-2017, 02:55 PM
العفو اخي الكريم

شكرا اخي حسن الاكسبرت شغال تمام
بس لما اضفت شروط جديدة ظهرلي اخطاء
الشروط كالتالي

if((system_1==true&&LE2<=TE2&&LE1>TE1&&SE2>TE2&&SE1>TE1&&(Orderscnt1()==0||(Orderscnt1(OP_SELL)>0&&LastCurrentType1()==OP_SELL)
||(system_2==true&&ppe(0,1)!=EMPTY_VALUE&&ppe(2,2)!=EMPTY_VALUE))
طبعا الخطأ هنا ف الاقواس ياريت تعدل كتابة الكود

Aminox
01-09-2017, 09:55 PM
مرحبا سيدي
كيف يمكن أن نعرف نقطة ما على سعر من الأسعار لكي نقوم بوضع أمر معلق عليها مثلا
لنفترض اننا اردنا فتح امر بيع معلق op_sellstop عند نقطة اسمها a
كيف يمكنني ان أعرف هذه النقطة على الشارت
شكرا لمجهودك تحياتي

kira-h
02-09-2017, 05:03 PM
شكرا اخي حسن الاكسبرت شغال تمام
بس لما اضفت شروط جديدة ظهرلي اخطاء
الشروط كالتالي

if((system_1==true&&LE2<=TE2&&LE1>TE1&&SE2>TE2&&SE1>TE1&&(Orderscnt1()==0||(Orderscnt1(OP_SELL)>0&&LastCurrentType1()==OP_SELL)
||(system_2==true&&ppe(0,1)!=EMPTY_VALUE&&ppe(2,2)!=EMPTY_VALUE))
طبعا الخطأ هنا ف الاقواس ياريت تعدل كتابة الكود

الصحيح كالتالي :

if((system_1==true&&LE2<=TE2&&LE1>TE1&&SE2>TE2&&SE1>TE1
&&(Orderscnt1()==0||(Orderscnt1(OP_SELL)>0&&LastCurrentType1()==OP_SELL)))
||(system_2==true&&ppe(0,1)!=EMPTY_VALUE&&ppe(2,2)!=EMPTY_VALUE))

kira-h
02-09-2017, 05:14 PM
مرحبا سيدي
كيف يمكن أن نعرف نقطة ما على سعر من الأسعار لكي نقوم بوضع أمر معلق عليها مثلا
لنفترض اننا اردنا فتح امر بيع معلق op_sellstop عند نقطة اسمها a
كيف يمكنني ان أعرف هذه النقطة على الشارت
شكرا لمجهودك تحياتي
مثال لعمل أمر معلق عند سعر a

OrderSend(Symbol(),OP_BUYSTOP,Lots,a,3,0,0,"",MagicNumer,0,Blue);

أبو عمر
02-09-2017, 07:14 PM
أخي لاحظ في الرسم القيم b كلها سفلية (بالنسبة لجسم الشمعة) 2920سواء إغلاق أو فتح أنا أريد إحضار سريع لهذه القيم بغرض توظيفها في صيغة برمجية أخرى ... يعنى أنا لا يمكن أن أوصف المطلوب بسعر الإغلاق أو الفتح لأنه مختلف أن أريد القيم السفلية لجسم الشمعة سواء كانت إغلاق أو فتح .. ونفس الشيء بالنسبة للقسم العلوي للشمعات

أخي حسن لم ترد علي هل هي صعبة عليك ؟

sabil
02-09-2017, 07:14 PM
الشرط كالتالي :

void OnTick()
{
if(Period()!=PERIOD_H4)return;
///بقية الكود
}

طيب ولو على زوج معين ؟

sabil
02-09-2017, 08:53 PM
وماذا يقصد ببقية الكود؟

kira-h
02-09-2017, 09:55 PM
أخي لاحظ في الرسم القيم b كلها سفلية (بالنسبة لجسم الشمعة) 2920سواء إغلاق أو فتح أنا أريد إحضار سريع لهذه القيم بغرض توظيفها في صيغة برمجية أخرى ... يعنى أنا لا يمكن أن أوصف المطلوب بسعر الإغلاق أو الفتح لأنه مختلف أن أريد القيم السفلية لجسم الشمعة سواء كانت إغلاق أو فتح .. ونفس الشيء بالنسبة للقسم العلوي للشمعات
بسيطة أخي ستستخدم شرط شكل الشمعة
مثال :

double dn_price,up_price;
if(Close[i]>Open[i])dn_price=Open[i];up_price=Close[i];
if(Close[i]<Open[i])dn_price=Close[i];up_price=Open[i];

kira-h
02-09-2017, 09:57 PM
وماذا يقصد ببقية الكود؟

المقصود بها بقية الكود الخاص بك

sabil
03-09-2017, 01:06 AM
المقصود بها بقية الكود الخاص بك

قصدك يعني شروط الدخول في الصفقات ولا ايه؟