اطلاعیه

بستن

راهنمای فروم - حتما بخوانید

با سلام

قابل توجه کاربران محترم تالار گفتگو

قبل از ارسال پست یا ایجاد موضوع جدید، تاپیک قوانین و راهنمای فروم را مطالعه نمائید.

کاربران و مخصوصا تازه واردین لطفا دقت باشید که هرگونه پیشنهاد مدیریت سرمایه یا فروش تحلیل و یا برگزاری کلاس و ... که خارج از محیط عمومی فروم باشد را به هیچ عنوان بدون تحقیق و کسب اطلاعات کامل و کافی دنبال نکنید در غیر این صورت مسئولیت و عواقب آن بر عهده خود شخص می باشد.

همچنین لازم به ذکر است مسئولیت ارتباطات خارج از پست های عمومی فروم اعم از پیام خصوصی یا چت یا دیداری یا شنیداری با سایر اعضای فروم کاملا با خود اعضا هست و وارد کردن آن به صورت عمومی در فروم ممنوع است. برای امنیت بیشتر جهت گرفتن پاسخ سوالات خود از انجمنها استفاده نمایید.

دوستان توجه داشته باشند که تمامی بخش های اختصاصی و عمومی فروم کاملا رایگان بوده و به هیچ عنوان نیاز به پرداخت وجه به هیچ کس برای باز شدن دسترسی نیست.

منتها به این دلیل که در این بخش ها معمولا کار تیم ورک و گروهی انجام میشود، مناسب ورود افراد با شرایط خاصی است که مدیر آن بخش تعیین میکند و برای همه افراد کارایی ندارد چون مستلزم بر عهده گرفتن مسئولیت یا دانش کافی در آن حوزه می باشد.

لذا ضمن پوزش از کاربرانی که تقاضای دسترسی آن ها به بخش های اختصاصی توسط مدیران بخش رد میشود، توصیه میکنیم که پس از فراگیری موضوعات عمومی و تخصصی فراوانی که در روی فروم قرار دارد چنانچه برنامه ویژه ای برای کار در بخش های اختصاصی و کار گروهی دارند آن را مکتوب برای مدیران هر بخش بنویسند و سپس اقدام به درخواست دسترسی بکنند.


با احترام
مشاهده بیشتر
مشاهده کمتر

