رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة سمير محمد ارمان
السلام عليكم الاخوة الكرام
ارجو المساعدة
مافائدة وضع هؤلاء فى الاكسبيرت او المؤشر
وشكرا لكم على المساعدة الكريمة
كود PHP:
#include <stdlib.mqh>
#include <WinUser32.mqh>
1 - مكتبة الأخطاء البرمجية بترجع لك برقم الخطاء مع الشرح للخطاء .بتوفر عليك البحث عن سبب الخطاء .
2 - بعض المؤشرات تنادي مكتبة DLL وضع هذا الكود يغني عن التركيز متى ستحتاجة ومتى لاتحتاجه وجوده في الأكسبيرت افضل لي .
3- هي نفس المتغير العادي لكن بهذه الصيغة يحتفظ بالقيمة لو قطع الأكسبيرت وعاد للعمل .
وهذه روابط اضافية تشرح اكثر .
http://www.mql4.com/search#!keyword=WinUser32
http://codebase.mql4.com/source/1112
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
السلام عليكم ورحمة الله وبركاته
بارك الله فيكم جميعا
استفسار بسيط
لدينا مجموعة صفقات شراء وبيع مفعلة
كل صفقة شراء عند تكون شمعة خضراء وإلاغلاق العكسي لها عند تكون شمعة حمراء بشرط أن يتم هذا الاغلاق العكسي فقط إذا كانت الصفقة رابحة
والعكس صحيح لكل صفقة بيع
تحياتى وتقديري لكم
وعليكم السلام ورحمة الله تفضل الدالة لأغلاق للبيع وستصنع مثلها للشراء ويمكنك أن تستبدل ال 0 امام البروفت بمتغير
كود PHP:
void CloseSell(){
int cnt=OrdersTotal();
for(int i=cnt-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo)
{
if(OrderType()==OP_SELL && OrderProfit()>0 && Close[1]>Open[1]) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),30,Red);
}
}
} return(0);}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة Jmeel
وعليكم السلام ورحمة الله تفضل الدالة لأغلاق للبيع وستصنع مثلها للشراء ويمكنك أن تستبدل ال 0 امام البروفت بمتغير
كود PHP:
void CloseSell(){
int cnt=OrdersTotal();
for(int i=cnt-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo)
{
if(OrderType()==OP_SELL && OrderProfit()>0 && Close[1]>Open[1]) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),30,Red);
}
}
} return(0);}
جزاك الله خيرا
:00110:
:00012:
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wahaab
السلام عليكم ورحمة الله
تحية طيبة
اريد ان اضع جدول معين اضع فيه نقاط دخول الصفقات المفتوحة والصفقات التي ستفتح بحيث اذا سار السعر او عكس عن احدى نقاط دخول هذه الصفقات بمقدار 50 نقطة يقوم لاكسبرت بغلق كل الصفقات المفتوحة...فما هي الكيفية لحفظ نقاط الدخول للصفقات.
شكرا لكم
وعليكم السلام ورحمة الله وبركاته
سوف تقوم بعمله داله تبحث في الصفقات المفتوحه وتقارن السعر الحالي و سعر فتح الصفقة و إذا كان الفرق 50 نقطه تعطي إشارة لإغلاق كل الصفقات
مثال
كود PHP:
bool ShouldCloseOrders()
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()-Bid>=50*Point)return(true);
}
if(OrderType()==OP_SELL)
{
if(Ask-OrderOpenPrice()>=50*Point)return(true);
}
}
}
return(false);
}
الداله السابقه ستعود بالقيمه true عندما تخسر صفقة 50 نقطه
بقي فقط أن تضع الشرط
كود PHP:
if(ShouldCloseOrders()==true)
{
// close all orders
}
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته ..
شكراً للمجهود الخارق والعلم النافع ..
كان لدي استفسار .. علماً بأن خبرتى فى البرمجة = صفر هل من الممكن أن يقوم برنامج forex ea generator بفتح صفقة بناء على مؤشر وعمل استوب لوز لها بناء على إشارة سابقة من المؤشر ذاته .. بمعنى أن الاستوب ليس ثابت أو بعدد النقاط ولكن الاستوب متغير وفقاً لآخر إشارة معاكسة من المؤشر فإذا كانت الصفقة الحالية شراء مثلاً يضع الاستوب على لوو آخر شمعة ظهر عليها إشارة بيع وأرفقت صورة لتوضح إذا ماكان فى إمكان البرنامج عمل مثل هذا الأمر .. وشكراً للمجهود ونفعكم الله بما علمتمونا وجعله فى ميزان حسناتكم إن شاء اللهالملف المرفق 391313
رد:موضوع مخصص للأسئلة البرمجية
الف شكر استاذنا مستر دولار
سؤال اخر : انشات دالة تقوم بمراقبة الصفقات المفتوحة حاليا فاذا كانت الصفقتين الاخيرتين من نفس النوع + تحرك 10 نقاط في اتجاههما يقوم الاكسبرت بغلق كافة الصفقات
مثلا لو الصفقتين الاخيرتين المفتوحتين بيع وتحرك السعر 10 نقاط اسفل منذ افتتاح الصفقة الثانية يقوم الاكسبرت بغلق كافة الصفقات الموجودة
جربت الدالة هذه لكن لم تنجح
كود:
bool NumOrdersSell (){ int num;
for(int i=0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_SELL)num++;
if(num>=2)return(true);
return(true);
}
}
}
بالنسبة لهذا الجزء
كود:
int i=0;i<=OrdersTotal();i++
مالفرق بينه وبين لو كتبنا
كود:
int i=OrdersTotal();i<=0;i--
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wahaab
الف شكر استاذنا مستر دولار
سؤال اخر : انشات دالة تقوم بمراقبة الصفقات المفتوحة حاليا فاذا كانت الصفقتين الاخيرتين من نفس النوع + تحرك 10 نقاط في اتجاههما يقوم الاكسبرت بغلق كافة الصفقات
مثلا لو الصفقتين الاخيرتين المفتوحتين بيع وتحرك السعر 10 نقاط اسفل منذ افتتاح الصفقة الثانية يقوم الاكسبرت بغلق كافة الصفقات الموجودة
جربت الدالة هذه لكن لم تنجح
كود:
bool NumOrdersSell (){ int num;
for(int i=0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_SELL)num++;
if(num>=2)return(true);
return(true);
}
}
}
بالنسبة لهذا الجزء
كود:
int i=0;i<=OrdersTotal();i++
مالفرق بينه وبين لو كتبنا
كود:
int i=OrdersTotal();i<=0;i--
الكود الثاني أنت كتبته خطأ المفروض أكبر من وليس أصغر
كود PHP:
for(int i=OrdersTotal()-1;i>=0;i--)
وبالنسبه للفرق فلا يوجد فرق كلاهما سيبحث عن الصفقات المفتوحه لكن في هذه الحلقه سيبحث بدءا من آخر صفقة إلى أول صفقة أما الكود الأول فيبحث بدءا من أول صفقة إلى آخر صفقه
رد:موضوع مخصص للأسئلة البرمجية
حاولت مرة اخرى انشاء دالة تراقب الصفقتين الاخيرتين اذا متشابهتين ام لا لكنها لم تنجح معي
كود:
bool NumOrdersBuy (){ int Num=0;
for(int i=0;i<=1;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_BUY)Num++;
}
if(Num>=2)return(true);
}
return(false);
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wahaab
حاولت مرة اخرى انشاء دالة تراقب الصفقتين الاخيرتين اذا متشابهتين ام لا لكنها لم تنجح معي
كود:
bool NumOrdersBuy (){ int Num=0;
for(int i=0;i<=1;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_BUY)Num++;
}
if(Num>=2)return(true);
}
return(false);
}
هذه الداله ستبحث عن أول صفقتين مفتوحتين وليس آخر صفقتين فيجب أن تبدأ البحث من آخر صفقه OrdersTotal()-1
ثانيا هذه الداله ستبحث عن آخر أي صفقتين مفتوحتين فلنفرض مثلا أنه يوجد أكثر من إكسبرت يعمل و أكثر من صفقة مفتوحه المفروض أنك يجب أن تبحث عن آخر صفقتين مفتوحتين بواسطة الإكسبرت بالتالي لا تقوم بتحديد عدد مرات البحث من 0 الى 1 لكن يجب أن يكون البحث في كل الصفقات المفتوحه
ثم لاحقا تحدد عندما يمر الإكسبرت على آخر صفقتين فتحت بواسطته يتوقف عن البحث ويقارن آخر صفقتين
رد:موضوع مخصص للأسئلة البرمجية
لكن هذا الشرط الذي حدد البحث في صفقات الاكسبرت حسب المجك نمبر موجود بالدالة وبالتالي لن ينظر الى صفقات الاكسبرتات الاخرى
كود:
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
وقمت بالتعديل كما اقترحت على الدالة
كود:
bool NumOrdersSell (){ int num=0;
for(int i=OrdersTotal()-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_SELL)num++;
}
}
if(num>=2)return(true);
return(false);
}
لكنها لم تشتغل ....فانا اريد ان تعود الدالة ب true اذا كانت اخر او احدث صفقتين مفتوحتين متشابهتين..ارجو تعديلك عليها
بارك الله فيك
رد:موضوع مخصص للأسئلة البرمجية
هدفي هو ان يقوم الاكسبرت بمراقبة اخر او احدث صفقتين مفتوحتين واذا تحرك السعر 10 نقاط لصالح الصفقة الاخيرة يغلق جميع العقود...جربت الفكرة بطريقة اخرى بعمل دالة مستقلة لمراقبة نوع اخر صفقة واخرى تراقب نوع الصفقة ما قبل الاخيرة ومع الامر comment يمكن ان اتاكد من صحة عمل الدالة
كود:
string TypePOS(){ string type;
for(int i=0;i<=OrdersTotal()-1;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_BUY)type="BuyPosition";
if(OrderType()==OP_SELL)type="SellPosition";
}
}
Comment(type);
return(type);
}
الدالة السابقة تراقب نوع اخر صفقة مفتوحة والدالة التالية تراقب الصفقة ما قبل الاخيرة
كود:
string TypePOS2(){ string typee;
for(int i=0;i<=OrdersTotal()-2;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_BUY)typee="BuyPosition";
if(OrderType()==OP_SELL)typee="SellPosition";
}
}
return(typee);
}
مع اضافة شرط تحرك 10 نقاط لصالح الصفقة الاخيرة يصبح الكود
كود:
if (TypePOS()=="SellPosition"&&TypePOS2()=="SellPosition"&&Openorder()-Ask>=10*point){ CloseSellOrders();
CloseBuyOrders();
}
وبالتالي اذا اخر صفقتين بيع وتحرك السعر اسفل ب10 نقاط يغلق كل الصفقات
لكن في الباك تست والتجريب لا تعمل :no3: