اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex

اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex (https://fx-arabia.com/vb/index.php)
-   منتدى المؤشرات و الاكسبيرتات (https://fx-arabia.com/vb/forumdisplay.php?f=6)
-   -   دورة تعليم برمجة الاكسبريت (https://fx-arabia.com/vb/showthread.php?t=29378)

imaddine 31-03-2013 03:33 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 487946)
فيه شئ غير صحيح في برنامجك اخي

هو غلق الصفقات العكسية

ماهي شروط غلق الصفقات العكسية ؟؟؟؟؟

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

imaddine 31-03-2013 03:36 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 487956)
لغلق الصفقات العكسية يشترط فقط ضهور السهم المعاكس

;غير شرط ان يكون عدد الصفقات اقل من mx trade

اذت لغلق الصفقات ضع الشرط منفصل علي شرط فتح الصفقات مع تغير الشروط

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

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

لاني كما اخبرتك انا اتعلم فقط اي اني لم ابرمج هذا الاكسبيرت
للمتاجرة عليه من الاساس

MOVING_AVERAGE 31-03-2013 03:57 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 487959)
والله ان كان الامر ممكن ولا يسبب لك ازعاج لو يكون بطريقة
المناقشة او بنفس طريقة التي شرحت بها الدروس السابقة
يكون افضل

لاني كما اخبرتك انا اتعلم فقط اي اني لم ابرمج هذا الاكسبيرت
للمتاجرة عليه من الاساس

اهم شئ في البرمجة ان تفهم ماذا تريد عمله

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

وهذا مبدء العمل فقط

لاكن ليكون عملك صحيح يجب ان تعرف ماذا تبرمج اساسا

الشروط من اهم الامور التي يجب معرفتها لكي نفهم عمل البرنامج

نعود الي شروط الدخول في الصفقة

نحن اشترطنا ضهور سهم في الشمعة السابقة

لكي يدخل في عملية buy او sell

لاكن لو وضعنا هذا الامر فقط

فالاكسبريت يقارن الشرط كل تحرك للسعر

وطالما الشرط صحيح سيدخل صفقة

مثلا في الشمعة السابقة ضهر سهم يشير الي buy

سيدخل اول صفقة buy

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

ان وجده صحيح سيعيد الدخول

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

نريد المتاجرة به

اقصي حد نريد المتاجرة به وضعناه متغير خارجي نحن نحدده

عدد الصفقات المفتوحة نحصل عليه بواسطة الدالة orderstotal()

اذا سيصبح الشرط كالتالي

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

[PHP]
if(indigreen<4000&&orderstotal()<MaxTrades)
[/PHP]ماذا سيعمل الاكسبريت

سيقارن ان ضهر سهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 0 وهي اصغر من اقصي حد للمتاجرة الذي = 1

سيفتح صفقة

يتحرك السعر سيعيد المقارنة

هل ضهر السهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 1 وهي تساوي اقصي حد للمتاجرة الذي = 1

اذن لا يفتح صفقة

ويستمر الاكسبريت هكذا

ناتي الان لاغلاق الصفقات

نريد اغلاق صفقة لما تضهر اشارة عكسية فقط

لا يهمنا كم عدد الصفقات

اذا الشرط سيكون كالتالي

اذا ضهر سهم نازل اخرج من صفقات buy نترجمه

[PHP]
if(indired<4000)

{CloseBuyOrders();}
[/PHP]اي شئ غير مفهوم لا تتردد في طرحه اخي

imaddine 31-03-2013 04:05 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 487962)
اهم شئ في البرمجة ان تفهم ماذا تريد عمله

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

وهذا مبدء العمل فقط

لاكن ليكون عملك صحيح يجب ان تعرف ماذا تبرمج اساسا

الشروط من اهم الامور التي يجب معرفتها لكي نفهم عمل البرنامج

نعود الي شروط الدخول في الصفقة

نحن اشترطنا ضهور سهم في الشمعة السابقة

لكي يدخل في عملية buy او sell

لاكن لو وضعنا هذا الامر فقط

فالاكسبريت يقارن الشرط كل تحرك للسعر

وطالما الشرط صحيح سيدخل صفقة

مثلا في الشمعة السابقة ضهر سهم يشير الي buy

سيدخل اول صفقة buy

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

