2010-01-22 68 views
2

有沒有人有任何關於如何在Metatrader 4中生成基於時間的輸入信號的示例代碼?例如在每天的特定時間和小時分鐘MT4 MetaTrader4中基於時間的輸入信號

+0

有沒有這個你正在尋找的某個部分(例如邏輯來告訴它是什麼時候,啓動交易的邏輯等)?或者你在尋找所有的東西? – malonso 2010-01-29 23:04:22

+0

只是尋找方法。如果符合其他標準,我期待在特定時間使用它開設交易。 – PeanutPower 2010-01-30 16:11:23

回答

1

我一直就在這樣一個功能。它必須進行定製 - 我正在努力製作更通用的版本;它將會非常繁瑣,需要自己的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); 
} 
+0

你的代碼看起來不像代碼。而且,它不能被人類編輯。你可以幫助縮進四個空格嗎?它會增加可讀性 – eeerahul 2011-12-09 06:00:18

+0

@eeerahul是的,正確。 MQL4社區有一個非常奇怪的習慣,產生MQL代碼(C語法),就好像他們必須爲它上面的每個字符支付一美元......這個習慣是IMO不可改變的。上一次見過類似那是在360KB軟盤的時代,在那裏大型的基於LISP的軟件模塊被完全刪除,只保留語法上「必要」的字符,然後代碼看起來像哈希碼d,因爲需要適合FDD媒體的有限存儲容量。 (孩子們幾乎不會相信有些電腦沒有硬盤,並從FDD啓動+運行......) – user3666197 2014-06-14 18:50:38

+0

@nbrooks在對代碼塊進行了幾次重新編輯之後,請考慮到,最初有一個意圖使作者對算法的處理方式保持不變。當你修改格式和邏輯時,你可能會被告知,通過'Time [iShift(...)]'和其他主要項目在不同時間範圍內進行操作的算法會更好,超越了不那麼清晰的定義的問題有待回答。代碼塊在最初的問題的方向上沒有做任何事情,而是廣泛地重新讀取dbpool(不考慮'.Select()'結果) – user3666197 2014-06-14 19:13:52

1

TimeLocal()爲您提供自本地計算機(終端客戶端)1970年1月1日午夜起的秒數。

TimeCurrent()給出自您經紀商計算機(服務器)1970年1月1日午夜以來的秒數。

您可以對這些轉換爲字符串,像這樣:

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在線程序員指南可發現here

希望這會有所幫助。

乾杯,

馬克