عرض مشاركة واحدة
قديم 01-04-2013, 12:51 AM   المشاركة رقم: 129
الكاتب
imaddine
عضو نشيط

البيانات
تاريخ التسجيل: Dec 2012
رقم العضوية: 12839
المشاركات: 202
بمعدل : 0.05 يوميا

الإتصالات
الحالة:
imaddine غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : MOVING_AVERAGE المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: دورة تعليم برمجة الاكسبريت

المشاركة الأصلية كتبت بواسطة imaddine نقره لعرض الصورة في صفحة مستقلة
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 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  
رد مع اقتباس
  #129  
قديم 01-04-2013, 12:51 AM
imaddine imaddine غير متواجد حالياً
عضو نشيط
افتراضي رد: دورة تعليم برمجة الاكسبريت

المشاركة الأصلية كتبت بواسطة imaddine نقره لعرض الصورة في صفحة مستقلة
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 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]

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




رد مع اقتباس