ان وجده صحيح سيعيد الدخول

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

نريد المتاجرة به

اقصي حد نريد المتاجرة به وضعناه متغير خارجي نحن نحدده

عدد الصفقات المفتوحة نحصل عليه بواسطة الدالة orderstotal()

اذا سيصبح الشرط كالتالي

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

[PHP]
if(indigreen<4000&&orderstotal()<MaxTrades)
[/PHP]ماذا سيعمل الاكسبريت

سيقارن ان ضهر سهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 0 وهي اصغر من اقصي حد للمتاجرة الذي = 1

سيفتح صفقة

يتحرك السعر سيعيد المقارنة

هل ضهر السهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 1 وهي تساوي اقصي حد للمتاجرة الذي = 1

اذن لا يفتح صفقة

ويستمر الاكسبريت هكذا

ناتي الان لاغلاق الصفقات

نريد اغلاق صفقة لما تضهر اشارة عكسية فقط

لا يهمنا كم عدد الصفقات

اذا الشرط سيكون كالتالي

اذا ضهر سهم نازل اخرج من صفقات buy نترجمه

[PHP]
if(indired<4000)

{CloseBuyOrders();}
[/PHP]اي شئ غير مفهوم لا تتردد في طرحه اخي

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

ayoob 31-03-2013 08:34 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 470470)
الفرق الجوهري يكمن في قيمة النقطة المحسوبة

وقيمة النقطة علي حسب المنصة

اولا قيمة النقطة علي المنصة هي اصغر قيمة بعد الفاصلة

يعني في منصة 5 ارقام لو يكون عندنا هذا العدد
1.32354

قيمة النقطة حسب المنصة هي اصغر قيمة بعد الفاصلة

يعني 0.00001

اما قيمة النقطة التي نتاجر عليها هي 0.0001

وهنا يوجد الاختلاف بين منصة 4 و 5 ارقام

ولكي نتجاوز هذا الاختلاف نضيف تعريف النقطة كما يلي

في دالة init

نضيف الكتابة التالية وهذه الكتابة لتحديد قيمة النقطة في منضة 4 و 5 ارقام

وعلي كل الازواج

لان ازواج الين فيها اما رقمين او 3 فقط حسب المنصة

[PHP]
int init()
{

if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
digits=2;
}
if(Digits==4)
{
point=0.0001;
digits=4;
}
if(Digits==3)
{
point=0.01;
digits=3;
}
if(Digits==5)
{
point=0.0001;
digits=5;
}
return(0);
}
[/PHP]ونصبح نتعامل في كود الاكسبريت بدلالة point ب p الصغير وليس P كبيرة

ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة

imaddine 31-03-2013 10:27 PM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 488071)
ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة

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

MOVING_AVERAGE 31-03-2013 11:16 PM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 488071)
ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة


في اللغة الاساسية ل MQL توجد كتابة Point تعطي لنا اصغر رقم يمكن الحصول عليه من السعر

مثلا لو لدينا السعر 1.3625487021548

اصغر رقم يمكن الحصول عليه هو

0.0000000000001

واصغر رقم يسمي النقطة

في منصة 5 ارقام اصغر رقم هو 0.00001

في منصة 4 ارقام اصغر رقم هو 0.0001

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

لو ناخذ قيمة النقطة الافتراضية الموجودة اصلا في MQL وهي Point ب حرف P الكبير

ونريد اخذ الربح بعد 10 نقاط

وكما تعلم اخي ان الربح عند 10 نقاط لا يختلف حتي لو اختلفة المنصات 4 او 5

يعني

لو دخلنا عقد من منصة 4 ارقام ومنصة 5 ارقام من نفس السعر

الربح بعد 10 نقاط سيكون نفسه ؟؟؟

لو نستعمل Point في الحساب فلن يكون الربح نفسه

لذا عمل متغير اخر ووضعنا فيه قيمة النقطة مهما كانت المنصة

imaddine 01-04-2013 12:41 AM

رد: دورة تعليم برمجة الاكسبريت
 
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 5 صفقات
مع كل اشارة ولم افهم لما 5 صفقات رغم اني غيرة الدالة
وجعلتها تفتح صفقة واحدة فقط دون اي متغير خارجي يتحكم
في عدد الصفقات وايضا يقوم بتفعيل مع اول اشارة
ولا يغلق الصفقة رغم اني وضعت دالة اغلاق الصفقة في
حال وجود اشارة عكسية
[PHP]extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment(""+"\n"+""+"\n"+"/");

