انجمن‌های سرمایه افشای ریسک



بازگشت   انجمن‌های سرمایه > فارکس (Forex (Foreign Exchange) Market) > نرم افزارهای معامله و تحلیل بازار (Trading and Analytical softwares) > متاتریدر (MetaTrader)


Notices

گفتگو قفل شده
 
ابزارهاي موضوع
قديمي August 7th, 2007, 05:14   #1
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
آموزش گام به گام زبان MQL

0

آموزش گام به گام زبان MQL
__________________
deadliness amuse me
ReSeller آفلاين است
قديمي August 7th, 2007, 16:39   #2
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

با سلام خدمت دوستان و علاقه مندان به بخش نرم افزاري متاتريدر
بر اساس پيشنهاد و درخواست بعضي از دوستان جهت يادگيري زبان MQL ، تصميم به ايجاد يك تاپيك مجزا گرفتم و هدف آموزش اين زبان از پايه و براي دوستان بسيار مبتدي ميباشد كه البته با گذشت زمان پيشرفته خواهند شد.
از تمامي دوستان عزيز تقاضا ميكنم كه تمامي سوالات مربوط به درسها را در تاپيكي به غير از اين تاپيك مطرح كنند و از ارسال هرگونه پستي در اين تاپيك پرهيز كنند.

توصيه هاي من:
1-برنامه نويسي نيازمند تمرين مداوم است پس از تمرين غافل نشويد.
2-هر درس را بيش از يكبار بطور دقيق مطالعه فرماييد.
3- به مثالهاي ذكر شده بسنده نكنيد و خودتون مثال بسازيد.
4-برروي كاغذ تمرين كنيد كه باعث يادگيري سريعتر شما ميشود.

سعي من در آموزش اين زبان، به صورت بسيار عاميانه و قابل درك براي دوستان تازه كار ميباشد. پس پيشاپيش از تمام اساتيد ادبي و برنامه نويس حاضر بابت نكات احيانا اشتباه انشائي عذرخواهي ميكنم.
ضمنا اميدوارم كه دوستان خواننده اين تاپيك، حداقل با وارد شدن به محيط برنامه نويسي MQL آشنا باشند چون من از اين بخش رد ميشم.
زياد اهل مقدمه نويسي نيستم پس به اميد خدا درس اول را به زودي شروع ميكنيم.
با تشكر پيشاپيش از همه دوستان بابت همكاري با اين تاپيك
و با آرزوي توفيق...
__________________
deadliness amuse me
ReSeller آفلاين است
قديمي August 7th, 2007, 17:23   #3
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

با نام خدا آغاز ميكنيم.
پس از باز كردن محيط كاري جديد در MQL با چند قسمت آماده روبرو ميشويم. كه در اين درس به نحوه كار كرد آنها ميپردازيم.
به قسمتهاي طوسي رنگ كه اصلا اجرايي هم نيستند و نقشي در برنامه ما ندارند فعلا كاري نداريم و بعدا كاربرد آنها را با هم بررسي خواهيم كرد.
به گزينه زير هم توجه نكنيد و آنرا به حال خود رها كنيد تا در درسهاي آينده با آن برخورد كنيم.
كد:
#property...
به قسمت زير ميرسيم:
كد:
int init()
{
...
...
}
اين قسمت(به اين قسمتها تابع يا فانكشن گفته ميشه كه بعدا در مورد نحوه ايجاد و شناسائي آنها بحث خواهيم كرد) شروع كننده برنامه است. يعني هروقت كه شما برنامه خود را در متاتريدر بارگذاري ميكنيد اين تابع اجرا شده و دستوراتي كه به جاي نقطه ها هستند اعمال ميشوند.
مهم:دقت كنيد كه اين تابع فقط يكبار و آنهم در هنگام بار گذاري اجرا ميشود و بعد از آن ديگر هيچ نقشي در برنامه ما ندارد.
در آينده بيشتر با كارايي آن آشنا ميشويد ولي اجازه بديد كه يك مثال براي شما بزنم كه از الآن اهميت آنرا بدانيد.
مثلا شما يك انديكاتور نوشته ايد و ميخواهيد آنرا بر روي چارت نصب كنيد و انديكاتور شما موظف است كه خطهايي را بر روي چارت ترسيم كند. حال فرض كنيد كه قبلا يك انديكاتور ديگر بر روي چارت بوده و خطها و نوشته هاي آن هنوز بر روي چارت باقي است. و شما نياز داريد كه هنگام الصاق انديكاتور جديد، چارتي عاري از هرگونه خط و علامت و نوشته داشته باشيد.
حال ميتونيد دستورات پاكسازي چارت را در همين تابع انديكاتور خود اضافه كنيد و هنگامي كه انديكاتور را الصاق ميكنيد قبل از هر چيز، چارت شمارا پاكسازي كند.
همانطور كه دقت كرديد عمليات پاكسازي فقط يكبار مد نظر شما است و دوست نداريد كه مرتب چارت شما پاك شود. بنا براين اهميت اين تابع در اجراي يكباره دستورات و آنهم هنگام بارگذاري مشخص ميشود.
البته عمليات پاكسازي تنها وظيفه اين تابع نيست و بعدها با نحوه كاركرد اين تابع و وظايف آن بيشتر آشنا خواهيد شد.
__________________
deadliness amuse me
ReSeller آفلاين است
10 تشکر کننده از ReSeller:
قديمي August 7th, 2007, 18:31   #4
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

