النتائج 16 إلى 30 من 43
الموضوع: مشاكل فنيه وحلول منطقيه
- 05-03-2016, 12:51 PM #16
استاذي .. الله يجزاك بالخير ..
هل يتم وضع هذا الجزء داخل دالة void OnStart
كود:Line1.X1=Time [0]; Line1.Y1=ChartGetDouble(0,CHART_PRICE_MIN,0); Line1.X2=Time [200]; Line1.Y2=ChartGetDouble(0,CHART_PRICE_MAX,0); Line2.X1=Time [0]; Line2.Y1=ChartGetDouble(0,CHART_PRICE_MAX,0); Line2.X2=Time [200]; Line2.Y2=ChartGetDouble(0,CHART_PRICE_MIN,0); GetIntersectionPoint(Line1,Line2,iPoint); Alert("X=",iPoint.X," Y=",iPoint.Y);
كود:struct STR_POINT{ double X;//X double Y;//Y }; struct STR_LINE{ double X1;//Point1.X1 double X2;//Point1.X2 double Y1;//Point2.Y1 double Y2;//Point2.Y2 }; STR_LINE Line1; STR_LINE Line2; STR_POINT iPoint; double iif(bool con,double tr,double fl){ if(con){return(tr);}else{return(fl);} } bool GetIntersectionPoint(STR_LINE &eLine1 , STR_LINE &eLine2 , STR_POINT &IntersectionPoint){ double M1,M2; M1=(eLine1.Y2-eLine1.Y1)/iif((eLine1.X2-eLine1.X1)==0,1.0,(eLine1.X2-eLine1.X1)); M2=(eLine2.Y2-eLine2.Y1)/iif((eLine2.X2-eLine2.X1)==0,1.0,(eLine2.X2-eLine2.X1)); if(M1==M2)return false;//لا يوجد تقاطع IntersectionPoint.X=((M1*eLine1.X1)-(M2*eLine2.X1) +eLine2.Y1-eLine1.Y1) / (M1-M2); IntersectionPoint.Y=M1*IntersectionPoint.X -(M1*eLine1.X1) +eLine1.Y1; return true; }
وشكرا على ما تقدمه للجميع ^_^
- 05-03-2016, 02:32 PM #17
الكود الثاني يتم وضعه في أي مكان في بداية الإكسبيرت قبل أي شيئ
والكود الأول يتم وضعه في المكان الذي تريد ان تعرف نقطة التقاطع واستخدم الامر التالي
GetIntersectionPoint
وهو الامر المستخدم لمعرفة احداثيات نقطة التقاطع
ولكن قم بملئ المتغيرات Line1 و Line2 بإحداثيات الخطين الذي تريد إيجاد تقاطعهم قبل استدعاء امر إيجاد نقطة التقاطع.
واستخدم نقطة التقاطع كما هو موضح في الامر Alert الذي يعرض احداثيات نقطة التقاطع ولكن يمكن استخدام الاحداثيات مباشرة بدلا من عرضها أولا.
- 05-03-2016, 05:44 PM #18
- 05-03-2016, 07:01 PM #19
يمكنك استخدام نفس الأسماء اكثر من مرة
فقط اعد تعبئة المتغيرات في الخطين مرة أخرى واوجد التقاطع بنفس الامر أيضا
وانقل نقطة التقاطع في متغير اخر لتحتفظ بها قبل إيجاد تقاطع جديد
- 05-03-2016, 11:00 PM #20
الله يعطيك العافية .. والله ما قصرت وبيض الله وجهك ..
استفسار استاذي ..
لحظت ان معادلة نقطة التقاطع لا تكون صحيحه على ازواج الين
وانا استخدم هذا الكود
كود PHP:if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits<4)
{
point=0.01;
digits=2;
}
else
{
point=0.0001;
digits=4;
}
- 05-03-2016, 11:12 PM #21
- 06-03-2016, 12:05 AM #22
- 06-03-2016, 12:21 AM #23
آخر تعديل بواسطة remon78eg ، 06-03-2016 الساعة 12:23 AM
- 06-03-2016, 02:22 PM #24
فهمت عليك استاذي ..
محاولة مني لتفادي الجابات والاخطاء
جعلت المعادلة محصورة في فريم واحد مثلا اليومي ..
واستخدمت هذا الكود ياتي بي توقيت شمعة افتتاح اليوم السابق على فريم الساعة 00:00
كود PHP:iTime(Symbol(),1440,1)
وحاولت استخدام
كود PHP:iTime(Symbol(),1440,0)-1
وشكرا جزيلا ^_^
- 06-03-2016, 06:12 PM #25
حل مشكلة الجابات
كود إيجاد موقع الشمعة عن طريق زمنها
كود PHP:int iPos(string symbol,int time,int M15){
int i;
datetime t1,t2;
t2=time;//StrToTime(time);
for(i=0;i<10000;i++){
t1=iTime(symbol,M15,i);
if(t1-t2==0){return(i);}
}
return(-1);
}
كود PHP:#property copyright "remon78eg , 04/03/2016 d/m/y"
#property version "1.00"
#property description ""
#property indicator_chart_window
extern bool CalcGaps=true;
//========================================================================================
struct STR_POINT{
double X;//X
double Y;//Y
};
struct STR_LINE{
double X1;//Point1.X1
double X2;//Point1.X2
double Y1;//Point2.Y1
double Y2;//Point2.Y2
};
STR_LINE Line1;
STR_LINE Line2;
STR_POINT iPoint;
//==========================================
double iif(bool con,double tr,double fl){
if(con){return(tr);}else{return(fl);}
}
//==========================================
int iPos(string symbol,int time,int M15){
int i;
datetime t1,t2;
t2=time;//StrToTime(time);
for(i=0;i<10000;i++){
t1=iTime(symbol,M15,i);
if(t1-t2==0){return(i);}
}
return(-1);
}
//==========================================
bool GetIntersectionPoint(STR_LINE &eLine1 , STR_LINE &eLine2 , STR_POINT &IntersectionPoint,bool eCalcGaps){
double M1,M2;
if(eCalcGaps){
eLine1.X1=iPos(Symbol(),eLine1.X1,Period());
eLine1.X2=iPos(Symbol(),eLine1.X2,Period());
eLine2.X1=iPos(Symbol(),eLine2.X1,Period());
eLine2.X2=iPos(Symbol(),eLine2.X2,Period());
}
M1=(eLine1.Y2-eLine1.Y1)/iif((eLine1.X2-eLine1.X1)==0,1.0,(eLine1.X2-eLine1.X1));
M2=(eLine2.Y2-eLine2.Y1)/iif((eLine2.X2-eLine2.X1)==0,1.0,(eLine2.X2-eLine2.X1));
if(M1==M2)return false;//لا يوجد تقاطع
IntersectionPoint.X=((M1*eLine1.X1)-(M2*eLine2.X1) +eLine2.Y1-eLine1.Y1) / (M1-M2);
IntersectionPoint.Y=M1*IntersectionPoint.X -(M1*eLine1.X1) +eLine1.Y1;
if(eCalcGaps){ IntersectionPoint.X=iTime(Symbol(),Period(),IntersectionPoint.X); }
return true;
}
//========================================================================================
int OnInit(){
EventSetMillisecondTimer(250);
return(INIT_SUCCEEDED);
}
//------------------------------
void OnDeinit(const int reason){
EventKillTimer();
}
void OnTimer(){
Line1.X1=iTime(NULL,0,WindowFirstVisibleBar()-10);
Line1.Y1=ChartGetDouble(0,CHART_PRICE_MIN,0);
Line1.X2=iTime(NULL,0,WindowFirstVisibleBar()-WindowBarsPerChart()+10);
Line1.Y2=ChartGetDouble(0,CHART_PRICE_MAX,0);
Line2.X1=iTime(NULL,0,WindowFirstVisibleBar()-10);
Line2.Y1=ChartGetDouble(0,CHART_PRICE_MAX,0);
Line2.X2=iTime(NULL,0,WindowFirstVisibleBar()-WindowBarsPerChart()+10);
Line2.Y2=ChartGetDouble(0,CHART_PRICE_MIN,0);
if(ObjectFind(0,"Line1")==-1){ObjectCreate(0,"Line1",OBJ_TREND,0,Line1.X1,Line1.Y1,Line1.X2,Line1.Y2);ObjectSetInteger(0,"Line1",OBJPROP_RAY,false);ObjectSetInteger(0,"Line1",OBJPROP_SELECTED,true);}
if(ObjectFind(0,"Line2")==-1){ObjectCreate(0,"Line2",OBJ_TREND,0,Line2.X1,Line2.Y1,Line2.X2,Line2.Y2);ObjectSetInteger(0,"Line2",OBJPROP_RAY,false);ObjectSetInteger(0,"Line2",OBJPROP_SELECTED,true);}
GetIntersectionPoint(Line1,Line2,iPoint,CalcGaps);
if(ObjectFind(0,"Arrow1")==-1){ObjectCreate(0,"Arrow1",OBJ_ARROW_BUY,0,iPoint.X,iPoint.Y);ObjectSetInteger(0,"Arrow1",OBJPROP_SELECTED,true);ObjectSetInteger(0,"Arrow1",OBJPROP_COLOR,clrGreen);}
Line1.Y1=ObjectGet("Line1",OBJPROP_PRICE1);
Line1.Y2=ObjectGet("Line1",OBJPROP_PRICE2);
Line1.X1=ObjectGet("Line1",OBJPROP_TIME1);
Line1.X2=ObjectGet("Line1",OBJPROP_TIME2);
Line2.Y1=ObjectGet("Line2",OBJPROP_PRICE1);
Line2.Y2=ObjectGet("Line2",OBJPROP_PRICE2);
Line2.X1=ObjectGet("Line2",OBJPROP_TIME1);
Line2.X2=ObjectGet("Line2",OBJPROP_TIME2);
GetIntersectionPoint(Line1,Line2,iPoint,CalcGaps);
ObjectDelete(0,"Arrow1");ObjectCreate(0,"Arrow1",OBJ_ARROW_BUY,0,iPoint.X,iPoint.Y);ObjectSetInteger(0,"Arrow1",OBJPROP_SELECTED,true);ObjectSetInteger(0,"Arrow1",OBJPROP_COLOR,clrGreen);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]){
return(rates_total);
}
في السابق
الان
تم إضافة اختيار الحساب بطول الزمن او الحساب بعدد الشموع.
- 06-03-2016, 06:58 PM #26
والله عاجز عن شكرك على ما قدمته
تقريبا لي اكثر من سنة احاول اعدل على استراتيجية واطور وارغب بعمل باك تيست
كنت دايما اتوقف بسبب هذي المعادلة ,,
(ياريت لو تجعل المعادلة بعد التعديل الى كود اكسبيرت )
وياريت لو تشرح لي كيف الاستفادة اكثر من كود
كود PHP:int iPos(string symbol,int time,int M15)
واعتذر بشده على تعبك معااي ..
- 06-03-2016, 07:26 PM #27
فائدة هذا الكود هو تحويل زمن الشمعة الى رقم يبدأ من صفر عند اخر شمعة حدثت ويزيد بمقدار 1 كلما رجعنا شمعة الى الماضي
فبدلا من ان نتعامل مع طول عبارة عن فرق بين زمنين فسوف نتعامل مع طول هو فرق بين عدد الشموع وهو لا يشمل الشموع المفقودة لذلك سيكون مجرد طول عادي لا يتأثر بالجاب الأسبوعي او بالشموع الناقصة.
ثم بعد إيجاد احداثيات نقطة التقاطع بتلك الطريقة ، فالإحداثي السيني سيكون بالطول وليس بالزمن فحولناه الى زمن حتى نعرف زمن التقاطع مع سعر التقاطع (محور س،ص) لرسم السهم الأخضر عند السعر والزمن لنقطة التقاطع.
- 06-03-2016, 07:47 PM #28
- 06-03-2016, 07:52 PM #29
هذا هو الكود الجديد
كود PHP:bool GetIntersectionPoint(STR_LINE &eLine1 , STR_LINE &eLine2 , STR_POINT &IntersectionPoint,bool eCalcGaps){
double M1,M2;
if(eCalcGaps){
eLine1.X1=iPos(Symbol(),eLine1.X1,Period());
eLine1.X2=iPos(Symbol(),eLine1.X2,Period());
eLine2.X1=iPos(Symbol(),eLine2.X1,Period());
eLine2.X2=iPos(Symbol(),eLine2.X2,Period());
}
M1=(eLine1.Y2-eLine1.Y1)/iif((eLine1.X2-eLine1.X1)==0,1.0,(eLine1.X2-eLine1.X1));
M2=(eLine2.Y2-eLine2.Y1)/iif((eLine2.X2-eLine2.X1)==0,1.0,(eLine2.X2-eLine2.X1));
if(M1==M2)return false;//لا يوجد تقاطع
IntersectionPoint.X=((M1*eLine1.X1)-(M2*eLine2.X1) +eLine2.Y1-eLine1.Y1) / (M1-M2);
IntersectionPoint.Y=M1*IntersectionPoint.X -(M1*eLine1.X1) +eLine1.Y1;
if(eCalcGaps){ IntersectionPoint.X=iTime(Symbol(),Period(),IntersectionPoint.X); }
return true;
}
كود PHP:
GetIntersectionPoint(Line1,Line2,iPoint,true);
آخر تعديل بواسطة remon78eg ، 06-03-2016 الساعة 07:54 PM
- 06-03-2016, 07:55 PM #30
الله يوفقكك استاذ ريمون رفعت انت شخص طيب بارك الله لك