//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
دالة استدعاء المؤشر
//////////////////////////////////////////////////

double TP,SL;

if(indigreen<5000&&LastOrder()>0&&orderstotal()<=1 ) {
{CloseSellOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية

//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",Magi cNumber,0,Blue);

}

//////////////////////////////////////////////////
if(indired<5000&&LastOrder()!=1&&orderstotal()<=1) {
{CloseBuyOrders();}

دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",Mag icNumber,0,Red);

}

return(0);
}
//+------------------------------------------------------------------+



دالة اغلاق صفقة الشراء في حال ظهور اشارة معاكسة
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
دالة اغلاق صفقة البيع في حال ظهور اشارة معاكسة
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

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

int LastOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber){
return(OrderType());
}
}
return(2);
}
[/PHP]

imaddine 01-04-2013 12:51 AM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 488148)
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 5 صفقات
مع كل اشارة ولم افهم لما 5 صفقات رغم اني غيرة الدالة
وجعلتها تفتح صفقة واحدة فقط دون اي متغير خارجي يتحكم
في عدد الصفقات وايضا يقوم بتفعيل مع اول اشارة
ولا يغلق الصفقة رغم اني وضعت دالة اغلاق الصفقة في
حال وجود اشارة عكسية
[PHP]extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment(""+"\n"+""+"\n"+"/");

//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
دالة استدعاء المؤشر
//////////////////////////////////////////////////

double TP,SL;

if(indigreen<5000&&LastOrder()>0&&orderstotal()<=1 ) {
{CloseSellOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية

//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",Magi cNumber,0,Blue);

}

//////////////////////////////////////////////////
if(indired<5000&&LastOrder()!=1&&orderstotal()<=1) {
{CloseBuyOrders();}

دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",Mag icNumber,0,Red);

}

return(0);
}
//+------------------------------------------------------------------+



دالة اغلاق صفقة الشراء في حال ظهور اشارة معاكسة
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
دالة اغلاق صفقة البيع في حال ظهور اشارة معاكسة
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

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

int LastOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Ma gicNumber){
return(OrderType());
}
}
return(2);
}
[/PHP]

استاذ موفنج لقد وجدت الخطا في عدد الصفقات المفتوحة وهو في اكبر من اول يساوي
[PHP][PHP] if(indired<5000&&LastOrder()!=1&&orderstotal()<=1) {
الخطا كان في <=

والكتابة الصحيحة هي
if(indired<5000&&LastOrder()!=1&&orderstotal()<1){[/PHP]

بقي خطا واحد وهو في اغلاق عند الاشارة العكسية

imaddine 01-04-2013 06:56 PM

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

imaddine 04-04-2013 03:46 PM

رد: دورة تعليم برمجة الاكسبريت
 
استاذي موفنج كيف الحال
الحمد لله قمت ببرمجة اكسبيرت ونجحة فيه بحيث قمت بعمل
التريلنج وايضا خاصية اغلاق الصفقات عند الاشارة المعاكسة
وايضا قمت ببرمجة اكسبيرت لمؤشر اخر
لكن بينما كنت اريد مساعدة احد الاخوة صادفتني مشكلة
وهو انه قام بطلب اكسبيرت لاحد المؤشرات يقوم على خطوط
تشبه الدعوم والمقاومات فلما اردت العمل على المؤشر وجدت
انه لا توجد فيه اندكسات لتعريفها في الاكسبيرت ولم استطع
تعريف الخطوط وايضا دالة فتح صفقة بمجرد لمس السعر
لاحد الخطوط
http://www.fx-arabia.com/vb/uploaded...1365079484.png
اعلم انك مشغول كثيرا فلو تكرمت وكان عندك وقت
لشرح طريقة عمل اكسبيرت لهذا النوع من المؤشرات
والا فارفق لي اي مؤشر واكسبيرت له نفس الفكرة
لمحاولة دراسة دواله
وبارك الله فيك

MOVING_AVERAGE 04-04-2013 05:35 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 490211)
استاذي موفنج كيف الحال
الحمد لله قمت ببرمجة اكسبيرت ونجحة فيه بحيث قمت بعمل
التريلنج وايضا خاصية اغلاق الصفقات عند الاشارة المعاكسة
وايضا قمت ببرمجة اكسبيرت لمؤشر اخر
لكن بينما كنت اريد مساعدة احد الاخوة صادفتني مشكلة
وهو انه قام بطلب اكسبيرت لاحد المؤشرات يقوم على خطوط
تشبه الدعوم والمقاومات فلما اردت العمل على المؤشر وجدت
انه لا توجد فيه اندكسات لتعريفها في الاكسبيرت ولم استطع
تعريف الخطوط وايضا دالة فتح صفقة بمجرد لمس السعر
لاحد الخطوط
http://www.fx-arabia.com/vb/uploaded...1365079484.png
اعلم انك مشغول كثيرا فلو تكرمت وكان عندك وقت
لشرح طريقة عمل اكسبيرت لهذا النوع من المؤشرات
والا فارفق لي اي مؤشر واكسبيرت له نفس الفكرة
لمحاولة دراسة دواله
وبارك الله فيك


ان كانت الخطوط مرسومة بواسطة دالة الرسم CreateObject

فتحتاج لعمل دالة خارجية تبحث لك عن اخر القيم للخط

وان كانت الخطوط مرسومة بواسطة المصفوفات والكائنات الرسومية

تحتاج فقط لاستدعائها استدعاء الالوان الخارجية في اعددات المؤشر

ان شاء الله ساضع مثالين عن الطريقتين

imaddine 04-04-2013 10:34 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 490296)
ان كانت الخطوط مرسومة بواسطة دالة الرسم CreateObject