آموزش زبان mql4 از مقدماتی تا کاربردی توسط mda7

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
پاک کردن همه
پست های جدید

  • #61
    یه راهنمایی میکنم
    نمیدونم این تشبیه چقدر درست باشه چون خودم اصلا شطرنج بازی نمیکنم واسه اینکه طاقت صبر کردن ندارم

    وقتی یک کدی یا تابعی رو مینویسید فرض کنید دارید شطرنج بازی میکنید
    باید تمام جوانب کار رو مد نظر داشته باشید و تمام حرکتهای ممکنه بعدی طرفتون رو حدس بزنید
    نمیخوام توی این پست جواب رو بدم برای اینکه میخوام خودتون فکر برنامه نویسیتون راه بیفته
    وقتی دارید از تابع Orderstotal استفاده میکنید اولا باید بدونید که این تابع چه کاری انجام میده؟!!! (تعداد کل پوزیشنها رو بهتون برمیگردونه)
    بعد باید فکر جاهای دیگه رو بکنید که چه حالتهایی ممکنه براتون در اجرا شدن برنامه پیش بیاد.

    فکر کنم خیلیش رو گفتم .
    حالا لطفا برنامه رو در دمو اجرا کنید و با فکر کردن پیدا کنید که مشکل کجاست!
    بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
    تو نمی توانی ... !
    ٠•●ஜ رومن پولانسکی ஜ●•٠




    نظر


    • #62
      سلام
      حسب دستور اینکار را انجام دادم مشاهده گردید که با فعال شدن اکسپرت یک پوزیشن با لات سایز بیشتر باز شده در حالی که تی پی هم برای ان قرار داده شده است .در صورتی که در اکسپرت ما تی پی تعریف نکردیم .
      ظااهرا با هر پوزیشن جدید لات سایز هم بیشتر می شود ضمنا پوزیشن اول با لات0.1 در واقع پندینگ اردر بوده است .
      عکس پوزیشن پیوست است

      ویرایش توسط ناظرسایت : https://www.traderha.com/member/5564-ناظرسایت در ساعت 01-24-2014, 05:55 PM

      نظر


      • #63
        نوشته اصلی توسط hamkar81 نمایش پست ها
        سلام
        حسب دستور اینکار را انجام دادم مشاهده گردید که با فعال شدن اکسپرت یک پوزیشن با لات سایز بیشتر باز شده در حالی که تی پی هم برای ان قرار داده شده است .در صورتی که در اکسپرت ما تی پی تعریف نکردیم .
        ظااهرا با هر پوزیشن جدید لات سایز هم بیشتر می شود ضمنا پوزیشن اول با لات0.1 در واقع پندینگ اردر بوده است .
        عکس پوزیشن پیوست است
        قرار شد اول پندینگ رو در یک جای دور از قیمت باز کنید و بعد اکسپرت رو ران بفرمایید.

        شما احتمالا اول اکسپرت رو ران کردید که یک بای براتون گرفته بعد پندینگ سل 3.2 لاتی گذاشتید .

        به من بگید که ordesrstotal دقیقا چکاری انجام میده؟
        ویرایش توسط mda7 : https://www.traderha.com/member/3339-mda7 در ساعت 01-24-2014, 05:00 PM
        بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
        تو نمی توانی ... !
        ٠•●ஜ رومن پولانسکی ஜ●•٠




        نظر


        • #64
          سلام
          من ابتدا پندینگ را قرار دادم ولی نزیدیک .
          دوباره تست می کنم در جای دورتر.
          این تابع بنظر من تمام پوزیشنهایی که باز است را بررسی می کند.

          نظر


          • #65
            برای اینکه از کدتون مطمئن باشید کدی رو که تا اینجا نوشته شده رو قرار میدم

            با کد خودتون چک کنید و ران کنید

            تابع orderstotal کل اردر ها رو برمیگردونه : اردرهای باز + پندینگها.

            لینک
            ویرایش توسط mda7 : https://www.traderha.com/member/3339-mda7 در ساعت 01-24-2014, 06:31 PM
            بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
            تو نمی توانی ... !
            ٠•●ஜ رومن پولانسکی ஜ●•٠




            نظر


            • #66
              وقتی توتال اردر همه رو می شماره تا اون پندینگ وجود داشته باشه هیچ پوزیشنی نمی گیره
              شرط اول در واقع برقرار نمیشه یعنی توتال اردر بیشتر از یک هست و از حلقه میاد بیرون و اصلا شرایط استراتژی رو تست نمی کنه
              باید یکجوری به برنامه حالی کنیم که کدام اردرها رو بشمره
              مثلا روی هر سیمبل محدودیت یک اردر باشه و مثلا کلا 3 تا اردر باز

              نظر


              • #67
                نوشته اصلی توسط alizali نمایش پست ها
                وقتی توتال اردر همه رو می شماره تا اون پندینگ وجود داشته باشه هیچ پوزیشنی نمی گیره
                شرط اول در واقع برقرار نمیشه یعنی توتال اردر بیشتر از یک هست و از حلقه میاد بیرون و اصلا شرایط استراتژی رو تست نمی کنه
                باید یکجوری به برنامه حالی کنیم که کدام اردرها رو بشمره
                مثلا روی هر سیمبل محدودیت یک اردر باشه و مثلا کلا 3 تا اردر باز
                آفرین
                ولی هنوز هیچ حلقه ای نداریم و فقط شرط برقرار نیست
                بحث حلقه ها رو در پستهای بعدی خواهیم کرد.
                بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                تو نمی توانی ... !
                ٠•●ஜ رومن پولانسکی ஜ●•٠




                نظر


                • #68
                  پست 14 - حل کامل مشکل تعداد اردرها..

                  هونطور که دیدیم Orserstotal همه اردهای باز رو میشمره و براش فرقی نمیکنه که این اردر روی چه جفت ارزی باشه یا فرقی نمیکنه که لیمیت باشه یا پوزیشن باز
                  فرض کنید شما در حال ترید کردن بر روی طلا هستید و این اکسپرت رو هم روی یورو/دلار ران میکنید ، اگر روی طلا پوزیشن بازی داشتید در واقع Orderstotal بیشتر از 0 خواهد بود
                  پس اکسپرت نخواهد تونست که کاری انجام بده

                  برای حل این مساله ما باید بین Orderstotal به دنبال پوزیشنهایی بگردیم که هم ارز با ارزی باشه که اکسپرت رو ران کردیم ، در ضمن به پوزیشنهای پندینگ هم کاری نخواهیم داشت.
                  یعنی بین تمام اردر ها از 0 تا کلشون باید بگردیم و پوزیشنهایی رو که لازم داریم رو سوا کنیم بعد بشماریمشون...

                  برای اینکار از حلقه for استفاده میکنیم
                  (++for(i=0 ; i < OrdersTotal() ; i

                  همونطور که ملاحظه میکنید for سه قسمت داره که با سمیکالن " ; " از هم جدا شدند.
                  از سمت چپ اولین مفدار گویای این هست که از چه عددی باید شروع کنیم
                  دومین مقدار نشان دهنده این هست که تا چه مقداری باید پیش بریم
                  مقدار سوم هم بازگو کننده این هست که دفعه دوم شمارنده به کجا منتقل بشه یا به زبان شاده چند تا چند تا باید جلو بریم.
                  ++i یعنی اینکه هر بار i رو یک واحد افزایش میدیم و میشد این رو به این صورت هم بنویسیم 1 + i = i
                  در ابتدا 0 = i هست ، بار دوم که for.اجرا میشه 1 + 0 = i بار سوم 1. + 1 = i و .... تا اینکه مقدارمون برسه به 1 دونه کمتر از orderstotal.

                  پس ما نیاز داریم که قبل از اینکه دستور اردر بدیم ، تعداد پوزیشنهای باز این جفت ارز رو داشته باشیم پس قبل از دستورات ordersend این کار رو انجام میدیم
                  فعلا شکل رو داشته باشد تا بقیه پارامتر ها رو توضیح بدم .



                  همون طور که میبینید قبل از ordersendها باید پوزیشنها رو میشمردیم که این کار انجام شد
                  و در قسمت اردر گیری شرط قبلی رو برداشتم و بجاش شرط جدید اضافه کردم.

                  بعد از اینکه حلقه for .رو نوشتیم باید که بوسیله OrderSelect پوزیشن رو بردارید (سلکت کنید) تا بتونیم سیمبل و نوع بای یا سل بودنش رو تشخیص بدیم اگر این کار رو انجام ندیم برنامه با مشکل مواجه میشه و نمیتونه تشخیص بده که منظور از نوع بای یا سل بودن کدوم پوزیشن رو باید چک کنه!

                  یه متغیر از نوع عدد صحیح بنام orderscnt هم تعریف کردیم که در واقع تعداد پوزیشنها رو در اون ذخیره خواهیم کرد
                  قبل از شمارش به اون عدد 0 دادیم تا در هر تیک قبل از شمردن تعداد رو صفر بکنه و از نو بشمره تا عدد قبلی در تیک قبل با تعداد جدید جمع نشن.
                  ++ هم رو بالا توضیح دادم خدمتتون
                  هر گاه شرط برقرار بشه یک واحد به
                  orderscnt اضافه خواهد شد قبل از for. مقدارش 0 هست و اگر پوزیشنی پیدا کنه که ما لازم داریم یک واحد بهش اضافه میشه
                  واین حلقه تا زمانی که همه پوزینهای باز رو چک کنه ادامه پیدا میکنه و وقتی کار حلقه تموم شد ازش خارج میشه و میره سراغ خطوط بعدی کد که همون ordersend هست.

                  حالا ازتون میخوام که حلقه رو برعکس بنویسید یعنی i از orderstotal شروع بشه . به 0 ختم بشه
                  ویرایش توسط mda7 : https://www.traderha.com/member/3339-mda7 در ساعت 01-24-2014, 08:16 PM
                  بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                  تو نمی توانی ... !
                  ٠•●ஜ رومن پولانسکی ஜ●•٠




                  نظر


                  • #69
                    دوستان لطفا جواب رو سریعتر بنویسید که تا ابتدای هفته بتونیم مطالب جدیدی رو یاد بگیریم
                    بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                    تو نمی توانی ... !
                    ٠•●ஜ رومن پولانسکی ஜ●•٠




                    نظر


                    • #70
                      از این به بعد دیگه سوالی نخواهم پرسید و پستها رو پشت سر هم خواهم زد تا این استراتژی تموم بشه ...
                      معلوم هست که یا کسی پیگیر موضوع نیست یا اهمیتی براشون نداره که در چه سطحی یاد بگیرند.

                      به هر حال ، سعی میکنم امشب اگه فرصت کنم حتما یک پست دیگه در ادامه آموزش بنویسم.

                      موفق و پیروز باشید.
                      بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                      تو نمی توانی ... !
                      ٠•●ஜ رومن پولانسکی ஜ●•٠




                      نظر


                      • #71
                        پست 15 - بستن نصف

                        نیمی از معامله را با سود دو برابر مخاطره ای که پذیرفته اید ببندید و در نیم دیگر حد توقف را به نقطه ورود منتقل فرمایید.

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

                        برای این کار لازم هست که ابتدا اردرها رو مثل قبل بگردیم و سلکت کنیم و تک تک بررسیشون کنیم
                        و اگر شرط برقرار شد دستور close بهش بدیم
                        اگر یادتون باشه قبلا برای شمردن پوزیشنها این کار رو کرده بودیم
                        و برای اینکه دوباره کاری نشه میتونیم داخل همون کد ، کدهای جدیدمون رو بگنجونیم..

                        بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                        تو نمی توانی ... !
                        ٠•●ஜ رومن پولانسکی ஜ●•٠




                        نظر


                        • #72
                          int orderscnt=0;
                          for( int i=OrdersTotal();i>=0;i--)
                          { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                          if((OrderSymbol()==Symbol())&&((OrderType()==OP_SE LL))||((OrderType()==OP_BUY)))
                          }
                          orderscnt++;
                          }}
                          اقا مهدی ضمن تشکر از زحمتتاتون من امروز رسیدم پست قبلی بخونم جوابش درحد توانم نوشتم

                          من در مورد ordersend سیوال داشتم بدون اینکه آنرا مساوی ticket قرار دهیم ایا اجرا میشه ، تا جاییکه فهمیدم ticket عدد صحیحی است که به اوردر مربوط می شود ایا درسته
                          ویرایش توسط محمدآرامش : https://www.traderha.com/member/9501-محمدآرامش در ساعت 01-28-2014, 01:08 AM

                          نظر


                          • #73
                            نوشته اصلی توسط محمدآرامش نمایش پست ها
                            int orderscnt=0;
                            for( int i=OrdersTotal();i>=0;i--)
                            { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                            if((OrderSymbol()==Symbol())&&((OrderType()==OP_SE LL))||((OrderType()==OP_BUY)))

                            orderscnt++;
                            }
                            اقا مهدی ضمن تشکر از زحمتتاتون من امروز رسیدم پست قبلی بخونم جوابش درحد توانم نوشتم

                            من در مورد ordersend سیوال داشتم بدون اینکه آنرا مساوی ticket قرار دهیم ایا اجرا میشه ، تا جاییکه فهمیدم ticket عدد صحیحی است که به اوردر مربوط می شود ایا درسته
                            1 - ()orserstotal (همون قضیه شمارش از 0 در کد نویسی هست)
                            به جز این همش درست هست
                            تابع ordersend از نوع int هست و بعد از اجرا شدن یک عدد صحیح رو برمیگردونه که همون شماره اردر هست (شماره تیکت) من هم اسمش رو تیکت گذاشتم تا قابل لمس تر باشه
                            بله بدون تیکت هم کار میکنه ولی اگر بعدا بخواهید از شماره پوزیشن در کدنویسی استفاده کنید بهتر هست که برابر یک متغیر قرار بدید مثل همینی که نوشتیم
                            بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                            تو نمی توانی ... !
                            ٠•●ஜ رومن پولانسکی ஜ●•٠




                            نظر


                            • #74
                              پست 16 - انتقال استاپ به نقطه ورود

                              نیمی از معامله را با سود دو برابر مخاطره ای که پذیرفته اید ببندید و در نیم دیگر حد توقف را به نقطه ورود منتقل فرمایید.

                              بعد از اینکه نیمی از پوزیشن بسته شد نیاز داریم تا با دستوری استاپلاس رو به نقطه 0 منتقل کنیم (اردر را باید مدیفای کنیم)
                              برای این منظور از دستور OrderModify استفاده میکنیم

                              و تنها کاری که باید انجام دهیم این هست که دقیقا بعد از اینکه دستور OrderClose رو نوشتیم در سطر پائین دستور Modify رو بنویسیم



                              به این شکل :




                              بزرگترین لذت در زندگی ، انجام دادن کاری ست که دیگران می گویند :
                              تو نمی توانی ... !
                              ٠•●ஜ رومن پولانسکی ஜ●•٠




                              نظر


                              • #75
                                سلام
                                من متن کد را نوشتم بدون کد مودیفای استاپ ولی ارور پرانتز میگیره که نتونستم رفع کنم:

                                double sma50;
                                double sma100;
                                double macd;

                                bool buymode;
                                bool sellmode;

                                double slb;
                                double sls;
                                extern double lotsize=0.1;
                                int ticket;

                                //+------------------------------------------------------------------+
                                //| expert initialization function |
                                //+------------------------------------------------------------------+
                                int init()
                                {
                                //----

                                //----
                                return(0);
                                }
                                //+------------------------------------------------------------------+
                                //| expert deinitialization function |
                                //+------------------------------------------------------------------+
                                int deinit()
                                {
                                //----

                                //----
                                return(0);
                                }
                                //+------------------------------------------------------------------+
                                //| expert start function |
                                //+------------------------------------------------------------------+
                                int start()
                                {
                                sma50=iMA(Symbol(),0,50,0,0,0,0);
                                sma100=iMA(Symbol(),0,100,0,0,0,0);
                                macd=iMACD(Symbol(),0,12,26,9,0,0,0);
                                //

                                //Cheking oppened positions

                                int orders=0;
                                for(int i=0; i<OrdersTotal();i=++)
                                {
                                OrderSelect(i;SELECT_BY_POS;MODE_TRADES);
                                if((OrderSymbol()==Symbol())&&((OrderType==OP_SELL )||(OrderType==OP_BUY))
                                orders++;
                                }

                                // closing sell positions

                                if((OrderSymbol()==Symbol())&&(OrderType==OP_SELL) )
                                {
                                if(Ask=<(OrderOpenPrice()-(sls-OrderOpenPrice())*2)
                                OrderClose(OrderTicket(),lotsize/2,Ask,2,Black)
                                }
                                //closing buy positions

                                if((OrderSymbol()==Symbol())&&(OrderType==OP_BUY))
                                {
                                if(Bid>=(OrderOpenPrice()+(OrderOpenPrice()-slb)*2)
                                OrderClose(OrderTicket(),lotsize/2,Bid,2,Black)
                                }
                                //buy and sell mode

                                buymode= (macd>0)&&(Bid>sma50+10*Point)&&(Bid>(sma100+10*Po int));
                                sellmode= (macd<0)&&(Bid<sma50-10*Point)&&(Bid<(sma100-10*Point));

                                // stop losses

                                slb= iLow(Symbol(),0,iLowest(Symbol(),0,MODE_LOW,5,0));
                                sls= iHigh(Symbol(),0,iHighest(Symbol(),0,MODE_HIGH,5,0 ));

                                // order execution

                                if(buymode)
                                {
                                ticket= OrderSend(Symbol(),OP_BUY,lotsize,Ask,2,slb,0,"sae id1",123456789,5,Blue);
                                }
                                if(sellmode)
                                {
                                ticket= OrderSend(Symbol(),OP_SELL,lotsize,Bid,2,sls,0,"sa eid1",123456789,5,Red);
                                }



                                return(0);
                                }
                                چطوری میشه متن کد را مثل شما بگذارم؟
                                ویرایش توسط candletrader : https://www.traderha.com/member/7537-candletrader در ساعت 01-28-2014, 03:52 PM

                                نظر

                                پردازش ...
                                X