اف اكس ارابيا..الموقع الرائد فى تعليم فوركس 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 03-03-2013 09:44 PM

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

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

farouk_cia 15-03-2013 06:40 PM

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

MOVING_AVERAGE 15-03-2013 07:27 PM

رد: دورة تعليم برمجة الاكسبريت
 
عمل اكسبريت متطور نوع ما لمؤشر RSI

سنضع فيه

الستوب لوز

التيك بروفيت

حجم العقد

اضافتا الي دالة ملاحقة الربح

مع الاخذ في الحسبان الدخول حسب اتجاه مؤشر ال zigzag

بحيث لو تشكلة قمة جديدة سندخل sell فقط

وان تشكل قاع جديد سندخل buy فقط

Mohamed_Amr 15-03-2013 07:40 PM

رد: دورة تعليم برمجة الاكسبريت
 
متابعين معاك اخى مصطفى
عندى فكرة لعمل اكسبريت يعتمد على مؤشر rsi بشكل مختلف
وبالتوفيق حبيبى

MOVING_AVERAGE 15-03-2013 10:09 PM

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

المشاركة الأصلية كتبت بواسطة Mohamed_Amr (المشاركة 480157)
متابعين معاك اخى مصطفى
عندى فكرة لعمل اكسبريت يعتمد على مؤشر rsi بشكل مختلف
وبالتوفيق حبيبى

يمكن طرح افكارك ونضيفها للاكسبريت

MOVING_AVERAGE 15-03-2013 10:11 PM

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

[PHP]
extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=2233;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,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()
{
//----



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


[/PHP]

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

MOVING_AVERAGE 15-03-2013 10:22 PM

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

[PHP]
double rsi=iRSI(0,0,periodRSI,appliedRSI,shift);
[/PHP]

ونضيف هذه المتغيرات الخارجية لكي نتحكم في اعددات RSI

خارج الدالة start

[PHP]
extern int periodRSI=14;

للتحكم في دور

extern int appliedRSI=0;

للتحكم في التطبيق علي الاغلاقات او الافتتاحات ...اخ

extern int shift=0;

للتحكم في الشمعة نضع 0 للحالية و 1 للسابقة وهكذا


[/PHP]

MOVING_AVERAGE 15-03-2013 10:31 PM

رد: دورة تعليم برمجة الاكسبريت
 
اذا سيصبح الكود بعد اضافة rsi والمتغيرات الخارجية

[PHP]
extern int periodRSI=14;
extern int appliedRSI=0;
extern int shift=0;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=2233;
extern int MaxTrades = 1;
extern double Lots = 0.1;
double point;

int digits,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 rsi=iRSI(0,0,periodRSI,appliedRSI,shift);


//----
return(0);
}
//+------------------------------------------------------------------+
[/PHP]

MOVING_AVERAGE 15-03-2013 10:37 PM

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

للتذكرير هذه طريقة وضعتها بالصدفة ولم اتاجر عليها من قبل

والهدف منها هو تعليمي فقط

واذا اي احد له فكرت اكسبريت تعتمد علي rsi فليضعها وسيتم تنفيذها كمثال

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

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

meto123123 22-03-2013 12:32 AM

رد: دورة تعليم برمجة الاكسبريت
 
ربنا معاك يا اخى
ويارب يرزقك الجنة ويزيدك من علمه

yasser81 27-03-2013 09:17 AM

رد: دورة تعليم برمجة الاكسبريت
 
هل انتهى الموضوع......... الله يعينك يا اخونا فوفينج........ بالنسبة لل rsi كيف نضيف المستوياتniveaux ......

imaddine 28-03-2013 12:47 AM

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

imaddine 28-03-2013 01:21 AM

رد: دورة تعليم برمجة الاكسبريت
 
1 مرفق
الواجب في المرفقات
اكسبريت للموفنج او المؤشر الذي قمت بعمله من موضوع
http://fx-arabia.net/vb/showthread.php?t=27491

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

تحياتي

MOVING_AVERAGE 28-03-2013 01:43 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 486500)
الواجب في المرفقات
اكسبريت للموفنج او المؤشر الذي قمت بعمله من موضوع
http://fx-arabia.net/vb/showthread.php?t=27491

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

تحياتي

ماشاء الله عليك

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

imaddine 28-03-2013 04:32 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 486649)
ماشاء الله عليك

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

هذا هو الكود استاذ موفنج
كود:

