النتائج 31 إلى 45 من 524
الموضوع: تصميم "عظم باكتسر فوري"
- 08-07-2017, 04:07 AM #31
Comparion = مقارنة
فكرة المقارنة هي السر الجوهري في تفعيل زوج معين او الغائه من الباكتستر افلوري.
قلنا ان متغير اسما الازواج هو المصفوفة pairs --- ودائما قيمها كما حددنا سلفا وهي اسماء 28 زوج اخترناها.
الآن-ركز لأنها فكرة - نعرف متغير مصفوفة آخر اسمه pair_0 ونجعل كل القيم في البداية مثل قيم المتغير pairs
وبالتالي
pairs[0] f تساوي pair_0[0] f
لأن قيمة الأول هو زوج الملكي EURGBP وتم تخزينه ايضا في قيمة المتغير الجديد pair_0 --يوجد تساوي اذن الازواج كلها مفعلة منذ البداية. حالة الديفولت.
فشرط التفعيل هو ان نجعل قيمة المتغير الثاني مثل قيمة المتغير الأول.
كيف نقوم بهذا برمجيا:
1) نضع اولا قيم pair_0 في دالة OnInit بقيم تساوي قيمة المتغير pairs
2) عندما نضغط على اسم زوج معين على التشارت فإن المتغير الجديد يأخذ قيمة هذا الزوج فيحدث التساوي وذلك من خلال دالة الضغط OnChartEvent
3) لو اردنا الغاء زوج معين نضغط على المربع بجانب اسم الزوج فتكون قيمة المتغير pair_0 اي قيمة اخرى الا اسم الزوج. دعونا نتفق على قيمة YYYXXX
4) ثم نذهب لدالة OnTimer ونغير طريقة عرض الازواج بحيث يتم تلوين الزوج المفعل باللون الاخضر.
لاتنسى تعريف المتغير الجديد في رأس البرنامج.
آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 04:27 AM
- 08-07-2017, 04:25 AM #32
- 08-07-2017, 04:33 AM #33
والآن لكي البرنامج يحدد الزوج بشكل صحيح, خصوصا رقم الزوج--أي عنصر في المصفوفة-نضيف رقم تسلسلي لأسماء المتغير pairs على النحو التالي:
إذا تذكرون كانت هكذا:
والآن بعد التعديل صارت هكذا: اضفنا اندر سكور ثم حرف i الذي هو تسلسل الازواج ال 28.
آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 04:37 AM
- 08-07-2017, 04:41 AM #34
ماهي الفائدة؟
ج: هي في دالة OnChartEvent
فنحن الان ميزنا الازواج بأرقام
1) نريد عند الضغط على زوج معين ننزع رقمه من اسمه -- حسب الصورة اعلاه الرقم جزء من اسمه, اخر خانة او خانتين هي الرقم,
للازواج من 0 الى 9 اخر خانة
للازواج من 10 وحتى 27 اخر خانتين.
لابد ان يكون البرنامج اذكى بحيث يستخرج الرقم بسهولة وبشكل تلقائي وقانون موحد للحالتين,
-
اسم الزوج ذكرنا يبدأ بـ _B -- بينما مربع الزوج يبدأ بـ _A
وبالتالي لابد يفهم البرنامج هل نحن ضغطنا على اسم الزوج ام على المربع--هذا يتم من خلال التفتيش ان اول حرفين في اسم الزوج هل هي _B أم _A
- 08-07-2017, 04:48 AM #35
يتم ذلك على النحو التالي:
لاحظ تحت if(StringSubstr(sparam,0,2)=="A_") F هنا أخبرنا البرنامج اذا اول حرفين للشيء يبدأ بحرف A ثم اندسكور اذن اجعل قيمة pairs_0 تساوي YYYXXX للزوج الذي تم الضغط عليه!
كيف نحدد هذا الزوج؟ الزوج الخامس مثلاً !!!
تم هذا من خلال نزع الرقم من خلال المتغير I1
int I1=StrToInteger(StringSubstr(sparam,9,StringLen(spar am)-9)); F
لاتنسى ماذكرناه عن المتغير sparam وانه الاهم, فقيمته اسم الشيء,
وأي مبرمج يفهم ان السطر اعلاه لقيمة I1 هو: تجاهل اول 9 حروف من اسم المتغير ثم خذ الحروف بعدها ثم حولها من نص الى عدد صحيح.
فنحن سلفا عندما صممنا اسم المتغير جعلنا اول حرفين هي A_ ثم بعد ذلك ست حروف هي اسم الزوج ثم بعد ذلك اندرسكور ومجموعها 9 حروف ثم بعد ذلك الرقم الذي نزعناه.آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 04:56 AM
- 08-07-2017, 05:01 AM #36
سطر بمليون
فنحن من خلال اول حرفين عرفنا هل هو يقصد الزوج ام المربع
ثم من خلال الرقم عرفنا رقم الزوج او المربع--هل ضغطنا على الزوج الخامس ام الزوج 11 !!آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 05:05 AM
- 08-07-2017, 05:05 AM #37
- 08-07-2017, 05:10 AM #38
- 08-07-2017, 05:18 AM #39
- 08-07-2017, 05:20 AM #40
النتيجة:
- 08-07-2017, 05:21 AM #41
وحتى الآن هذا هو الكود البرمجي:
كود PHP:string str;
string S[] = {"EUR" ,"GBP" ,"AUD" ,"NZD" ,"USD" ,"CAD" ,"CHF" ,"JPY"};
string pairs[28];
string pair_0[28];
int OnInit()
{
ChartSetInteger(0,CHART_FOREGROUND,0,FALSE);
ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrBlack);
ChartSetInteger(0,CHART_COLOR_CHART_LINE,ChartGetInteger(0,CHART_COLOR_BACKGROUND));
ChartSetInteger(0,CHART_MODE,CHART_LINE);
ChartSetInteger(0,CHART_SHOW_GRID,0,FALSE);
ChartSetInteger(0,CHART_SHOW_OHLC,0,FALSE);
ChartSetInteger(0,CHART_SHOW_BID_LINE,0,FALSE);
ObjectCreate( "CHART_HIDE",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_HIDE",OBJPROP_CORNER,0);
ObjectSet( "CHART_HIDE",OBJPROP_XDISTANCE,220);
ObjectSet( "CHART_HIDE",OBJPROP_YDISTANCE,460);
ObjectSetText("CHART_HIDE",CharToStr(108),12,"wingdings",clrRed);
ObjectCreate( "CHART_CANDLES",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_CANDLES",OBJPROP_CORNER,0);
ObjectSet( "CHART_CANDLES",OBJPROP_XDISTANCE,240);
ObjectSet( "CHART_CANDLES",OBJPROP_YDISTANCE,460);
ObjectSetText("CHART_CANDLES",CharToStr(108),12,"wingdings",clrYellow);
ObjectCreate( "CHART_LINE",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_LINE",OBJPROP_CORNER,0);
ObjectSet( "CHART_LINE",OBJPROP_XDISTANCE,260);
ObjectSet( "CHART_LINE",OBJPROP_YDISTANCE,460);
ObjectSetText("CHART_LINE",CharToStr(108),12,"wingdings",clrWhite);
EventSetTimer(1);
str =StringSubstr(Symbol(),6,10);
///////////////////////////
int j=-1;
for(int i=0;i<=6;i++)
{
for(int k=i+1;k<=7;k++)
{
j++;
pairs[j]=S[i]+S[k]+str;
pair_0[j]=pairs[j];
}
}
return(INIT_SUCCEEDED);
}
////////////////////////
void OnTimer()
{
for(int i=0;i<28;i++)
{
if(pair_0[i]==pairs[i]) color clr=clrLime;
else clr=clrWhite;
ObjectCreate( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJ_LABEL,0,0,0);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_CORNER,0);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_XDISTANCE,20);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_YDISTANCE,50+i*13);
ObjectSetText( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, StringSubstr(pairs[i],0,6),9,"Tahoma",clr);
//
ObjectCreate( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJ_LABEL,0,0,0);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_CORNER,0);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_XDISTANCE,5);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_YDISTANCE,50+i*13);
ObjectSetText( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, CharToStr(110),9,"wingdings",clr);
}
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
//////////////////////////
if(StringSubstr(sparam,0,2)=="A_")
{
int I1=StrToInteger(StringSubstr(sparam,9,StringLen(sparam)-9));
pair_0[I1]="YYYXXX";
}
if(StringSubstr(sparam,0,2)=="B_")
{
int I2=StrToInteger(StringSubstr(sparam,9,StringLen(sparam)-9));
pair_0[I2]=pairs[I2];;
}
/////////////////////////////////////////
}
}
فكرة تمييز الزوج ومربعه برقم
فكرة تمييز الشيء الذي تم الضغط عليه
فكرة كيفية نزع هذا الرقم
فكرة المقارنة,
ناهيك عن الالوان المميزة للتفعيل او الالغاء بحيث تدرك بصريا اي زوج مفعل وأ زوج ملغي.
إذا ضغطت على المربع تصبح قيمة الزوج YYYXXX بينما اذا ضغطت على اسم الزوج تصبح قيمة الزوج هي الزوج اسمه الذي ضغطت عليه.آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 05:25 AM
- 08-07-2017, 05:27 AM #42
وطبعا زوج باسم YYYXXX لايوجد على المنصة!
- 08-07-2017, 06:09 AM #43
والآن نضيف شيئن مهمين:
1) شيء لتفعيل كل الأزواج دفعة واحدة, الاسم ACTIVATE_ALL
2) شيء لالغاء تفعيل كل الأزواج دفعة واحدة, الاسم CANCEL_ALL
ونضعها مباشرة تحت اسماء الأزواج--نختار مربعين يعني وندنقنز 110---التفعيل اخضر الالغاء رمادي
لابد تكون في دالة OnTimer
آخر تعديل بواسطة فيلسوف البادية ، 08-07-2017 الساعة 06:18 AM
- 08-07-2017, 06:22 AM #44
حتى الان مجرد شيئين على التشارت, ضغطت او لم تضغط عليها لن يتغير شيء
لكي تكون فعالة, نذهب لدالة OnChartEvent ونجري المطلوب برمجيا على النحو التالي:
وتعني اذا ال sparam تساوي CANCEL_ALL -- الغ كل الازواج--يعني اجعل قيمتها YYYXXX
بينما اذا sparam تساوي ACTIVATE_ALL فعل كل الأزواج--اجعل قيمتها مثل اسم الزوج
- 08-07-2017, 06:28 AM #45
وأيضا نضيف شيئين ارى اهميتهما, ولكي لاننساها:
1) شيء مخصص لازالة الاكسبيرت REMOVE_EXPERT
2) شيء مخصص لتنظيف التشارت باسم CLEAN_CHART
وعلى نفس منوال ماسبق:
1) نرسم الشيئين من خلال OnTimer
2) ونضع وظيفتها من خلال OnChartEvent