سؤال

هل لدى أي شخص أي رمز مثال على كيفية إنشاء إشارة دخول قائمة من اليوم في Metatrader 4؟ على سبيل المثال في ساعة معينة ودقيقة من كل يوم

هل كانت مفيدة؟

المحلول

لقد كنت أعمل على هذه الوظيفة. يجب تخصيص الكثير - أنا أعمل على تقديم نسخة أكثر عمومية ؛ ستكون كبيرة جدًا ومملة لدرجة أنها ستحتاج إلى خاصة بها include ملف. لكن الأمر يستحق أن يكون قادرًا على التمسك به على مخططات مختلفة دون تغيير الكود. سيكون في الأساس بيان حالة كبير مع ما قمت بتخصيصه هنا بالفعل إلى كل إطار زمني فردي.

ما الذي كنت تعمل عليه؟ شكرا لاهتمامك في الوقت والفوركس!

bool existordertime( datetime time, int otype = -37 ) {
    // +---------------------------------------------------------------+
    // | this function is intended for use inside of if() and other conditionals
    // | usually called with TimeCurrent() example:
    // | 
    // | if ( !existordertime( TimeCurrent() ) )
    // | 
    // | it accepts a datetime. A datetime is:
    // | a number of seconds elapsed from 00:00 January 1, 1970
    // | they can be treated as integers as such or accessed with other functions
    // | so that if statements can be commented in and out easily based on what 
    // | timeframe we plan on looking at.
    // | there is an optional parameter for an order type if you need it.
    // | 
    // | KEEP IN MIND if you want to use this to trade something like a 5min 15min
    // | or 4hr your gonna need a lot of if statements like:
    // | 
    // | if (  MathMod( Minute() + 5, 5 ) == 0 )
    // | 
    // +------------------------------------------------------------------+
    for (int cnt = 0; cnt < OrdersTotal(); cnt++) {

        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

        if (OrderType() == otype || -37 == otype)

        // COMMENT OUT THE if()S YOU DON'T NEED HERE: 
        //                       also add new lines as needed
        // if (  MathMod( TimeMinute( time ) +  5,  5 ) == 0 )   //  5min chart
        // if (  MathMod( TimeMinute( time ) + 15, 15 ) == 0 )   // 15min chart
        // if (  MathMod( TimeMinute( time ) + 30, 30 ) == 0 )   // 30min chart
        // if (  MathMod( TimeHour(   time ) +  4,  4 ) == 0 )   // 4hour chart

        int dbOrderOpenTime = OrderOpenTime();                   // re-use SAVEs dbPOOL-access time ...

        if (                      TimeSeconds( time ) == TimeSeconds( dbOrderOpenTime ) )
            if (                  TimeMinute(  time ) == TimeMinute(  dbOrderOpenTime ) )
                if (              TimeHour(    time ) == TimeHour(    dbOrderOpenTime ) )
                    if (          TimeDay(     time ) == TimeDay(     dbOrderOpenTime ) )
                        if (      TimeMonth(   time ) == TimeMonth(   dbOrderOpenTime ) )
                            if (  TimeYear(    time ) == TimeYear(    dbOrderOpenTime ) )
                                return (TRUE);
    }

    for (cnt = 0; cnt < OrdersHistoryTotal(); cnt++) {

        OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);

        if (OrderType() == otype || -37 == otype)
        // COMMENT OUT THE if()S YOU DON'T NEED HERE: 
        //                       also add new lines as needed
        // if (  MathMod( TimeMinute( time ) +  5,  5 ) == 0 )   //  5min chart
        // if (  MathMod( TimeMinute( time ) + 15, 15 ) == 0 )   // 15min chart
        // if (  MathMod( TimeMinute( time ) + 30, 30 ) == 0 )   // 30min chart
        // if (  MathMod( TimeHour(   time ) +  4,  4 ) == 0 )   // 4hour chart

        int dbOrderOpenTime = OrderOpenTime();                   // re-use SAVEs dbPOOL-access time ...

        if (                      TimeSeconds( time ) == TimeSeconds( dbOrderOpenTime ) )
            if (                  TimeMinute(  time ) == TimeMinute(  dbOrderOpenTime ) )
                if (              TimeHour(    time ) == TimeHour(    dbOrderOpenTime ) )
                    if (          TimeDay(     time ) == TimeDay(     dbOrderOpenTime ) )
                        if (      TimeMonth(   time ) == TimeMonth(   dbOrderOpenTime ) )
                            if (  TimeYear(    time ) == TimeYear(    dbOrderOpenTime ) )
                                return (TRUE);
    }

    return (FALSE);
}

نصائح أخرى

TimeLocal() يمنحك عدد الثواني منذ منتصف الليل في الأول من يناير 1970 من جهاز الكمبيوتر المحلي الخاص بك (عميل الطرفية).

TimeCurrent() يمنحك عدد الثواني منذ منتصف الليل في الأول من يناير 1970 من كمبيوتر وسيطك (الخادم).

يمكنك تحويل أي منهما إلى سلسلة مثل SO:

string ct = TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS);
Print("Client Time: ", ct);

string st = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
Print("Server Time: ", st);

يمكنك أيضًا الحصول على عناصر فردية من رقم التاريخ مثل:

Print("Year:",TimeYear(TimeCurrent())," Month:",TimeMonth(TimeCurrent()));

يمكن العثور على دليل المبرمجين عبر الإنترنت MQL4 هنا.

أتمنى أن يساعدك هذا.

هتافات،

علامة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top