كد:
int deinit()
{
...
...
}
اين تابع هنگام پايان كار انديكاتور و اكسپرت كارايي داره و مثل تابع قبلي فقط يكبار فراخواني ميشود. و آن زماني است كه شما انديكاتور يا اكسپرت خود را از چارت حذف ميكنيد.
همان مثال قبلي براي اين تابع نيز قابل بيان است يعني عمليات پاكسازي چارت و يا حافظه را توسط اين تابع و هنگامي كه كارتان با انديكاتور يا اكسپرت مبروطه تمام است و ميخواهيد آن را از چارت حذف كنيد، انجام ميدهد.
در آينده نزديك حتما بيشتر يا اين توابع آشنا خواهيد شد.

و اما رسيديم به تابع اصلي برنامه:
كد:
int start()
{
...
...
}
اين تابع اصلي برنامه است يعني كليه دستورات شما براي اكسپرت و انديكاتور ها از اين تابع فراخواني ميشود. و دقيقا بعد از تابع ()init اين تابع دستورات نوشته شده در بدنه خود را اجرا ميكند. و تازماني كه انديكاتور و اكسپرت در چارت شما فعال است اين دستورات بازخواني ميشوند.

لطفا فعلا ذهن خود را از بابت int اول اين توابع و شكل كلي آنها خالي كنيد و سعي كنيد با درس پيش برويم و بعدا تمام اين سوالهاي ذهني شما پاسخ داده خواهد شد.
خب تا اينجا با فرم كلي برنامه آشنا شديم و حالا ميخوايم يه كم كار عملي شروع كنيم كه من خودم اعتقادم به يادگيري بيشتر و بهتر از طريق كار عملي ميباشد.

با آرزوي توفيق...
__________________
deadliness amuse me
ReSeller آفلاين است
11 تشکر کننده از ReSeller:
قديمي August 7th, 2007, 19:51   #5
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

