رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
سوف تحتاج لمعرفة توقيت بدأ فتح أول صفقة حتى يبدأ الحساب من عندها للصفقات التي أغلقت لذلك ضع في كود أمر فتح أول صفقه عند فتح مثلا أول صفقة شراء
كود PHP:
FirstOrderTime=TimeCurrent;
وأيضا متغير لمعرفة الرصيد الحالي كم عند فتح أول صفقه
كود PHP:
CurrentBalance=AccountBalance();
وتقوم بتعريف المتغير FirstOrderTime و CurrentBalance خارج الداله start
الآن ستستخدم نفس الدالة التي تحسب ربح الصفقات مره للصفقات المغلقه والصفقات المفتوحه
كود PHP:
double CurrentProfit()
{
double Profit;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
Profit+=OrderProfit();
}
}
return(Profit);
}
double ClosedProfit()
{
double Profit;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderOpenTime()>=FirstOrderTime)
{
Profit+=OrderProfit();
}
if(OrderOpenTime()<FirstOrderTime)break;
}
return(Profit);
}
ثم ستحسب النسبه المئويه بدون مشاكل
كود PHP:
if((CurrentProfit()+ClosedProfit())/CurrentBalance*100>=PercentProfit)
{
// close all
}
شكرا أستاذي الغالي و جزاك الله كل خير
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة العوامى
نعم المطلوب ان يتحرك الخطان بنفس الوقت ومثال على ذلك مؤشر سايكل لاينز الموجود افتراضيا بالميتاتريدر فعندما تقوم بسحب خطوط المؤشر تتحرك الخطوط مع بعضها ولكن السايكل لاينز له حسابات اخرى فى الخطوط ومثال اخر خطوط الفيبوناتشى حيث تقوم بتحريك خط فتتحرك معه بقية الخطوط ولكن بمقدار التصحيحات
والمطلوب هنا هو نفس الفكرة ولكن ان يتحرك الخطان بنفس المقدار فقط بمعنى عند وضع المؤشر على الشارت يقوم برسم خطين والمسافة بينهم مثلا 10 نقاط
وعند تحريك احد الخطين ينجذب له الخط الاخر بنفس مقدار النقاط التى تحركها الخط الاول اى ان تظل المسافة بينهما ثابته
اذا لم استطيع ايصال المعلومة سوف اقوم بعمل فيديو توضيحى يشرح ما اقصد
وشكرا لك مستر دولار على وقتك الثمين
الشرح واضح و لن تحتاج إلى أي تعديل جديد فقط في الكود السابق بدلا من أننا كنا نطرح عدد النقاط من سعر الخط الآخر قم بجمعها بالتالي بدلا من أن يتنافر سوف يلحق به
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة zzeyani
هل يمكنك أن تقوم بتعديله على هدا السكريبت . مع خالص الشكر لك و لطاقم المنتدى
تفضل مرفق الإكسبرت تم تعديله
سوف تجد الشرط
كود PHP:
if(LastOrderProfit()<0&&LostOrderNumber()<10)
Lots=MathMax(LastOrderLot()*1.5,MarketInfo(Symbol(),MODE_MINLOT));
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
جزاك الله خيرا أستاذي الغالي
تم تطبيق الكود ولا يوجد خطأ لكن لا يعمل الاغلاق كما أريد بالباكتيست
يبدو انه ليس هناك مفر من العمل اليدوي الشاق،
سأحاول فهم وحل المشكلة وإن شاء الله خير
دائما يوجد حل فقط راجع كيف يتم الإغلاق الحالي وفي أي جزء الخطأ ولو ارفقت لي صوره توضح الخطأ لنحاول تعديل الكود
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم استاذى الكريم
مستر دولار
ارجو من الله ان تكون فى اتم صحة واحسن حال
استاذى الكريم
عندى مشكلة برمجية
وهى
انا عايز اكسبيرت يعمل تعليق صفقات بيع استوب وشراء استوب
كل هذا عادى لا يوجد مشاكل
المشكلة هنا
عايز عندما يتم تفعيل صفقة معلقة يتم حذف كل الصفقات المعاكسة للصفقة المفعلة
ويتم تعليق نفس الصفقات وتكون البداية من سعر افتتاح الصفقة المفعلة
مثال
تم تعليق 5 صفقات بيع استوب من سعر الافتتاح
ونفس الشئ فى الشراء استوب
عند تفعيل صفقة من صفقات الشراء استوب
يتم حذف كل صفقات البيع استوب
والتعليق من جديد بنفس الاعدادات بس يكون البداية
من سعر افتتاح صفقة الشراء
وعند تفعيل صفقة اخرى شراء يتم حذف الصفقات وتعليق من سعر افتتاح الصفقة - الاستيب وهاكذا ونفس الشئ فى البيع
هذه هى المشكلة عندى
ولك منى كل شكر وتقدير
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم استاذى الكريم
مستر دولار
ارجو من الله ان تكون فى اتم صحة واحسن حال
استاذى الكريم
عندى مشكلة برمجية
وهى
انا عايز اكسبيرت يعمل تعليق صفقات بيع استوب وشراء استوب
كل هذا عادى لا يوجد مشاكل
المشكلة هنا
عايز عندما يتم تفعيل صفقة معلقة يتم حذف كل الصفقات المعاكسة للصفقة المفعلة
ويتم تعليق نفس الصفقات وتكون البداية من سعر افتتاح الصفقة المفعلة
مثال
تم تعليق 5 صفقات بيع استوب من سعر الافتتاح
ونفس الشئ فى الشراء استوب
عند تفعيل صفقة من صفقات الشراء استوب
يتم حذف كل صفقات البيع استوب
والتعليق من جديد بنفس الاعدادات بس يكون البداية
من سعر افتتاح صفقة الشراء
وعند تفعيل صفقة اخرى شراء يتم حذف الصفقات وتعليق من سعر افتتاح الصفقة - الاستيب وهاكذا ونفس الشئ فى البيع
هذه هى المشكلة عندى
ولك منى كل شكر وتقدير
وعليكم السلام ورحمة الله وبركاته
وبالنسبه لو فتح صفقة بيع وصفقات شراء مفتوحه هل سيتم أيضا تغيير مكان الأوامر المعلقه الشراء ؟
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
وبالنسبه لو فتح صفقة بيع وصفقات شراء مفتوحه هل سيتم أيضا تغيير مكان الأوامر المعلقه الشراء ؟
السلام عليكم استاذى الكريم
هى طريقة تعليق صفقات بيع وشراء استوب من سعر الافتتاح
عند تفعيل مثلا صفقة شراء هنا يتم حذف كل صفقات البيع المعلقة وتعليق صفقات بيع معلقة وتكون بداية التعليق من سعر افتتاح صفقة الشراء
السوق صاعد وفعل صفقة شراء اخرى
هنا ايضا يتم حذف صفقات البيع المعلقة
ويتم وضعه من سعر الافتتتاح الجديد - الاستيب
وكل مايصعد ويفعل صفقة يحدث ذلك
لو تم تعليق 5 شراء معلق و5 بيع معلق
لا يزيد عدد صفقات البيع او الشراء بعد تفعيل الصفقة او الاغلاق
بعد الاغلاق كل الصفقات يتم العمل من جديد
هذه هى فكرة الاكسبيرت
ولك منى كل شكر وتقدير استاذى الكريم
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
أستاذنا الغالي MR.dollar لك ولجميع الأصدقاء تحية طيبة .. لدي هذا الاكسبيرت الذي يقوم بفتح صفقة ( شراء أو بيع ) في ساعات معينة باليوم قمت بتحديدها يدوياً بداخل الكود وليس عن طريق متغيرات .. لكني واجهت مشكلتين أثناء تشغيل الاكسبيرت :
1- في حال تحقق شروط فتح صفقة في ساعة معينة مثلاً الساعة 1.00 صباحاً شراء واغلقت الصفقة بسرعه خلال ثواني يقوم البرنامج بفتح صفقة جديدة مرة أخرى وأنا أريده أن ينفذ صفقة واحدة فقط إذا تحققت الشروط ولا ينفذها مرة أخرى أبداً .
2- في حال فتح الاكسبيرت لصفقة بيع وصفقة شراء ( هنا ستكون لدينا حالة هيدج ) فإن الإكسبيرت يتوقف تماماً عن فتح أي صفقة جديدة سواء بيع أو شراء ولا أعلم لماذا ؟
أتمنى أن تستطيعوا مساعدتي ولكك جزيل الشكر .
الملف المرفق 384894
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم استاذى الكريم
هى طريقة تعليق صفقات بيع وشراء استوب من سعر الافتتاح
عند تفعيل مثلا صفقة شراء هنا يتم حذف كل صفقات البيع المعلقة وتعليق صفقات بيع معلقة وتكون بداية التعليق من سعر افتتاح صفقة الشراء
السوق صاعد وفعل صفقة شراء اخرى
هنا ايضا يتم حذف صفقات البيع المعلقة
ويتم وضعه من سعر الافتتتاح الجديد - الاستيب
وكل مايصعد ويفعل صفقة يحدث ذلك
لو تم تعليق 5 شراء معلق و5 بيع معلق
لا يزيد عدد صفقات البيع او الشراء بعد تفعيل الصفقة او الاغلاق
بعد الاغلاق كل الصفقات يتم العمل من جديد
هذه هى فكرة الاكسبيرت
ولك منى كل شكر وتقدير استاذى الكريم
وعليكم السلام ورحمة الله وبركاته
سوف تقوم بعمل دالة تقارن بين سعر الأوامر المعلقه الحاليه وبين سعرها المفترض من آخر صفقة شراء مفتوحه
فإذا كان السعر مختلف يتم حذفها ووضعها من جديد
مثال
سأقوم بعمل دالة لمعرفة سعر آخر صفقة شراء مفتوحه ودالة لمعرفة عدد الصفقات المفتوحه
كود PHP:
double LastOrderPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}
int orderscnt(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);
}
ودالة لحذف الأوامر المعلقه
كود PHP:
void DeletePendingOrders()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
}
ثم سأضع الشرط
كود PHP:
if(orderscnt(OP_BUY)>0)
{
if(LastOrderPrice(OP_BUY)-LastOrderPrice(OP_SELLSTOP)!=50*Point)
{
DeletePendingOrders();
}
}
فإذا كان فرق الإستيب بين آخر صفقة شراء مفتوحه والأمر المعلق مختلف عن عدد الإستيب المحدده فهذا دليل على أن صفقة شراء أخرى فتحت وبالتالي تغير السعر و المسافه
ثم تقوم بوضع الأوامر المعلقه من جديد من آخر سعر صفقة شراء
كود PHP:
if(orderscnt(OP_SELLSTOP)==0)
{
for(int i=1;i<=5;i++)
{
double price=LastOrderPrice(OP_BUY)-50*Point*i;
OrderSend(Symbol(),OP_SELLSTOP,Lot,price,3,0,0,"EA",MagicNumber,0,Red);
}
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة محمد آل مسيري
أستاذنا الغالي MR.dollar لك ولجميع الأصدقاء تحية طيبة .. لدي هذا الاكسبيرت الذي يقوم بفتح صفقة ( شراء أو بيع ) في ساعات معينة باليوم قمت بتحديدها يدوياً بداخل الكود وليس عن طريق متغيرات .. لكني واجهت مشكلتين أثناء تشغيل الاكسبيرت :
1- في حال تحقق شروط فتح صفقة في ساعة معينة مثلاً الساعة 1.00 صباحاً شراء واغلقت الصفقة بسرعه خلال ثواني يقوم البرنامج بفتح صفقة جديدة مرة أخرى وأنا أريده أن ينفذ صفقة واحدة فقط إذا تحققت الشروط ولا ينفذها مرة أخرى أبداً .
2- في حال فتح الاكسبيرت لصفقة بيع وصفقة شراء ( هنا ستكون لدينا حالة هيدج ) فإن الإكسبيرت يتوقف تماماً عن فتح أي صفقة جديدة سواء بيع أو شراء ولا أعلم لماذا ؟
أتمنى أن تستطيعوا مساعدتي ولكك جزيل الشكر .
الملف المرفق 384894
بالنسبه للمشكله الأولى فيمكنك أن تقوم بتحديد أن يفتح صفقة واحده فقط ولا يفتح صفقة جديده حتى مرور وقت معين مثلا ساعه كامله
مثال سوف أقوم بعمل دالة لمعرفة توقيت فتح آخر صفقة مغلقه
كود PHP:
datetime LastOrderOpenTime()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderOpenTime());
}
}
return(0);
}
ثم ستضع من ضمن شروط الدخول
كود PHP:
if(TimeCurrent()-LastOrderOpenTime()>=3600)
3600 ثانيه أي 60 دقيقه
بالنسبه لعدم فتح صفقات فهذا لأنه يوجد من ضمن شروط الإكسبرت
في حالة الشراء
فهو يحسب قبل أن يفتح صفقات الشراء أن لا يكون هناك أي صفقات شراء مفتوحه
وأيضا بالنسبه للبيع
إذا حذفت هذه الشروط فسوف يفتح الصفقات في كل مره
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
السلام عليكم ورحمة الله وبركاته
أستاذي مستر دولار لدي حل آخر جميل جدا لتحقيق المعادلة المرجوة
ما هي الدالة إذا كانت هناك صفقة حرة (أي مثلا عدد صفقات البيع المفعلة أكبر أو أصغر من عدد صفقات الشراء المفعلة) يتم الانتقال إلى شرط الاغلاق
يعني بصيغة أخرى لا يتم الاغلاق إذا كان عدد صفقات البيع = عدد صفقات الشراء
علما أن كل الصفقات المفعلة والمعلقة بنفس اللوت
منتظرك أستاذي الغالي بارك الله فيك
وعليكم السلام ورحمة الله وبركاته
بسيط أن تقوم بعمل دالة لحساب عدد الصفقات المفتوحه على حسب نوعها
مثال
كود PHP:
int orderscnt(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){
cnt++;
}
}
}
return(cnt);
}
ثم ستضع الشروط
كود PHP:
if(orderscnt(OP_BUY)!=orderscnt(OP_SELL))
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
سوف تقوم بعمل دالة تقارن بين سعر الأوامر المعلقه الحاليه وبين سعرها المفترض من آخر صفقة شراء مفتوحه
فإذا كان السعر مختلف يتم حذفها ووضعها من جديد
مثال
سأقوم بعمل دالة لمعرفة سعر آخر صفقة شراء مفتوحه ودالة لمعرفة عدد الصفقات المفتوحه
كود PHP:
double LastOrderPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}
int orderscnt(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);
}
ودالة لحذف الأوامر المعلقه
كود PHP:
void DeletePendingOrders()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()>OP_SELL)
{
OrderDelete(OrderTicket());
}
}
}
ثم سأضع الشرط
كود PHP:
if(orderscnt(OP_BUY)>0)
{
if(LastOrderPrice(OP_BUY)-LastOrderPrice(OP_SELLSTOP)!=50*Point)
{
DeletePendingOrders();
}
}
فإذا كان فرق الإستيب بين آخر صفقة شراء مفتوحه والأمر المعلق مختلف عن عدد الإستيب المحدده فهذا دليل على أن صفقة شراء أخرى فتحت وبالتالي تغير السعر و المسافه
ثم تقوم بوضع الأوامر المعلقه من جديد من آخر سعر صفقة شراء
كود PHP:
if(orderscnt(OP_SELLSTOP)==0)
{
for(int i=1;i<=5;i++)
{
double price=LastOrderPrice(OP_BUY)-50*Point*i;
OrderSend(Symbol(),OP_SELLSTOP,Lot,price,3,0,0,"EA",MagicNumber,0,Red);
}
}
كلمة شكر قليلة عليك ياستاذى الكريم
جزاك الله خير وجعله فى ميزان حسناتك
وزادك الله من علمه
وحبب فيك خلقه
والشكر والعرفان لك
تحياتى وتقديرى لشخصك الكريم
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
بسيط أن تقوم بعمل دالة لحساب عدد الصفقات المفتوحه على حسب نوعها
مثال
كود PHP:
int orderscnt(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){
cnt++;
}
}
}
return(cnt);
}
ثم ستضع الشروط
كود PHP:
if(orderscnt(OP_BUY)!=orderscnt(OP_SELL))
:00110::00011:
:eh_s(7):