فتحتاج لعمل دالة خارجية تبحث لك عن اخر القيم للخط

وان كانت الخطوط مرسومة بواسطة المصفوفات والكائنات الرسومية

تحتاج فقط لاستدعائها استدعاء الالوان الخارجية في اعددات المؤشر

ان شاء الله ساضع مثالين عن الطريقتين

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

بارك الله فيك وفي انتضارك

maryocairo 05-04-2013 07:32 AM

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

maryocairo 05-04-2013 07:38 AM

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

MOVING_AVERAGE 05-04-2013 12:48 PM

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

المشاركة الأصلية كتبت بواسطة maryocairo (المشاركة 490682)
هية كدا الدورة خلصت شكل الموضوع جامد وهبتدى بأول صفحة شكرا لموفينج عل مجهوده


بارك الله فيك

الدورة لم تنتهي

MOVING_AVERAGE 05-04-2013 12:50 PM

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

المشاركة الأصلية كتبت بواسطة maryocairo (المشاركة 490683)
وهية دى الدورة ال 2 ياريت لينك للدورة الاولى وشكرا تانى لموفينج

وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف

maryocairo 07-04-2013 05:12 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 490734)
وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف


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

maryocairo 07-04-2013 05:22 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 490734)
وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف


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

م. عبدالرحمن وردة 13-04-2013 08:06 PM

رد: دورة تعليم برمجة الاكسبريت
 
السلام عليكم و رحمة الله و بركاته.

أخي "موفنج أفرج" بارك الله فيك و في والديك وجزاكم الله خير الجزاء.
*************************
عاوز استفسر استفسار صغير :
أزاي في البرنامج اقدر اعرف انا خسرت في الصفقه اللى فاتت او كسبت و ازاي اعرف اللى باقي من الرصيد.
علشان مثلا لو عاوز البرنامج يقف لو خسرت 10 مرات مثلا او وصل الرصيد ل 50 دولاي مثلا.

و شكرا.

ayoob 14-04-2013 09:19 AM

رد: دورة تعليم برمجة الاكسبريت
 
السلام عليكم حاولت ابرمج اكسبيرات لي مؤشر RIS وشروط الشراء والبيع هي قطع خط 50 في البيع و الشراء ولكن عندي مشكلة في الجورنال في الامر OrderSend
الكود
[PHP]extern int StopLoss=250;
extern int TakeProfit=250;
extern double Lot=0.1;
extern int Magic=15000;
int point;
int digits;
int Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Ris1,Ris2;
double SL,TP;
Ris1=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,1);
Ris2=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,2);

if(Ris1>50&&Ris2<50&&OrdersTotal()==0)
{
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
OrderSend(Symbol(),OP_BUY,Lot,Ask,Q*3,SL,TP,"EA",M agic,0,Green);
}