در اينجا ميخواهيم كه با هم شروع به كار عملي بكنيم.
با ساده ترين دستور متاتريدر شروع ميكنيم كه فرم كلي آن به صورت زير ميباشد.
كد:
void Comment( ...)
اين دستور وظيفه چاپ اعداد و حروف را بر روي چارت شما و درقسمت بالا و گوشه سمت چپ چارت به عهده دارد.
و البته بعد از تسلط شما به برنامه نويسي ميتونيد از اين دستور براي يافتن خطاهاي برنامه نيز استفاده كنيد.
فعلا به گزينه Void توجه نكنيد كه بعدا مفصلا توضيح داده خواهد شد.
نكته اينكه مطالب خام مورد نظر شما جهت چاپ بر روي چارت بايد بين 2 گيومه(" ") جهت چاپ قرار گيرند.
يك محيط جديد از نوع انديكاتور در MQL باز كنيد و مثالها را با من دنبال كنيد.
مثال:
كد:
Comment("Hello Forex");
اين دستور را در بدنه تابع ()start قرار دهيد و برنامه را كامپايل كنيد. بعد از الصاق انديكاتور مشاهده خواهيد كرد كه جمله Hello Forex بر روي چارت شما چاپ شده است.
براي دوستاني كه نميدانند بدنه تابع ()start چي هست مثال زير گوياي كار است.
كد:
int start()
{
   Comment("Hello Forex");
   return(0);
}
با دستور (0)return فعلا كاري نداريم و آنرا همانگونه كه هست رها ميكنيم.
مهم: توجه كنيد كه هميشه آخرين دستور Comment در برنامه شما چاپ ميشود.
يعني چي؟ به مثال زير توجه كنيد:
كد:
int start()
{
   Comment("Hello Forex");
   Comment("How Are You?");
   return(0);
}
وقتي كه اين كد را اجرا ميكنيد خواهيد ديد كه فقط جمله How Are You نمايش داده ميشود و خط اول چاپ نشده. در اصل خط اول چاپ شده و به سرعت خط دوم جايگزين خط اول شده بنابراين شما فقط خط دوم را ميبينيد.
حالا ميخواهيم كه يك نوشته در 2 خط چاپ شود چطور عمل كنيم؟
به مثال زير دقت كنيد:
كد:
int start()
{
   Comment("Hello Forex\n"+"How Are You?");
   return(0);
}
دوستان من فعلا دستورات را با كل بدنه تابع ()start قرار ميدهم اما ديگه بايد با مفهوم بدنه تابع كه از } شروع شده و به { ختم ميشود آشنا شده باشيد.
خب در مثال بالا 2 نكته وجود داره كه خيلي ساده ميباشند.
علامت + به عنوان يك چسب بكار رفته است و عبارت اول را به عبارت دوم چسبانده است. توجه كنيد كه اين علامت بايد خارج گيومه ها باشد.
علامت n\ به معني ايجاد يك خط جديد است و به تابع Comment دستور ميدهد كه عبارتي كه بعد از اين علامت ميآيد در خط پايين تري چاپ شود.
يه كم با اين تابع كار كنيد تا بيشتر با آن آشنا شويد.

با آرزوي توفيق...
__________________
deadliness amuse me
ReSeller آفلاين است
قديمي August 7th, 2007, 21:12   #6
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

مثال بالا را ميشود به صورت زير نيز نوشت:
كد:
Comment("Hello Forex\nHow Are You?");
در اين مثال از علامت '+' استفاده نشده و دستور ايجاد خط جديد مستقيما بعد از علامت مربوطه ايجاد شده است.

همانطور كه مشاهده ميكنيد بعد از حذف انديكاتور از چارت، همچنان جمله هاي چاپ شده باقي ميمانند. حالا بايد نوشته ها بعد از حذف شدن انديكاتور از روي چارت پاك شوند. يادتون هست كه كدام تابع مسول اجراي فرامين هنگام پايان كار انديكاتور بود؟
درسته تابع ()deinit
حالا ما جهت آشنايي بيشتر با اين تابع اقدام با پاكسازي چارتمون از نوشته ها ميكنيم.
كد:
int deinit()
{
   Comment("");
   return(0);
}
دستور Comment كه در داخل بدنه ()deinit قرار گرفته است، همانطور كه ميبينيد فقط شامل 2 گيومه ميباشد. با اضافه كردن اين دستور به برنامه خودتون شاهد خواهيد بود كه بعد از حذف انديكاتور، جمله ها نيز با آن پاك ميشوند.
نكته: دستور Comment پاك نميكند و فقط چاپ ميكند. اما ما با دستور بالا در حقيقت يك حرف فاصله چاپ كرده ايم كه جايگزين جمله هاي قبلي شده است.

در پست بعدي كمي با متغير ها (Variables) آشنا خواهيم شد.
با آرزوي توفيق...
__________________
deadliness amuse me
ReSeller آفلاين است
قديمي August 8th, 2007, 01:00   #7
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

متغير(Variable): برنامه ميتونه اعداد و ساير اطلاعات را در حافظه كامپيوتر نگه داره و توسط متغيرها كه آدرس اون قسمت از حافظه در آنها ذخيره ميشوند، به آن اطلاعات دسترسي داشته باشه.
به عبارتي ساده تر ميشه گفت كه متغيرها نوع كوچكي از يك حافظه مجازي ميباشند كه تاوقتي يك برنامه فعال است، وجود دارند و قابل استفاده ميباشند. و به محض حذف و غير فعال شدن برنامه آنها نيز از بين ميروند.

اولين و كارآمد ترين متغير int ميباشد كه مخفف كلمه integer و به معني عدد صحيح ميباشد. جهت يادآوري عرض كنم كه عدد صحيح شامل كليه اعداد منفي و مثبت و صفر ميباشد(... 0،1،2، 1-،2- ...)
اين متغير حافظه كامپيوتر را به اندازه 2 بايت اشغال ميكند.(در آينده به مبحث مديريت حافظه خواهيم پرداخت)
چگونه متغير عدد صحيح ايجاد كنيم؟
براي ايجاد يك متغير از نوع عدد صحيح بايد ابتدا از كلمه كليدي int استفاده كنيم و بعد اسم متغير خود را درج كنيم.

نكته: تمامي خطوط برنامه شما به سميكلن ( ختم ميشوند به غير از توابع شرطي و حلقه ها و بعضي توابع ديگر كه با آنها آشنا خواهيد شد.

مثال از ايجاد يك متغير عدد صحيح:
كد:
int day;
در مثال بالا ما يك متغير از نوع عدد صحيح با نام day ايجاد كرده ايم كه اين متغير ميتواند فقط وفقط اعداد صحيح را در خود ذخيره كند.
توصيه در مورد اسمگذاري متغير ها:
1- به هيچ عنوان نميتوانيد از كلمات كليدي متاتريدر جهت اسم يك متغير استفاده كنيد.
2-عدد و بعضي از علائم نميتوانند در اول اسم متغير استفاده شوند.(=،+،*،&،/،}،{،...)
3- سعي شود از اسم در خور استفاده از متغير استفاده شود كه بعدا در كدخواني خيلي راحت تر خواهند بود.

به بعضي از موارد اشتباه در اسمگذاري ها دقت كنيد كه باعث بروز خطا در برنامه ميشوند:
كد:
int Day;
int 1day;
int 123;
int *star;
حالا بر فرض ميخواهيم كه 2 متغير از نوع عدد صحيح ايجاد كنيم. به مثالهاي زير دقت كنيد.
مثال اول:
كد:
int day1;
int day2;
مثال دوم:
كد:
int day1,day2;
هر دو مثال درست هستند و فقط تنها تفاوت آنها كم شدن يك خط از برنامه شما در مثال دوم است كه باعث سبكي برنامه و دسترسي راحت تر به متغير توسط برنامه نويس ميباشد.
پس در يك خط ميشود كه تعدادي متغير از يك جنس داشت و آنها را با كاما (،) از هم سوا كرد.

با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
10 تشکر کننده از ReSeller:
قديمي August 8th, 2007, 15:11   #8
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

چگونه متغير را مقدار دهي كنيم؟
خيلي ساده است به مثال زير دقت كنيد:
كد:
int day;
day=23;
همانطور كه مشاهده فرموديد. ابتدا ما يك متغير به نام day از جنس عدد اعشاري تعريف كرديم و در خط بعدي عدد 23 را به آن تخصيص داديم. كه هرگاه شما به اين متغير day مراجعه كنيد، حاوي عدد 23 خواهد بود مگر اينكه شما در طول برنامه اين مقدار را تغيير دهيد.
مثال ديگر از شيوه مقدار دهي:
كد:
int day=23;
همانطور كه مشاهده ميفرماييد همزمان با معرفي متغير به عنوان يك عدد صحيح، به آن مقدار دهي شده است. كه اين روش نيز درست است و باعث صرفه جويي در وقت و حجم كد ميشود.

حالا ميخواهيم كه محتوي اين متغير كه شامل عدد 23 است را بر روي چارت نمايش دهيم.
كد:
int day=23;
Comment("day="+day);
كه بعد از اجراي اين برنامه اين جمله بر روي چارت شما چاپ ميشود: day=23
همانطور كه ديديد از يك چسب (+) براي پيوستن يك متغير ( متغيرها و ساير دستورات در گيومه نخواهند آمد. و گيومه تنها مختص جمله اي است كه دلخواه شما است و دوست داريد كه نمايش داده شود.) و يك عبارت، استفاده شده است.
حال اگر بخواهيم به تنهايي اين متغير را نمايش دهيم:
كد:
Comment(day);
اجازه دهيد يه كم با متغير بازي كنيم و محتواي آنرا تغيير دهيم.
به مثال زير دقت كنيد:
كد:
int day=23;
day=24;
با توجه به مثال بالا فكر ميكنيد كه متغير day حاوي چه عددي است؟
درسته حاوي عدد 24 ميباشد. يعني day اول حاوي عدد 23 بوده اما در خط بعدي عدد 24 جايگزين آن شده است.

كد:
int day=23;
day=day+1;
در مثال بالا متغير day حاوي چه عددي است؟
دقت كنيد كه در خط اول day حاوي عدد 23 بوده است و در خط دوم گفتيم كه متغير برابر است با محتواي متغير بعلاوه عدد يك. يعني 23 با 1 جمع شده است و در متغير ذخيره گشته.

كد:
int first=2,second;
second=first*2;
Comment(first+"x2="+second);
در مثال بالا ما 2 متغير تعريف كرده ايم (first و second) كه متغير first به مقداردهي كرده ايم و متغير second بدون مقدار رها شده است. در خط دوم محتواي متغير first در عدد 2 ضرب شده و حاصل در متغير second ذخيره شده است. و درخط سوم نشان داده ايم كه 2x2=4

فكر كنم كه توضيحات لازم در رابطه با متغيرهاي عدد صحيح داده شد ولي اگر مطلب خاصي جا افتاده باشد حتما در درسهاي بعدي به آن اشاره خواهم كرد.
فقط تمرين كنيد. تمام علائم رياضي را امتحان كنيد. اعداد مختلف را آزمايش كنيد. حتما به نتايج جالبي خواهيد رسيد.

با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
8 تشکر کننده از ReSeller:
قديمي August 8th, 2007, 21:04   #9
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

كد:
int start()
{
   int first=2,second;
   second=first*2;
   Comment(first+"x2="+second);
   return(0);
}
در بالا فرم قرار گرفتن آخرين مثال از پست قبلي را مشاهده ميكنيد.

خب اجازه بديد يكم از متغيرها خارج بشيم و مبحث جالب شرطي ها را آغاز كنيم.
به مثال زير دقت كنيد:
اگر من بيش از صد ميليون تومان پول داشته باشم، خونه ميخرم.
به اين ميگن يه جمله شرطي يعني خريد خانه وقتي انجام ميشود كه پول بيشتر از صد ميليون تومان باشد و تاوقتي كه پول كمتر از آن باشد خريد خانه انجام نخواهد شد.
اجازه بديد كه اين مثال را به صورت رياضي بررسي كنيم.
خريد خانه <---- (100000000<پول من)if
وقتي به گزينه خريد خواهيم رسيد كه شرط داخل پرانتز درست (true) باشد. يعني پول من (كه همان متغير است) بزرگتر از صد ميليون تومان باشد.
در برنامه نويسي هم دقيقا به همين صورت است و در بسياري از مواقع احتياج پيدا ميكنيم كه از شرط استفاده كنيم. مثلا بگيم اگر فلان انديكاتور توي اين شرايط قرار گرفت buy انجام بده و برعكس براي sell.
به مثال زير دقت كنيد.
كد:
int first=2;
if(first>5)
Comment("Hello");
در مثال بالا يك متغير از نوع عدد صحيح با مقدار اوليه 2 تعريف كرده ايم و در خط بعدي شرط قرار داده ايم كه اگر مقدار متغير first بيشتر از عدد 5 باشد، عبارت Hello بر روي چارت چاپ شود. كه اين اتفاق هرگز رخ نخواهد داد چون همانطور كه ميبينيم شرط درست نيست.
به مثال زير دقت كنيد:
كد:
int first=2;
if(first>0)
Comment("Hello");
در اين مثال عبارت Hello چاپ خواهد شد چون همانگونه ميدانيم عدد 2 بزرگتر از صفر است پس شرط ما درست است.

مهم: علائمي كه در شرطها قابل استفاده هستند عبارتند از:
== اين علامت به معناي شرط تساوي بكار ميرود.
< اين علامت به عنوان شرط بزرگتري
>اين علامت به عنوان شرط كوچكتري

مثال:
كد:
int first=2;
if(first==2)
Comment("Hello");
در اين مثال شرط ما اين است كه اگر مقدار متغير first برابر با عدد 2 بود عبارت Hello چاپ شود.
يك مقدار با اعداد و متغيرهاي مختلف تمرين كنيد تا به اميد خدا در پست بعدي به جزئيات بيشتري از شروط بپردازيم.

با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
8 تشکر کننده از ReSeller:
قديمي August 9th, 2007, 01:00   #10
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

مثالهاي بالا تماما براي مقايسه شرطي يك متغير نسبت به يك عدد بودند. براي مقايسه شرطي بين دو متغير نيز همانند مثالهاي بالا عمل ميكنيم و فقط جاي عدد را به متغير ميدهيم.
مثال:
كد:
int first=2,second=3;
if(first==second)
Comment("Equal");
همانطور كه فهميديد كلمه Equal چاپ نخواهد شد.

نكته: به هيچ عنوان در پايان خط شرطي از سميكلن ";" استفاده نكيند كه باعث خطا در برنامه ميشود.

حالا اجازه دهيد تا بحث را يه كم گسترده تر كنيم. با همان مثال بالايي كار را دنبال ميكنيم:
اگر من بيش از صد ميليون تومان پول داشته باشم، خونه ميخرم. در غير اينصورت خانه اجاره ميكنم.
در اين مثال همانطور كه ميبينيد اگر شرط دارا بودن پول درست باشد، خريد خانه انجام خواهد شد. و اگر درست نباشد اجاره خانه انجام خواهد شد.
يعني در هر صورت ما يه كاري انجام ميدهيم چه پول داشته باشيم و چه نداشته باشيم اما نوع كار متفاوت خواهد بود.
عين همين عمل در برنامه نويسي انجام ميشود.
به مثال زير توجه كنيد:
كد:
int first=2,second=3;
if(first==second)
   Comment("Equal");
else
   Comment("Not Equal");
همانطور كه مشاهده ميفرماييد اگر شرط ما يعني محتواي متغير first برابر با محتواي متغير second باشد، عبارت Equal چاپ خواهد شد. در غير اينصورت (else) عبارت Not Equal چاپ خواهد شد.

نكته: هر if فقط حاوي يك else ميتواند باشد. و else تنها مربوط به آخرين if استفاده شده است. شما در يك برنامه ميتوانيد چندين if بدون else داشته باشيد اما نميتوانيد چندين else بدون if داشته باشيد.
مثال:
كد:
int first=2,second=3;
if(first>0)
   Comment("Hello");
if(first==second)
   Comment("Equal");
else
   Comment("Not Equal");
در مثال بالا ابتدا شرط بزرگتري متغير first نسبت به عدد صفر بررسي ميشود و چون شرط صحيح است عبارت Hello چاپ ميشود و بعد شرط برابري 2 متغيير بررسي ميشود كه درست نيست و در نهايت عبارت Not Equal چاپ ميشود و چون سرعت اجراي خطهاي برنامه شما بسيار بالا است، شما متوجه چاپ شدن عبارت Hello نخواهيد شد.
همانطور كه ديديد else مربوط به آخرين if استفاده شده (شرط برابري) است و ربطي به اولين if ندارد.

تمرين تمرين تمرين كنيد
با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
8 تشکر کننده از ReSeller:
قديمي August 9th, 2007, 17:00   #11
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

اجازه بديد يكم بيشتر در مورد شرطي if پيش برويم.
بعضي مواقع شما براي اجراي يك كار نياز به بيش از يك شرط داريد. به مثال زير توجه كنيد.
اگر من كامپيوتر داشته باشم و اگر پول نيز داشته باشم، بنابراين فاركس كار خواهم كرد.
يعني من وقتي به فاركس مشغول ميشوم كه هر دو گزينه پول و كامپيوتر را در اختيار داشته باشم. و اگر يكي از اين دو مهيا نباشد، كار كردن من در فاركس منتفي ميباشد.

نكته: نكته اي كه من فراموش كردم در پست قبلي به آن اشاره كنم در مورد بدنه if ميباشد. اين بدنه ميتواند دستورات متعددي در خود جاي دهد كه با كروشه } در ابتدا و { در انتها مشخص ميگردد. البته براي اجراي يك دستور در بدنه if نيازي به استفاده از كروشه نداريد اما براي بيش از يك دستور و خط شما نيازمند به استفاده از كروشه خواهيد بود.

كد:
int first=2,second=3;
if(first>0)
{
   if(second<2)
   {
      Comment("Hello");
   }
}
در مثال بالا در قسمت if اول كه بدنه آن if بعدي را نيز در بر گرفته دقت كنيد. ميدونم شايد يكم فهم اين كد براي شما مشكل باشد اما با كمي تمركز حتما براتون ساده خواهد شد.
خوب دقت كنيد اگر محتوي متغير first در شرط اول درست نباشد يعني بزرگتر از صفر نباشد، برنامه ما هيچ وقت شرط به شرط دوم نميرسد كه اجرا كند. چون اجراي شرط دوم مستلزم صحت شرط اول است. حال كه شرط اول درست است و متغير first بزرگتر از صفر است برنامه به شرط دوم ميرسد. در شرط دوم اگر متغير second كوچكتر از 2 باشد، عبارت Hello چاپ ميشود. اما همانطور كه ديديد اين اتفاق نخواهد افتاد. چون بزرگتر از 2 ميباشد.

حال اجازه بديد كد بالا را يكم ساده تر كنيم.

مهم: از ديگر اجزاي شرط ميتوان به كلمات و و يا اشاره كرد.
|| به معني يا در برنامه نويسي ميباشد
&& به معني و در برنامه نويسي ميباشد.

وقتي ما ميگيم كه اين شرط و آن شرط بايد برقرار باشد تا به نتيجه برسيم يعني هردو آنها ملزم به برقراري شرط هستند.
اما وقتي ميگيم كه اين شرط يا آن شرط بايد برقرار باشد يعني يكي از شرطها براي نتيجه گيري كافي است.

كد:
int first=2,second=3;
if(first>0 && second<2)
{
   Comment("Hello");
}
اين كد خلاصه شده كد بالايي است همانطور كه در قسمت شرط ملاحظه ميكنيد، بايد متغير first بزرگتر از صفر و متغير second كوچكتر از 2 باشد تا عبارت Hello چاپ شود.
كد:
int first=2,second=3;
if(first>0 || second<2)
{
   Comment("Hello");
}
در اين مثال درست بودن تنها يكي از شرطها باعث چاپ شدن عبارت Hello ميشود.

نكته: در پست قبلي درباره علائم رياضي مورد استفاده گفتم كه 2 مورد يادم رفت.
1- علامت كوچكتر مساوي : => اين علامت 2متغير را نسبت به هم از بابت اينكه اولي كوچكتر و يا مساوي با دومي باشد را چك ميكند.
2- علامت بزرگتر مساوي: =< اين علامت 2 متغير را نسبت به هم از بابت اينكه اولي بزرگتر يا مساوي با دومي باشد را چك ميكند.
مثال:
كد:
int first=2;
if(first>=2)
{
   Comment("Hello");
}
در اين شرط اگر متغير بزرگتر از 2 (كه بزرگتر نيست) و يا اگر برابر با 2 باشد، عبارت Hello چاپ ميشود.

تمرين تمرين...
با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
7 تشکر کننده از ReSeller:
قديمي August 11th, 2007, 03:32   #12
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

قبل از شروع این بحث لازم میدونم بگم که اگر نکته ای از آموزش در قسمتهای قبل جا مانده، به بزرگی خودتون ببخشید. من هم اگر مساله خاصی یادم اومد در قسمتهای بعدی عنوان میکنم. آخه از روی کتاب که رونوشت نمیکنم. در واقع در همان لحظه ای که به ذهنم میرسه براتون مینویسم.

در این قسمت میخوام به بحث حلقه ها بپردازم.
در بسیاری از مواقع شما به عنوان یک برنامه نویس ضرورت تکرار یکسری از دستورات را به صورت مکرر و پشت سر هم احساس میکنید. به 2 صورت میشه این کار را انجام داد. یکی اینکه کلیه دستورات را پشت سر هم بنویسید که همه آنها یکی پس از دیگری انجام شود. راه دیگر این است که یک سری از دستورات در یک حلقه قرار داده شود و آن حلقه وظیفه اجرای آن دستورات را به تعداد دفعات مشخص به عهده گيرد.
فرق این دو روش:
-در روش اول تعداد خطها بسیار زیاد میشود و حجم فایل شما را به حد زیادی افزایش میدهد.
-در روش اول به علت بالا بودن تعداد خطها، احتمال اشتباه و خطای سیستم بالا میرود.
-در روش اول وقت بیشتری صرف میشود.

اولین حلقه ای میخواهیم به آن بپردازیم for میباشد.و شکل کلی آن به صورت زیر میباشد.
(عبارت سوم;عبارت دوم;عبارت اول)for
}
..
..
{
-عبارت اول یک متغیر است که مقداردهی میشود. یعنی نقطه شروع حلقه ما از مقدار اولیه همین متغیر یا عبارت اول است.
-عبارت دوم که شرط توقف حلقه مااست. هر حلقه باید شامل یک شرط توقف باشد
-عبارت سوم همان متغیر عبارت اول است که نسبت به شرط توقف یا نیاز برنامه نویس و برنامه، کاهش و یا افزایش میابد.
مثال:
كد:
int i;
for(i=0;i<=5;i++)
{
}
در این مثال یک حلقه داریم که از متغیر عدد صحیح i در آن استفاده شده است. در عبارت اول متغیر i برابر با مقدار صفر میشود. در عبارت دوم شرط بر این شده که تا مقدار i (که در حال حاضر برابر صفر است) کمتر یا برابر عدد 5 است این حلقه به کارش ادامه دهد. در عبارت سوم متغیر i با هر بار چرخش یک مقدار به مقدارش اضافه ميشود.

نکته: عبارت ++i کاملا با عبارت i=i+1 برابر میباشد.

در مثال بالا حلقه ما با مقدار اولیه متغیر i که صفر میباشد کار خود را شروع میکند و قبل از اجرای دستورات و وارد شدن به بدنه حلقه، شرط توقف را چک میکند و اگر شرط درست بود به گردش ادامه میدهد. یعنی در اولین گردش i حاوی عدد صفر میباشد. وقتی که اولین گردش تمام تمام شد، یک واحد به مقدار i اضافه میشود و دوباره شرط توقف چک میشود.و بهمین ترتیب تا شرط توقف اشتباه باشد. یعنی مقدار i از عدد 5 بزرگتر شود.

نکته:قرار دادن سمیکلن در بین عبارات الزامی است.

اين بحث ادامه دارد...
با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
8 تشکر کننده از ReSeller:
قديمي August 13th, 2007, 18:47   #13
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

مثال:
كد:
int i;
for(i=0;i<=5;i++)
{
   Comment(i);
   Sleep(1000);
}
در این مثال قرار است که مقدار متغیر i در هر گردش چاپ شود اما به علت سرعت بالای حلقه و عمل نکردن فانکشن Sleep در اندیکاتور، ما شاهد چاپ عددهای بین صفر تا 4 نمیباشیم و در نهایت عدد 5 را میبینیم که چاپ شده است.
نکته: فانکشن Sleep برای مدت زمانی که در آن معرفی شده(میلی ثانیه) باعث توقف و استراحت اجرای کدها میشود که در اسکریپتها و اکسپرت در شرایط خاص کار میکند.

اجازه بدید گریزی به اسکریپت بزنیم و نحوه کار حلقه for را در آنجا بررسی کنیم. از منوی File گزینه New سپس Script را انتخاب و Next را میزنیم بعد اسم اندیکاتور را مثلا Test1 قرار میدهیم و در آخر Finish را میزنیم و وارد محیط متاادیتور میشویم.

همان مثال بالا را در اسکریپت کپی کنید(در بدنه start). امیدوارم که از پس این کار دیگه بتونید بر آیید. با این حال چون هنوز شک دارم که دوستان تمرین کرده باشند، دوباره مثال میزنم.
كد:
int start()
{
   int i;
   for(i=0;i<=5;i++)
   {
      Comment(i);
      Sleep(1000);
   }
   return(0);
}
بعد از کامپایل کردن، اسکریپت مربوطه را اجرا کنید. در گوشه سمت چپ بالای چارت میبینید که در هر یک ثانیه عددها چاپ میشوند. به این ترتیب:
0
1
2
3
4
5
شاید بعضی از دوستان گمان میکردند که این حلقه فقط 5 بار گردش دارد اما لازم به ذکر است که شروع ما از صفر میباشد و تا عدد 5 ادامه دارد که میشود 6 بار گردش.
سعی کنید که دقیقا با مراحل حلقه آشنا شوید. عددهای مختلف بکار بگیرید. شرط توقف را تغییر دهید. از مراحل کاهشی استفاده کنید.
مثال دیگر:
كد:
int i;
for(i=7;i>=3;i--)
{
   Comment(i);
   Sleep(1000);
}
در این مثال حلقه از عدد 7 شروع شده است و شرط توقف ما تا زمانی که i بزرگتر از عدد 3 یا برابر عدد 3 شود، ادامه میابد. همچنین در عبارت سوم متغیر ما در هر گردش یک واحد کاهش داده میشود.

نکته:عبارت --i برابر با عبارت i=i-1 میباشد.

تقریبا همه چیز دررابطه با for گفته شد به غیر از یک مبحث تخصصی که در آینده به آن خواهم پرداخت.
امیدوارم که از تمرین فرار نکنید. فقط سعی کنید حلقه شما حتما از شرط استاپ درستی برخوردار باشد تا متاتریدر شما هنگ نکند.
یک مثال اشتباه از حلقه for که باعث هنگ کردن متاتریدر میشود.
كد:
for(i=7;i>=3;i++)
{
   Comment(i);
   Sleep(1000);
}
اگر دقت کنید شرط توقف ما جایی است که مقدار i نسبت به مقدار اولیه کاهش یافته است و به عدد 3 رسیده باشد. اما در عبارت سوم ما در حال افزایش مقدار i هستیم نه کاهش، که این باعث ایجاد حلقه بینهایت میشود که در نهایت باعث هنگ کردن متاترید میشود.

با آرزوی توفیق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
5 تشکر کننده از ReSeller:
قديمي August 22nd, 2007, 03:44   #14
HERCOOL
Senior Member
 
HERCOOL's Avatar
 
تاريخ عضويت: May 2007
ارسالها: 866
تشکر: 832
تشکر از ايشان: 3,887 بار در 770 پست
HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)HERCOOL (سطح 11)
0

سلام خسته نباشی
دیگه ادامه نمیدی
تمام شد
HERCOOL آفلاين است
قديمي September 5th, 2007, 02:17   #15
ReSeller
Senior Member
 
تاريخ عضويت: Apr 2007
محل سكونت: Tehran
ارسالها: 128
تشکر: 34
تشکر از ايشان: 267 بار در 80 پست
ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)ReSeller (سطح 5)
ارسال پيغام بوسیله Yahoo به ReSeller
0