extern double  Lots = 0.1;
double point; 
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int  MaxTrades = 1; 
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 ;
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 
  double indigreen=iCustom(0,0,"imad ",1,1);
  double indired=iCustom(0,0,"imad ",0,1);
    if(orderstotal()<MaxTrades&&indigreen<4000)
 
 
  if(orderstotal()<MaxTrades&&indired<4000)
 

double TP; 
double SL; 

TP=Ask+TakeProfit*point;
SL=Ask-StopLoss*point;

 TP=Bid-TakeProfit*point; 
SL=Bid+StopLoss*point; 

if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
  if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
   
  if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
  if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} 

  OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue); 
  OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red); 

//----
 
//----
  return(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);
  }


MOVING_AVERAGE 28-03-2013 04:48 PM

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

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

MOVING_AVERAGE 28-03-2013 04:50 PM

رد: دورة تعليم برمجة الاكسبريت
 
[PHP]

extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MaxTrades = 1;
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 ;
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

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




[/PHP]


في هذا الجزء كل شئ جيد

وبالنسبة لهذه الكتابة

[PHP]
int magic=0 ;
[/PHP]

ماهو هدفها ؟؟؟

سنتابع ونعرف

MOVING_AVERAGE 28-03-2013 04:54 PM

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

[PHP]
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);
}
[/PHP]دالة تحسب عدد الصفقات التي فتحها الاكسبريت وهي صحيحة

MOVING_AVERAGE 28-03-2013 04:58 PM

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

مع التذكير ان هذه الدالة تعيد ما كتب فيها كل تغير في السعر

MOVING_AVERAGE 28-03-2013 05:00 PM

رد: دورة تعليم برمجة الاكسبريت
 
هنا عرفنا متغيرين واسندنا الهم قيم المؤشر الخارجي الذي اسمه imad

ياريت ترفق المؤشر الخارجي لكي نفحصه ايضا

[PHP]
double indigreen=iCustom(0,0,"imad ",1,1);
double indired=iCustom(0,0,"imad ",0,1);
[/PHP]

imaddine 28-03-2013 05:02 PM

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

المشاركة الأصلية كتبت بواسطة MOVING_AVERAGE (المشاركة 486762)
هنا عرفنا متغيرين واسندنا الهم قيم المؤشر الخارجي الذي اسمه imad

ياريت ترفق المؤشر الخارجي لكي نفحصه ايضا

[PHP]
double indigreen=iCustom(0,0,"imad ",1,1);
double indired=iCustom(0,0,"imad ",0,1);
[/PHP]

هذا هو الكود استاذ موفنج
[PHP]#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
#property indicator_color4 Lime
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2

double CrossUp1[];
double CrossDown1[];
double FastMA[];
double SlowMA[];
int width=EMPTY;
color clr=CLR_NONE;

extern int ExtPeriodFastMA = 8;
extern int ExtPeriodSlowMA = 14;

extern int ExtModeFastMA = 0;
extern int ExtModeSlowMA = 0;

extern int ExtPriceFastMA = 0;
extern int ExtPriceSlowMA = 0;
extern bool showMA=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{

//---- indicators
SetIndexStyle( 0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 234);
SetIndexBuffer(0, CrossDown1);

SetIndexStyle( 1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 233);
SetIndexBuffer(1, CrossUp1);

SetIndexStyle( 2, DRAW_LINE );
SetIndexBuffer( 2, FastMA );
SetIndexStyle( 3, DRAW_LINE );
SetIndexBuffer( 3, SlowMA );


//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int x,i, counter;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
x=Bars-counted_bars;

for(i =0 ; i<x ; i++)
{
if(showMA==true)
{
FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
}
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
double fasterEMAprevious=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+1 );
double fasterEMAprevious1=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+2 );
double slowerEMAprevious =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+1 );
double slowerEMAprevious1 =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+2 );
if(fasterEMAprevious<slowerEMAprevious&&fasterEMAp revious1>slowerEMAprevious1)
{
CrossDown1[i+1]=High[i+1]+Range*0.5;
}
if(fasterEMAprevious>slowerEMAprevious&&fasterEMAp revious1<slowerEMAprevious1)
{
CrossUp1[i+1]=Low[i+1]-Range*0.5;

}


}

//----

//----
return(0);
}
//+------------------------------------------------------------------+[/PHP]

MOVING_AVERAGE 28-03-2013 05:18 PM

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

المشاركة الأصلية كتبت بواسطة imaddine (المشاركة 486763)
هذا هو الكود استاذ موفنج
[PHP]#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
#property indicator_color4 Lime
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2

