النتائج 1 إلى 15 من 43
الموضوع: مشاكل فنيه وحلول منطقيه
- 03-03-2016, 04:45 PM #1
مشاكل فنيه وحلول منطقيه
هل لديك مشكلة فنية تحتاج إلى حل منطقي
ضع مشكلتك هنا وسنعمل على حلها بإذن الله
--- --- --- ---
رابط الموضوع هنا
https://forum.arabictrader.com/t235625.html#post3043064
بقلم: ريمون رفعت
- 03-03-2016, 04:47 PM #2
- 03-03-2016, 08:17 PM #3
أولا لإيجاد نقطة التقاطع يجب إيجاد معادلة المستقيمين
ولإيجاد معادلة الخط المستقيم يجب إيجاد الميل
ولإيجاد الميل يجب ان نستخدم نقطتين على هذا الخط
نوجد ميل الخط الأول بواسطة النقطتين (س=1،ص=1) - (س=3،ص=3)
معادلة الميل هي
ص-ص ÷ س-س
3-1 ÷ 3-1 = 2÷2 = 1
ميل الخط الأول م = 1
نوجد معادلة الخط الأول
ص = م س - م (س) + (ص) حيث م= الميل ، (س)= نقطة ، (ص)=نقطة
نعوض عن قيم (س)=1 (ص)=1 او (س)=3 (ص)=3
ص=1س-(1×1)+1
ص=س-1+1
ص=س
--------------------
نوجد ميل الخط الثاني بواسطة النقطتين (س=3،ص=1) - (س=1،ص=3)
ص-ص ÷ س-س
1-3 ÷ 3-1 = -2 ÷ 2 = -1
ميل الخط الثاني هو -1
نوجد معادلة الخط الثاني
ص = م س - م (س) + (ص) حيث م= الميل ، (س)= نقطة ، (ص)=نقطة
نعوض عن قيم (س)=3 (ص)=1 او (س)=1 (ص)=3
ص=-1س-(-1×3)+1
ص=-س-(-3)+1
ص=-س+3+1
ص=-س+4
ص=4-س
------------------------
بما ان نقطة التقاطع هي نقطة مشتركة على الخطين
اذا هذه النقطة يجب ان تحقق المعادلتين معاً
فنحل المعادلتين لايجاد قيمه س ، ص
----------------------------
المعالتين هما
ص=س
ص=4-س
بالتعويض عن قيمة س بقيمة ص
ص=4-ص
ص+ص=4
2ص=4
ص=2
بما ان س=ص ، اذا س=2
وبما ان النقطة هي (س،ص)
اذاً فنقطة التقاطع هي (2،2)
كما هو موضح في الرسم في الصورة
- 03-03-2016, 08:28 PM #4
ملحوظة
---------
من لديه حل آخر مختلف او مشابه
فليتفضل ويكتبه لان توفر عدة حلول متشابهه يؤكد ان الطريقة صحيحة
وتوفر حلول مختلفة يمكننا ان نختار منها اسهل وافضل حل
- 04-03-2016, 12:43 PM #5
- 04-03-2016, 02:12 PM #6
- 04-03-2016, 04:58 PM #7تحويل المعادلة لكود مع شرح الخطوات
طريقة تحويل المعادلة التي في المشاركة رقم 3 الى كود برمجي
المدخلات ستكون احداثيات الخطين
المخرجات ستكون نقطة التقاطع
الدالة ستكون كالتالي
ooooooo
GetIntersectionPoint(ax1,ay1,ax2,ay2 , bx1,by1,bx2,by2 )
GetIntersectionPoint( 1 , 1 , 3 , 3 , 1 , 3 , 3 , 1 )
ooooooo
------------------------------------------------
أولا معادلة إيجاد الميل هي
م=ص-ص ÷ س-س
oooooo
M1=(ay2-ay1)/(ax2-ax1)
M2=(by2-by1)/(bx2-bx1)
oooooo
--------------------------------------------
اوجدنا الميل للخطين
نوجد معادلة الخطين
--------------------------------------------
ص = م س - م (س) + (ص) حيث م= الميل ، (س)= نقطة ، (ص)=نقطة
oooooo
Y=M1*X-M1*ax1+ay1
Y=M2*X-M2*bx1+by1
where : (X,Y)=IntersectionPointoooooo
--------------------------------------------
اوجدنا معادلة الخطين
علينا إيجاد نقطة التقاطع بحل المعادلتين
والتعويض عن س لايجاد معادلة نوجد منها قيمة ص كالتالي
--------------------------------------------
Y=M1*X-M1*ax1+ay1
Y=M2*X-M2*bx1+by1بالتعويض عن Y بقيمة Y
Y=M1*X -(M1*ax1) +ay1
Y=M2*X -(M2*bx1) +by1
M1*X -(M1*ax1) +ay1 = M2*X -(M2*bx1) +by1
M1*X-M2*X = (M1*ax1) -(M2*bx1) +by1-ay1
(M1-M2)*X = (M1*ax1) -(M2*bx1) +by1-ay1
X = ((M1*ax1) -(M2*bx1) +by1-ay1) / (M1-M2)
Y=M1*X -(M1*ax1) +ay1
X=((M1*ax1)-(M2*bx1) +by1-ay1) / (M1-M2)
Y=M1*X -(M1*ax1) +ay1
------------------------------------
اوجدنا X ،Y
-------------------------------------
نحول تلك المعادلات لكود ونختبره لنعلم هل يوجد أخطاء ام لا
كود PHP: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
};
bool GetIntersectionPoint(STR_LINE &Line1 , STR_LINE &Line2 , STR_POINT &IntersectionPoint){
double M1,M2;
M1=(Line1.Y2-Line1.Y1)/(Line1.X2-Line1.X1);
M2=(Line2.Y2-Line2.Y1)/(Line2.X2-Line2.X1);
if(M1==M2)return false;
IntersectionPoint.X=((M1*Line1.X1)-(M2*Line2.X1) +Line2.Y1-Line1.Y1) / (M1-M2);
IntersectionPoint.Y=M1*IntersectionPoint.X -(M1*Line1.X1) +Line1.Y1;
return true;
}
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[]){
STR_LINE Line1;
STR_LINE Line2;
STR_POINT iPoint;
Line1.X1=1;
Line1.Y1=1;
Line1.X2=3;
Line1.Y2=3;
Line2.X1=1;
Line2.Y1=3;
Line2.X2=3;
Line2.Y2=1;
GetIntersectionPoint(Line1,Line2,iPoint);
Alert("X=",iPoint.X);
Alert("Y=",iPoint.Y);
return(rates_total);
}
آخر تعديل بواسطة remon78eg ، 04-03-2016 الساعة 05:01 PM
- 04-03-2016, 07:09 PM #8
- 04-03-2016, 11:57 PM #9كود PHP:
#property copyright "remon78eg , 04/03/2016 d/m/y"
#property version "1.00"
#property description ""
#property indicator_chart_window
//========================================================================================
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;
bool GetIntersectionPoint(STR_LINE &eLine1 , STR_LINE &eLine2 , STR_POINT &IntersectionPoint){
double M1,M2;
M1=(eLine1.Y2-eLine1.Y1)/(eLine1.X2-eLine1.X1);
M2=(eLine2.Y2-eLine2.Y1)/(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;
}
//========================================================================================
int OnInit(){
EventSetMillisecondTimer(250);
return(INIT_SUCCEEDED);
}
//------------------------------
void OnDeinit(const int reason){
EventKillTimer();
}
void OnTimer(){
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);
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);
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);
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);
}
- 05-03-2016, 12:22 AM #10
تم تصحيح خطأ القسمة على صفر في تقاطع خطين افقي وعامودي بزاوية قائمة
كود PHP:#property copyright "remon78eg , 04/03/2016 d/m/y"
#property version "1.00"
#property description ""
#property indicator_chart_window
//========================================================================================
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;
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;
}
//========================================================================================
int OnInit(){
EventSetMillisecondTimer(250);
return(INIT_SUCCEEDED);
}
//------------------------------
void OnDeinit(const int reason){
EventKillTimer();
}
void OnTimer(){
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);
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);
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);
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);
}
//==========================================
color iif(bool con,color tr,color fl){
if(con){return(tr);}else{return(fl);}
}
int iif(bool con,int tr,int fl){
if(con){return(tr);}else{return(fl);}
}
double iif(bool con,double tr,double fl){
if(con){return(tr);}else{return(fl);}
}
string iif(bool con,string tr,string fl){
if(con){return(tr);}else{return(fl);}
}
- 05-03-2016, 11:03 AM #11
الله يعطيك الف عافية .. استاذي ريمون رفعت
وما شاء الله عليك .. متمكن في الرياضيات والبرمجة
والله يعلم من فترة وانا عاجز عن تكملت الاكسبيرت بسبب هذي المعادلة ..
وانا بصراحة لست متمكن مثلك , لي رجاء اخير ..
هل يمكن استاذي عمل المعادلة دالة اعطيها احداثيات X1 & X2 & Y1 & Y2
وتستخرج قيمة التقاطع كاقيمة ..
وفي الاخير كلمة شكرا لن تفي ما قدمته لي من خدمة
- 05-03-2016, 11:12 AM #12
- 05-03-2016, 11:47 AM #13
كود PHP: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;
}
//========================================================================================
//========================================================================================
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);
}
تحتاج ادخال 4 نقاط هي احداثيات الخطين وكل نقطة لها س،ص أي ستحتاج ادخال 8 ارقام
كما في المثال السابق
- 05-03-2016, 11:54 AM #14
- 05-03-2016, 12:29 PM #15