if(Ris1<50&&Ris2>50&&OrdersTotal()==0)
{
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_SELL,Lot,Bid,Q*3,SL,TP,"EA", Magic,0,Red);
}


}
return(0);[/PHP]
علما عند مسح كود تعريف الهدف والاستوب لوس وجعل الاستوب والهدف في الدلة OrderSend يشتغل الاكسبيرات بدون مشاكل مثال علي الكود
[PHP]OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+250*Point, Ask-250*Point,"EA",Magic,0,Green);[/PHP]
:1 (88):

ayoob 14-04-2013 09:22 AM

رد: دورة تعليم برمجة الاكسبريت
 
صورة من الخطا في الجورنال
http://www.fx-arabia.com/vb/uploaded...1365920515.png

ayoob 15-04-2013 02:49 AM

رد: دورة تعليم برمجة الاكسبريت
 
:1 (104)::1 (88):

ayoob 15-04-2013 10:57 PM

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

ayoob 16-04-2013 01:49 AM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 496832)
السلام عليكم اخي مصطفي عندي اكسبيرات لا يشتغل علي منصة الخمس ارقام ياريت يتم التعديل فية وشكرا مرفق الاكسبيرات

وهناك مشكلة اخري يفتح صفقات علي الباك تست عادي ولكن في الديمو لا يفتح بيعطي تنبية فقط؟؟؟:1 (88):

MOVING_AVERAGE 16-04-2013 11:31 AM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 496023)
السلام عليكم حاولت ابرمج اكسبيرات لي مؤشر RIS وشروط الشراء والبيع هي قطع خط 50 في البيع و الشراء ولكن عندي مشكلة في الجورنال في الامر OrderSend
الكود
[PHP]extern int StopLoss=250;
extern int TakeProfit=250;
extern double Lot=0.1;
extern int Magic=15000;
int point;
int digits;
int Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Ris1,Ris2;
double SL,TP;
Ris1=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,1);
Ris2=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,2);

if(Ris1>50&&Ris2<50&&OrdersTotal()==0)
{
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
OrderSend(Symbol(),OP_BUY,Lot,Ask,Q*3,SL,TP,"EA",M agic,0,Green);
}

if(Ris1<50&&Ris2>50&&OrdersTotal()==0)
{
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_SELL,Lot,Bid,Q*3,SL,TP,"EA", Magic,0,Red);
}


}
return(0);[/PHP]علما عند مسح كود تعريف الهدف والاستوب لوس وجعل الاستوب والهدف في الدلة OrderSend يشتغل الاكسبيرات بدون مشاكل مثال علي الكود
[PHP]OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+250*Point, Ask-250*Point,"EA",Magic,0,Green);[/PHP]:1 (88):

لان المنصة التي تشتغل عليها منصة ecn

لا تقبل انزال اوامر مع تحديد الهدف والخسارة مسبقا

الحل انك تنزل الامر بدون هدف ولا وقف خسارة

ثم تغير الهدف ووقف الخسارة

MOVING_AVERAGE 16-04-2013 11:41 AM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 496832)
السلام عليكم اخي مصطفي عندي اكسبيرات لا يشتغل علي منصة الخمس ارقام ياريت يتم التعديل فية وشكرا مرفق الاكسبيرات

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

مثلا لم تحدد كم عقد يمكن ان يفتح الاكسبريت

فيقوم بفتح صفقات لا تنتهي

MOVING_AVERAGE 16-04-2013 11:47 AM

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

المشاركة الأصلية كتبت بواسطة م. عبدالرحمن وردة (المشاركة 495812)
السلام عليكم و رحمة الله و بركاته.

أخي "موفنج أفرج" بارك الله فيك و في والديك وجزاكم الله خير الجزاء.
*************************
عاوز استفسر استفسار صغير :
أزاي في البرنامج اقدر اعرف انا خسرت في الصفقه اللى فاتت او كسبت و ازاي اعرف اللى باقي من الرصيد.
علشان مثلا لو عاوز البرنامج يقف لو خسرت 10 مرات مثلا او وصل الرصيد ل 50 دولاي مثلا.

و شكرا.

يتم ذلك بواسطة مراجعة الصفقات الحالية والصفقات التي اغلقة

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