double CrossUp1[];
double CrossDown1[];
double FastMA[];
double SlowMA[];
int width=EMPTY;
color clr=CLR_NONE;

extern int ExtPeriodFastMA = 8;
extern int ExtPeriodSlowMA = 14;

extern int ExtModeFastMA = 0;
extern int ExtModeSlowMA = 0;

extern int ExtPriceFastMA = 0;
extern int ExtPriceSlowMA = 0;
extern bool showMA=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{

//---- indicators
SetIndexStyle( 0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 234);
SetIndexBuffer(0, CrossDown1);

SetIndexStyle( 1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 233);
SetIndexBuffer(1, CrossUp1);

SetIndexStyle( 2, DRAW_LINE );
SetIndexBuffer( 2, FastMA );
SetIndexStyle( 3, DRAW_LINE );
SetIndexBuffer( 3, SlowMA );


//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int x,i, counter;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
x=Bars-counted_bars;

for(i =0 ; i<x ; i++)
{
if(showMA==true)
{
FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
}
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
double fasterEMAprevious=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+1 );
double fasterEMAprevious1=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+2 );
double slowerEMAprevious =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+1 );
double slowerEMAprevious1 =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+2 );
if(fasterEMAprevious<slowerEMAprevious&&fasterEMAp revious1>slowerEMAprevious1)
{
CrossDown1[i+1]=High[i+1]+Range*0.5;
}
if(fasterEMAprevious>slowerEMAprevious&&fasterEMAp revious1<slowerEMAprevious1)
{
CrossUp1[i+1]=Low[i+1]-Range*0.5;

}


}

//----

//----
return(0);
}
//+------------------------------------------------------------------+[/PHP]

تمام هذا نفس المؤشر الذي شرحناه

MOVING_AVERAGE 28-03-2013 05:21 PM

رد: دورة تعليم برمجة الاكسبريت
 
[PHP]
double indigreen=iCustom(0,0,"imad ",1,1);

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


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

وهذا يرمز للسهم الاحمر في الشمعة السابقة


[/PHP]

و نداء المؤشر صحيح اذا كان اسم المؤشر الذي واضعه مع المؤشرات imad

MOVING_AVERAGE 28-03-2013 05:22 PM

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

الا هنا كل شئ صحيح

MOVING_AVERAGE 28-03-2013 05:24 PM

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

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

[/PHP]وضعنا شرط ضهور السهم لاكن لم نضع بعده اي عمل يقوم به الاكسبريت يعني هنا هذه الكتابة غير صحيحة نحذفها تماما

MOVING_AVERAGE 28-03-2013 05:26 PM

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

[PHP]
double TP;
double SL;
TP=Ask+TakeProfit*point;
SL=Ask-StopLoss*point;
TP=Bid-TakeProfit*point;
SL=Bid+StopLoss*point;

[/PHP]

لماذا الكتابه غير صحيحة

سنشرحها خطوة بخطوة

MOVING_AVERAGE 28-03-2013 05:34 PM

رد: دورة تعليم برمجة الاكسبريت
 
[PHP]

double TP;

هنا التعريف صحيح
double SL;
هنا التعريف صحيح

المشكلة في التالي

TP=Ask+TakeProfit*point;

جعلنا قيمة TP تساوي السعر الحالي Ask واضفنا له عدد النقاط التي نريدها

SL=Ask-StopLoss*point;


جعلنا قيمة SL تساوي السعر الحالي Ask وانقصنا منه عدد النقاط التي نريدها

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

وعند تنفيذ اوامر sell فهي غير صحيحة



TP=Bid-TakeProfit*point;

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

SL=Bid+StopLoss*point;

نفس الشئ يقوم الاكسبريت بمسح الاسناد الاول ووضع اسناد اخر

وهنا تداخل في وضع الاهداف والستوب لوز



[/PHP]

بالمختصر نمسح هذه الكتابة ايضا ونرتب الكتابة اكثر

MOVING_AVERAGE 28-03-2013 05:37 PM

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

هي غير مرتبه وغير دقيقة

[PHP]
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",Ma gicNumber,0,Blue);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",M agicNumber,0,Red);
[/PHP]

MOVING_AVERAGE 28-03-2013 05:39 PM

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

MOVING_AVERAGE 28-03-2013 05:41 PM

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

[PHP]
double TP;

double SL;
[/PHP]

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

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

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


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

Powered by vBulletin® Copyright ©2000 - 2025

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