اف اكس ارابيا..الموقع الرائد فى تعليم فوركس 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)

MOVING_AVERAGE 28-03-2013 05:46 PM

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

ونضع حاضنة لتنفيذ الامر الذي نريده

كذالك شرط ضهور السهم الاحمر وحاضنة للامر الذي نريد تنفيذه

[PHP]
if(orderstotal()<MaxTrades&&indigreen<4000)
{

}

if(orderstotal()<MaxTrades&&indired<4000)
{

}
[/PHP]

مع تاكيد اننا نريد ان نقوم بعملية شراء عند ضهور سهم ازرق

وبيع عند ضهور سهم احمر

MOVING_AVERAGE 28-03-2013 05:53 PM

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

فان الامر سيتنفذ علي Ask

وهنا الربح بالنقاط يسمي TakeProfit

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

هو سعر الدخول + عدد نقاط الربح

ونفس الامر بالنسبة للخسارة

اذا سيصبح الكود عند ضهور سهم ازرق ولاننا سندخل عملية Buy

[PHP]
double TP;

double SL;

if(orderstotal()<MaxTrades&&indigreen<4000)
{
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",Ma gicNumber,0,Blue);
}

if(orderstotal()<MaxTrades&&indired<4000)
{
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*Q,SL,TP,"",M agicNumber,0,Red);
}

[/PHP]

وهذا هو الكود الكلي برتيب اكثر

imaddine 28-03-2013 05:58 PM

رد: دورة تعليم برمجة الاكسبريت
 
بارك الله فيك استاذي العزيز موفنج

imaddine 31-03-2013 03:09 AM

رد: دورة تعليم برمجة الاكسبريت
 
استاذ موفنج والله اتعبتك معاي لو ممكن مساعدة بسيطة
حول الاكسبيرت الذي عملناه في الدورة فقد قمت ببعض التعديلات
عليه مثل اضافة التريلنج استوب وكذلك اغلاق الصفقة لما تكون اشارة
معاكسة لكن للاسف لم تتفعل اي من هذه الدوال في الاكسبيرت
بل اصبح يفتح 5 صفقات معا بدل صفقة واحدة رغم اني حددت
عدد الصفقات المفتوحة بصفقة واحدة فقط فارجو ان تشرح لي
الاخطاء التي وقعت فيها لان الاكسبيرت للتعلم فقط لا اكثر
وبارك الله فيك وجعله في ميزان حسناتك
[PHP]extern double Lots = 0.1;
double point;
int digits,Q;
extern int MaxTrades = 1;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int TrailingStop=0;
extern int TrailingStep=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("");

if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);

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

double TP,SL;


if(indigreen<4000) {
if(orderstotal()<MaxTrades)
{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<4000){
if(orderstotal()<MaxTrades)
{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);

}


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




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);
}

}

//////////////////////////////////////////////////
void MoveTrailingStop()
{

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&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOp enPrice()+TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<Normal izeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingSte p*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(Norma lizeDouble(Ask+TrailingStop*point,digits)))||(Orde rStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);

}
}
}
}
}
}

[/PHP]

MOVING_AVERAGE 31-03-2013 02:47 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 487844)
استاذ موفنج والله اتعبتك معاي لو ممكن مساعدة بسيطة
حول الاكسبيرت الذي عملناه في الدورة فقد قمت ببعض التعديلات
عليه مثل اضافة التريلنج استوب وكذلك اغلاق الصفقة لما تكون اشارة
معاكسة لكن للاسف لم تتفعل اي من هذه الدوال في الاكسبيرت
بل اصبح يفتح 5 صفقات معا بدل صفقة واحدة رغم اني حددت
عدد الصفقات المفتوحة بصفقة واحدة فقط فارجو ان تشرح لي
الاخطاء التي وقعت فيها لان الاكسبيرت للتعلم فقط لا اكثر
وبارك الله فيك وجعله في ميزان حسناتك
[PHP]extern double Lots = 0.1;
double point;
int digits,Q;
extern int MaxTrades = 1;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int TrailingStop=0;
extern int TrailingStep=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("");

if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);

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

double TP,SL;


if(indigreen<4000) {
if(orderstotal()<MaxTrades)
{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<4000){
if(orderstotal()<MaxTrades)
{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);

}


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




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);
}

}

//////////////////////////////////////////////////
void MoveTrailingStop()
{

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&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOp enPrice()+TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<Normal izeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingSte p*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(Norma lizeDouble(Ask+TrailingStop*point,digits)))||(Orde rStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);

}
}
}
}
}
}

[/PHP]

اول ملاحضة

لاحظ انك حذفت return

من الدالة start

وهي معرفة علي انها دالة من نوع int يعني ترجع رقم وغير ممكن لا ترجع شئ

imaddine 31-03-2013 02:50 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 487932)
اول ملاحضة

لاحظ انك حذفت return

من الدالة start

وهي معرفة علي انها دالة من نوع int يعني ترجع رقم وغير ممكن لا ترجع شئ

فعلا لم انتبه لها
ربما حذفتها عند عملية التعديل

MOVING_AVERAGE 31-03-2013 02:55 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 487934)
فعلا لم انتبه لها
ربما حذفتها عند عملية التعديل

2- حاول ربط الشروط مع بعض في دلة شرطية واحدة باستعمال && ولا تجزء الشروط

imaddine 31-03-2013 03:03 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 487936)
2- حاول ربط الشروط مع بعض في دلة شرطية واحدة باستعمال && ولا تجزء الشروط

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

MOVING_AVERAGE 31-03-2013 03:16 PM

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

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


فيه شئ غير صحيح في برنامجك اخي

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

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

MOVING_AVERAGE 31-03-2013 03:33 PM

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

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

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

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


الساعة الآن 08:04 AM

Powered by vBulletin® Copyright ©2000 - 2025

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