من بين هته الطرق مراجعة ربح الصفقة ان كان سالب

يعني ان الصفقة خسرت

ayoob 16-04-2013 02:55 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 497088)
لو تراجع شروط فتح الصفقة ستجد ان الشروط غير مكتملة

مثلا لم تحدد كم عقد يمكن ان يفتح الاكسبريت

فيقوم بفتح صفقات لا تنتهي

طيب اخي مصطفي ياريت يتم التعديل فية لي يعمل علي منصات الخمس ارقام والاربع ارقام ومنصات ECN وشكرhttp://www.fx-arabia.com/vb/images/icons/icon7.gif

MOVING_AVERAGE 16-04-2013 03:06 PM

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

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 497201)
طيب اخي مصطفي ياريت يتم التعديل فية لي يعمل علي منصات الخمس ارقام والاربع ارقام ومنصات ECN وشكرhttp://www.fx-arabia.com/vb/images/icons/icon7.gif


بما ان الموضوع تعليمي

ساريك طريقة حذف الاخطاء احسن

اولا استعمل هذه الدالة لفتح اي صفقة

لكي ترتاح من مشاكل ECN

[PHP]
int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(t y==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,D igits),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}
[/PHP]

مثلا لو تريد فتح عملية BUY اكتب فقط

[PHP]
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
[/PHP]

MOVING_AVERAGE 16-04-2013 03:11 PM

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

غير اي كتابة ملونة للكلمة Point

وجعلها فقط point ب حرف p الصغير وليس حرف P الكبير

بعدما تضع التالي في دالة init

[PHP]
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
[/PHP]جرب ضع التعديلات بنفسك

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

ayoob 16-04-2013 04:41 PM

رد: دورة تعليم برمجة الاكسبريت
 
1 مرفق
اقتباس:

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 497208)
لكي ترتاح من مشكلة 5 ارقام

غير اي كتابة ملونة للكلمة Point

وجعلها فقط point ب حرف p الصغير وليس حرف P الكبير

بعدما تضع التالي في دالة init

[PHP]
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
[/PHP]جرب ضع التعديلات بنفسك

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

السلام عليكم اخي مصطفي ان لسة مبتدأ في البرمجة ولكن وضعت التعديل الدي قلت علية وفتح صفقة علي الباك تست بدون هدف ولا استوب
[PHP]extern int StopLoss=100;
extern int TakeProfit=10;
extern double Lot=0.10;
extern int Magic=14000;
int point,digits;
int Q;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double STOK1,STOK2;
STOK1=iStochastic(Symbol(),PERIOD_M1,5,3,3,0,0,MOD E_MAIN,3);
STOK2=iStochastic(Symbol(),PERIOD_M1,5,3,3,0,0,MOD E_MAIN,3);
if(STOK1<15&&OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,Q*3,Ask*point,As k*point,"AYOOB",Magic,0,Green);
}
if(STOK2>85&&OrdersTotal()==0)

{
OrderSend(Symbol(),OP_SELL,Lot,Bid,Q*3,Bid*point,B id*point,"AYOOB",Magic,0,Red);
}[/PHP]http://www.fx-arabia.com/vb/uploaded...1366119577.png

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

MOVING_AVERAGE 16-04-2013 05:06 PM

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

[PHP]
//+------------------------------------------------------------------+
//| Stok_scalper_EA.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"


extern int MagicNumber=1011;
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;


extern string jj="------";
extern int StopLoss=100;
extern int TakeProfit=10;


extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Stok_scalper EA";
extern int Slippage = 0;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 2;
int digits,Q;
double point;


int init()
{


if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
digits=2;
}
if(Digits==4)
{
point=0.0001;
digits=4;
}
if(Digits==3)
{
point=0.01;
digits=3;
}
if(Digits==5)
{
point=0.0001;
digits=5;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
int start()
{

if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}



double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);

if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){

if ((diStochastic0<d1)){
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
return(0);
}

if ((diStochastic2>d3)){
open(OP_SELL,Lots,Bid,TakeProfit,StopLoss) ;
return(0);
}
}
return (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
return(True);
}
}
}
return(false);
}

/*
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopL oss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
*/

void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldSto p,ldTake,lsComm,MagicNumber,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;

ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldSt op,ldTake,lsComm,MagicNumber,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }

