لأن القسم ليس مخصص فقط للطلبات البرمجيه بل هو تعليمي في الأساس
بالإضافه كثير من الأعضاء يتجاهل هذا الموضوع
https://forum.arabictrader.com/t95019.html
بالإضافه طبعا إلى الإنشغال بتنظيم الخطط الخاصه بالقسم للعام الجديد 2012 بإذن الله
Printable View
لأن القسم ليس مخصص فقط للطلبات البرمجيه بل هو تعليمي في الأساس
بالإضافه كثير من الأعضاء يتجاهل هذا الموضوع
https://forum.arabictrader.com/t95019.html
بالإضافه طبعا إلى الإنشغال بتنظيم الخطط الخاصه بالقسم للعام الجديد 2012 بإذن الله
الخطأ الآن هو أن الإكسبرت يريد أن يفتح صفقة مثلا على اليورو دولار وفي نفس الوقت يفتح صفقة على عمله أخرى بالتالي يتم فتح الصفقه على أحد العملات
ثم يعطي خيار أن السيرفر مشغول على العمله الأخرى
بالتالي يجب أن تضع شرط
مع شروط الدخول الأخرىكود PHP:if(IsTradeContextBusy()==false)
وهو يعني إذا لم يكن السيرفر مشغول فسوف يتم تنفيذ الأمر
يجب أن تتأكد أولا إذا لم يكن يظهر خطأ في خانة Journal و Experts بالتالي العيب ليس من الإكسبرت وتكون قلصت حجم البحث عن المشكله
ثم تتأكد من أن قوانين الشركه لا تمنع فتح الصفقه لكن لا يوجد ما يسمى أن الشركة أبطلت عمل المضاعفات فالشركه لا أتعلم أنه مضاعفات لكن الشركه يأتي لها الأمر فتح صفقة بحجم لوت كذا
فيتم تنفيذ الأمر أو عدم تنفيذه إذا لم ينفذ فيجب أن يظهر لديك رقم الخطأ
كود:/+------------------------------------------------------------------+
//| SnakeForce SnakeInBorders.mq4 |
//| "" |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
//----
extern int cPeriod=24;
//----
double ForceUp[];
double ForceDown[];
double ResistanceUp[];
double ResistanceDown[];
double Mart[];
//----
double Snake_Sum, Snake_Weight, Snake_Sum_Minus, Snake_Sum_Plus;
//----
int init()
{
int draw_begin;
double indperiod,val1,val2;
string CommentStr;
draw_begin=3*cPeriod;
IndicatorBuffers(5);
SetIndexBuffer(0,ForceUp);
SetIndexBuffer(1,ForceDown);
SetIndexBuffer(2,ResistanceUp);
SetIndexBuffer(3,ResistanceDown);
SetIndexBuffer(4,Mart);
SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,2);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexStyle(4,DRAW_NONE);
SetIndexLabel(2,NULL);
SetIndexLabel(3,NULL);
SetIndexLabel(4,NULL);
SetIndexDrawBegin(0,draw_begin);
SetIndexDrawBegin(1,draw_begin);
SetIndexDrawBegin(2,draw_begin);
SetIndexDrawBegin(3,draw_begin);
SetIndexDrawBegin(4,draw_begin);
indperiod=1.0*cPeriod*Period();
if(indperiod<60)
{
CommentStr=DoubleToStr(indperiod,0);
CommentStr=" M"+CommentStr+", FORCE UP -DOWN ";
}
else
{
indperiod=indperiod/60;
if(indperiod>=24)
{
val1=MathAbs(MathRound(indperiod/24)-indperiod/24);
if(val1<0.01)
{
CommentStr=DoubleToStr(indperiod/24,0);
CommentStr=" D"+CommentStr+", FORCE UP -DOWN ";
}
else
{
CommentStr=DoubleToStr(indperiod/24,1);
CommentStr=" D"+CommentStr+", FORCE UP -DOWN ";
}
}
else
{
val1=MathAbs(MathRound(indperiod)-indperiod);
if(val1<0.01)
{
CommentStr=DoubleToStr(indperiod,0);
CommentStr=" H"+CommentStr+", FORCE UP -DOWN ";
}
else
{
CommentStr=DoubleToStr(indperiod,1);
CommentStr=" H"+CommentStr+", FORCE UP -DOWN ";
}
}
}
IndicatorShortName("SnakeInBorders"+CommentStr);
return(0);
}
//----
void deinit()
{
}
//----
int start()
{
int FirstPos, ExtCountedBars=0,i;
if(Bars<=50) return(0);
if(cPeriod<21) return(0);
ExtCountedBars=IndicatorCounted();
if (ExtCountedBars<0) return(-1);
if (ExtCountedBars>0) ExtCountedBars--;
FirstPos=Bars-ExtCountedBars-1;
if(FirstPos>Bars-cPeriod-7)
{
FirstPos=Bars-cPeriod-7;
Mart[FirstPos+cPeriod]=SnakeFirstCalc(FirstPos+cPeriod);
for(i=FirstPos+cPeriod-1;i>FirstPos;i--) SnakeNextCalc(i);
}
Snake(FirstPos);
return(0);
}
//----
void Snake(int Pos)
{
int i;
if(Pos<6) Pos=6;
Mart[Pos]=SnakeFirstCalc(Pos);
Drawing(Pos);
Pos--;
while(Pos>=5)
{
Mart[Pos]=SnakeNextCalc(Pos);
Drawing(Pos);
Pos--;
}
while(Pos>0)
{
Mart[Pos]=SnakeFirstCalc(Pos);
Drawing(Pos);
Pos--;
}
if(Pos==0)
{
// Mart[Pos]=iMA(NULL,0,6,0,MODE_LWMA,PRICE_TYPICAL,0);
Mart[Pos]=iMA(NULL,0,6,0,MODE_LWMA,PRICE_CLOSE,0);
Drawing(Pos);
}
return;
}
//----
double SnakePrice(int Shift)
{
// return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
return(Close[Shift]);
}
//----
double SnakeFirstCalc(int Shift)
{
int i, j, w;
Snake_Sum=0.0;
if(Shift<5)
{
Snake_Weight=0.0;
i=0;
w=Shift+5;
while(w>=Shift)
{
i++;
Snake_Sum=Snake_Sum+i*SnakePrice(w);
Snake_Weight=Snake_Weight+i;
w--;
}
while(w>=0)
{
i--;
Snake_Sum=Snake_Sum+i*SnakePrice(w);
Snake_Weight=Snake_Weight+i;
w--;
}
}
else
{
Snake_Sum_Minus=0.0;
Snake_Sum_Plus=0.0;
for(j=Shift-5,i=Shift+5,w=1; w<=5; j++,i--,w++)
{
Snake_Sum=Snake_Sum+w*(SnakePrice(i)+SnakePrice(j));
Snake_Sum_Minus=Snake_Sum_Minus+SnakePrice(i);
Snake_Sum_Plus=Snake_Sum_Plus+SnakePrice(j);
}
Snake_Sum=Snake_Sum+6*SnakePrice(Shift);
Snake_Sum_Minus=Snake_Sum_Minus+SnakePrice(Shift);
Snake_Weight=36;
}
return(Snake_Sum/Snake_Weight);
}
//----
double SnakeNextCalc(int Shift)
{
Snake_Sum_Plus=Snake_Sum_Plus+SnakePrice(Shift-5);
Snake_Sum=Snake_Sum-Snake_Sum_Minus+Snake_Sum_Plus;
Snake_Sum_Minus=Snake_Sum_Minus-SnakePrice(Shift+6)+SnakePrice(Shift);
Snake_Sum_Plus=Snake_Sum_Plus-SnakePrice(Shift);
return(Snake_Sum/Snake_Weight);
}
//----
void Drawing(int Shift)
{
double val,Dval,val1,val2,val11,val22,val3;
val= 5*(Mart[Shift]-Mart[ArrayMinimum(Mart,cPeriod,Shift)])/9;
Dval=5*(Mart[Shift]-
Mart[Shift+1]+
Mart[ArrayMinimum(Mart,cPeriod,Shift+1)]-
Mart[ArrayMinimum(Mart,cPeriod,Shift)] )/9;
if(Dval>0)
{
ForceUp[Shift]=val;
ResistanceUp[Shift]=0;
}
else
{
ForceUp[Shift]=0;
ResistanceUp[Shift]=val;
}
val= 5*(Mart[Shift]-Mart[ArrayMaximum(Mart,cPeriod,Shift)])/9;
Dval=5*(Mart[Shift]-
Mart[Shift+1]+
Mart[ArrayMaximum(Mart,cPeriod,Shift+1)]-
Mart[ArrayMaximum(Mart,cPeriod,Shift)] )/9;
if(Dval<0)
{
ForceDown[Shift]=val;
ResistanceDown[Shift]=0;
}
else
{
ForceDown[Shift]=0;
ResistanceDown[Shift]=val;
}
return;
}
السلام عليكم ورحمة الله
أنا أحاول تعلم MQL4 بدأت بكورس الأخ وضاح عطار و مؤشر Candle Length إتبعت الخطوات كما كانت موضحة لاكن لم أفهم لماذا لا يشتغل المؤشر أرجو التوضيح وشكرا:hands:
كود PHP://+------------------------------------------------------------------+
//| Candle Length.mq4 |
//| Copyright 2011 Cher Amine |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011 Cher Amine"
#property link "[email protected]"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_minimum 0
#property indicator_level1 0.0020
#property indicator_level2 0.0040
double BufLength1[];
double BufLength2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufLength1);
SetIndexBuffer(1,BufLength2);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
for(int i=0;i<Bars;i++)
}
BufLength1[i]=High[i]-Low[i];
BufLength2[i]=MathAbs(Close[i]-Open[i]);
{
return(0);
}
//+------------------------------------------------------------------+
وعليكم السلام ورحمة الله وبركاته
الخطأ عندك في هذا الجزء
الأقواس كتبتها بشكل خاطئكود PHP:for(int i=0;i<Bars;i++)
}
BufLength1[i]=High[i]-Low[i];
BufLength2[i]=MathAbs(Close[i]-Open[i]);
{
يجب أن تكون بهذا الشكل
كود PHP:for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
BufLength2[i]=MathAbs(Close[i]-Open[i]);
}
ممكن من الاساتده المبرمجين
كود استدعاء المؤشرين المرفقين
وجاكم الله كل الخير
بارك الله فيك أستاذي:eh_s(7): المؤشر شغال 100%
أكملت الكورس وصلت لمؤشر الإنفجار السعري في هذه المرحة بالضبط
هذا الجزء فهمته نوعا ماكود PHP:int limit, i, counted_bars = IndicatorCounted();
// إذا لم يكن هناك شمعات جديدة اخرج دون حساب
if(counted_bars < 0)
return(-1);
// إذا كان هناك شمعات جديدة احسب مقدار الشموع الجديدة فقط
if(counted_bars > 0)
counted_bars--;
limit = Bars - counted_bars;
// الحلقة تكون من عدد الشموع الجديدة المكونة وحتى الشمعة الحالية رقم صفر
for(i = limit - 1; i >= 0; i--)
لاكن هذا الجزءكود PHP:int limit, i, counted_bars = IndicatorCounted();
// إذا لم يكن هناك شمعات جديدة اخرج دون حساب
if(counted_bars < 0)
return(-1);
// إذا كان هناك شمعات جديدة احسب مقدار الشموع الجديدة فقط
if(counted_bars > 0)
counted_bars--;
لم أفهم معنى " limit " و المتغير "i"كود PHP:limit = Bars - counted_bars;
// الحلقة تكون من عدد الشموع الجديدة المكونة وحتى الشمعة الحالية رقم صفر
for(i = limit - 1; i >= 0; i--)
بالنسبه للمؤشر الأول فلا يمكنك إستخدام الداله iCustom لإستدعاء هذا المؤشر لذلك ستحتاج إلى إضافة الكود مباشرة بداخل الإكسبرت وسيكون كالآتي
حيثكود PHP:double yesterday_high=iHigh(NULL, PERIOD_H1,Highest(NULL, PERIOD_H1, MODE_HIGH, BarsBack, 0));
double yesterday_low=iLow(NULL, PERIOD_H1,Lowest(NULL, PERIOD_H1, MODE_LOW, BarsBack, 0));
BarsBack سيكون متغير خارجي تقوم بتعريفه كما هو معرف في المؤشر
بالنسبة للمؤشر الثاني سيكون كالآتيكود PHP:extern int BarsBack=8;
كود PHP:double UpperLine=iCustom(Symbol(),0,"NB-channel",2,0);
double LowerLine=iCustom(Symbol(),0,"NB-channel",1,0);
بالنسبة للجزء الأول فالفكره أننا لا نريد في كل مره يتحرك فيها السعر أن يقوم المؤشر بحساب قيم جميع الشمعات مره أخرى لذلك نحتاج إلى كود بحيث يقوم المؤشر بمعرفة عدد الشمعات التي تم حسابها سابقا ونطرح منه عدد الشموع الكلي الموجود على الشارت فينتج لنا عدد الشمعات التي لم يتم حسابها بعد فيتم حسابها
وفائدة هذا الكود هو زيادة سرعة المؤشر
شرح الكود كالآتي
أولا قام بتعريف المتغيرات limit و i و counted_bars
جعل قيمة counted_bars=indicatorCounted()
والداله indicator_counted تقوم بمعرفة عدد الشموع التي تم قرائتها في آخر مره
والآن لنفرض مثلا أن عدد الشموع على الشارت 20 شمعه وعدد الشموع التي تم قرائتها حتى الآن هو 19 شمعه أي أن هناك شمعه جديده إفتتحت
فتصبح قيمة
limit=Bars - counted_bars
أي limit = 20 - 19 أي limit=1 وهي عدد الشموع التي لم يتم حساب قيمها بعد
ثم يبدأ في إستخدام الحلقات وأنصحك بمراجعة هذا الموضوع لشرح الحلقات
https://forum.arabictrader.com/t93679.html#post1698141
ومعناه كالآتي
أولا يعطي قيمة المتغير i قيمة مبدئية وهي المتغير limit والذي قمنا بمعرفة قيمته سابقا
ثم يبدأ بالمقارنه هل قيمة i أكبر من أو تساوي 0 إذا كان ترو يطرح واحد من قيمة i ثم ينفذ العملية التي بداخل الحلقه for
الاخ الحبيب مستر دولار اسعد الله اوقاتك بكل خير
هل بالامكان استرجاع قيمة ادوات الميتاتريدر الموجودة في القائمة insert
مثل gann line / gann fan / andrews pichfork
او القنوات مثل linear regression / standard deviatioin
انا حاولت استخدام ObjectGetValueByShift للحصول على قيمة الحد العلوي او الحد السفلي للقناة linear regression ولكنها لا ترجع بشيء