سلام خدمت دوستان عزيز و بزرگوار

خيلي سرم شلوغه و جدا وقت آمدن به اين سايت و سايتهاي ديگر را ندارم
اما امشب يه وقتي پيدا كردم كه اينجا يه سري بزنم كه ديدم به به اين تاپيك خدا بيامرز من داره اون ته تها بدجوري خاك ميخوره
راستش دلم براش سوخت گفتم بيارمش بالا.

هرچند وقت يكبار كه سرم خلوت بشه حتما اينجا سري ميزنم كه ادامه درسها عقب نيافته.

ادامه مبحث:

امروز میخوام که در مورد یک حلقه دیگری به نام while صحبت کنم.
مثال فارسی: به فرض میگیم که من تاوقتی که خانه نخرم روزی 2 شیفت کار میکنم. یعنی این حلقه کار کردن 2 شیفت در روز ادامه داره تا وقتی که انشاالله خانه بخرید.
فرم کلی این دستور به شکل زیر است:
PHP Code:
while(عبارت)
{
..

تا وقتی که عبارت داخل پرانتز درست باشد، این حلقه به چرخش و اجرای دستورات در بدنه خودش ادامه میدهد.
PHP Code:
int i=5;
while(
i<10)
{
   
Comment(i);
   
Sleep(1000);

در مثال بالا چرخه ما تاوقتی که مقدار i کمتر از عدد 10 باشد، ادامه دارد.
نکته: اگر نکته بین و دقیق باشید تا الان متوجه شده اید که این مثالی که من عنوان کردم دارای یک مشکل منطقی میباشد. لطفا قبل از خواندن ادامه مطلب، یکبار دیگر نگاه دقیق به کد بکنید تا متوجه شوید.
بله درست متوجه شدید مشکل کد بالا، شرط استاپ میباشد. در واقع این حلقه دارای هیچگونه ترمزی نیست و مرتب در حال چرخش است که ما آن را حلقه بینهایت مینامیم. چون مقدار i هیچ وقت افزایش داده نمیشود و همچنان کوچکتر از عدد 10 باقی میماند که این باعث میشود ما هیچوقت از این چرخه خارج نشویم.
در واقع شکل اصلی این کد به این صورت باید باشد.
PHP Code:
int i=5;
while(
i<10)
{
   
Comment(i);
   
Sleep(1000);
   
i=i+1;

نکته: الزامی برای اینکه مقدار متغیری که در حلقه استفاده میشود حتما با یک واحد افزایش یا کاهش پیدا کند، نیست. من فقط به عنوان مثال این کد را مینویسم و شما میتونید به هر نحوی که دوست دارید مقدار متغیر حلقه را افزایش یا کاهش دهید اما حتما به شرط استاپ حلقه توجه نمایید.
فرق این دو حلقه یعنی for و while را در درسهای بعدی بیشتر متوجه خواهیم شد.

با آرزوي توفيق...
شهرام
__________________
deadliness amuse me
ReSeller آفلاين است
تشکر کننده از ReSeller:
گفتگو قفل شده




Bookmarks

برچسب‌ها
meta trader programming, mql

ابزارهاي موضوع

قواعد ارسال
شما نمی‌توانید موضوع جدید ارسال کنید
شما نمی‌توانید پاسخ ارسال کنید
شما نمی‌توانید فایل ضمیمه ارسال کنید
شما نمی‌توانید پست‌های خود را ویرایش کنید

BB code فعال است
شکلکها فعال است
كد [IMG] فعال است
کدهای HTML غير فعال است


موضوعات مشابه
موضوع آغازگر موضوع انجمن پاسخ آخرین ارسال
آموزش گام به گام تحليل تكنيكال به زبان انگليسي ario تحلیل تکنیکال (Technical Analysis) 5 May 24th, 2007 22:04
آموزش برنامه نوِيسي ++C programmer متاتریدر (MetaTrader) 29 January 26th, 2007 19:54

ساعت جاري 01:49 با تنظيم GMT +4.5 مي باشد.


Powered by vBulletin Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
تمام حقوق براي سايت سرمايه دات کام محفوظ می باشد.
نقل مطالب بدون کسب اجازه از مدیران سایت ممنوع است.