//+------------------------------------------------------------------+



int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(t y==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,D igits),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}
[/PHP]

م. عبدالرحمن وردة 16-04-2013 06:49 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 497094)
يتم ذلك بواسطة مراجعة الصفقات الحالية والصفقات التي اغلقة

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

من بين هته الطرق مراجعة ربح الصفقة ان كان سالب

يعني ان الصفقة خسرت

حضرتك انا سؤالى عن الامر او المتغير الذي يقول لى حاله الصفقة الحالية او الصفقات الماضية.

MOVING_AVERAGE 17-04-2013 10:56 PM

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

المشاركة الأصلية كتبت بواسطة م. عبدالرحمن وردة (المشاركة 497352)
حضرتك انا سؤالى عن الامر او المتغير الذي يقول لى حاله الصفقة الحالية او الصفقات الماضية.

لم افهم بالتحديد السؤال

ayoob 18-04-2013 09:49 AM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 497298)
تفضل تعديل فتح الصفقات

[PHP]
//+------------------------------------------------------------------+
//| Stok_scalper_EA.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"


extern int MagicNumber=1011;
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;


extern string jj="------";
extern int StopLoss=100;
extern int TakeProfit=10;


extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Stok_scalper EA";
extern int Slippage = 0;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 2;
int digits,Q;
double point;


int init()
{


if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
digits=2;
}
if(Digits==4)
{
point=0.0001;
digits=4;
}
if(Digits==3)
{
point=0.01;
digits=3;
}
if(Digits==5)
{
point=0.0001;
digits=5;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
int start()
{

if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}



double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);

if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){

if ((diStochastic0<d1)){
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
return(0);
}

if ((diStochastic2>d3)){
open(OP_SELL,Lots,Bid,TakeProfit,StopLoss) ;
return(0);
}
}
return (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
return(True);
}
}
}
return(false);
}

/*
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopL oss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
*/

void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldSto p,ldTake,lsComm,MagicNumber,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;

ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldSt op,ldTake,lsComm,MagicNumber,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }

//+------------------------------------------------------------------+



int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(t y==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,D igits),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}
[/PHP]

تمام اخي مصطفي اضفت الكود واشتغل عادي وبي النسبة لي هد الكود ليس لة فائدة الان صحيح وقمت بي ازلة كلمة extren
[PHP]double lStopLoss = 1000;
double sStopLoss = 1000;
double lTakeProfit = 100;
double sTakeProfit = 100;[/PHP]

ziyadiah 18-04-2013 10:00 AM

رد: دورة تعليم برمجة الاكسبريت
 
يعطيك الف عافية اخي موفنج

م. عبدالرحمن وردة 18-04-2013 01:11 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 498181)
لم افهم بالتحديد السؤال

ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفقة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

*********************

MOVING_AVERAGE 18-04-2013 01:17 PM

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

المشاركة الأصلية كتبت بواسطة م. عبدالرحمن وردة (المشاركة 498462)
ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

*********************


حالة الصفقة يعني لو كان يعني اضهار ربح الصفقة الماضية

سنستخدم الدالة التالية خارج الدالة ستارت

[PHP]
double pofet_HISTORY(){
double pr=0;
for(int p=0;p<OrdersHistoryTotal();p++){
OrderSelect(p,SELECT_BY_POS,MODE_HISTORY);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
pr=OrderProfit();
}
return(pr);
}
[/PHP]

سنكتب داخل الدالة ستارت الامر

[PHP]
Comment(pofet_HISTORY());
[/PHP]

يضهر لنا هل ربح او خسارة الصفقة الماضية

كيف اعرف ربح او خسارة

اذا مانت النتيجة موجبة فهو ربح ان كانت سالبة فهو خسارة

MOVING_AVERAGE 18-04-2013 01:20 PM

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

المشاركة الأصلية كتبت بواسطة م. عبدالرحمن وردة (المشاركة 498462)
ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفقة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

*********************

ايقاف البرنامج

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

[PHP]
AccountBalance()
[/PHP]

لكي نتحكم في عمل الاكسبريت اعتماد علي الرصيد

نضع من شروط فتح الصفقات

[PHP]
if(AccountBalance()>50)
[/PHP]


الساعة الآن 05:39 PM

Powered by vBulletin® Copyright ©2000 - 2025

جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com