Results 1 to 8 of 8

Thread: 平滑的MTF MACD用於早期買入/賣出信號

  1. #1
    1附件嗨大家好

    您是否知道如何更改此代碼以使此MTF MACD更加流暢?

    讓我們說,在M1上使用indior繪製M5 MACD(使用默認設置12,26,9),然後indior將參考計算中使用的每個收盤價5次,直到移動到下一個收盤價(這將是再次使用5次)。因此,您獲得的樓梯踏步的MTF MACD更高或更低。

    如何更改,以便在任何給定時間室內參考主時間框架的下一個收盤價?
    案件:
    我們在M1上將MTF MACD設置為5(下一個更高的TF)。現在為了獲得更平滑的MACD值,我將在任何時候使用當前價格shift0和shift5,shift10,15,20,25等的收盤價。
    如果在M5和MTF MACD設置為M15,則indior應該參考當前價格shift0和shift3,shift6,9等的收盤價。

    我認為,每次較低的時間範圍繪製新條形時,更新的時間範圍MACD值都會更新。當然,它不會繪製精確的較高TF的MACD值,就像在較高的TF上繪製MACD一樣。但它會提供更早的零線交叉,以及可能更早的交易信號。

    我在這裡拿到了MTF MACD:[url = http://codebase.mql4.com/5660]。

    代碼粘貼在下面。你能幫助我嗎?必須更改start函數中的某些代碼才能獲得我的目標。

    乾杯
    托馬斯

    _______
    // ----------------------------------------------- -------------------
    //| MTF MACD.mq4 |
    // ----------------------------------------------- -------------------
    #property copyright mqlservice.co.uk
    #property鏈接http://mqlservice.co.uk/

    #property indior_separate_window
    #property indior_buffers 2
    #property indior_color1灰色
    #property indior_color2紅色
    //----輸入參數
    extern int TimeFrame = 0;
    extern int FastEMA = 12;
    extern int SlowEMA = 26;
    extern int Signal = 9;
    extern int AppliedPrice = 0;
    extern int Shift = 0;

    extern string note0 =應用價格0-CLOSE | 1-OPEN | 2-HIGH | 3-LOW |;
    extern string note1 = | 4-MEDIAN | 5-TYPICAL | 6加權|;
    extern string note2 =時間幀0 =當前時間範圍;
    外部字符串note3 = 1 = M1,5 = M5,15 = M15,30 = M30;
    extern string note4 = 60 = H1,240 = H4,1440 = D1;
    extern string note5 = 10080 = W1,43200 = MN1;
    //----緩衝區
    double MainBuffer [];
    double SignalBuffer [];

    // ----------------------------------------------- -------------------
    //|自定義室內初始化功能|
    // ----------------------------------------------- -------------------
    int init()
    {
    int draw_begin = MathMax(FastEMA,SlowEMA);
    string short_name = MTF MACD價格;
    //- - 在室內
    SetIndexStyle(0,DRAW_HISTOGRAM,0,2);
    SetIndexBuffer(0,MainBuffer);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1,SignalBuffer);
    打印(MTF MACD.mq4,Ver。#2);
    打印(版權所有©2009/05/26 MQL Service UK http://mqlservice.co.uk/);
    開關(AppliedPrice){
    案例1:short_name = short_name |開放;打破;
    情況2:short_name = short_name |高;打破;
    案例3:short_name = short_name |低;打破;
    案例4:short_name = short_name | MEDIAN;打破;
    案例5:short_name = short_name |典型的;打破;
    案例6:short_name = short_name |加權;打破;
    默認值:
    AppliedPrice = PRICE_CLOSE; SHORT_NAME = SHORT_NAME |關 ;打破;
    }
    if(TimeFramelt; Period())TimeFrame = Period();
    string TFName =;
    開關(時限)
    {
    案例1:TFName = M1;打破;
    情況5:TFName = M5;打破;
    案例15:TFName = M15;打破;
    情況30:TFName = M30;打破;
    case 60:TFName = H1;打破;
    情況240:TFName = H4;打破;
    case 1440:TFName = D1;打破;
    case 10080:TFName = W1;打破;
    case 43200:TFName = MN1;打破;
    默認值:TFName = Chart;時限=週期();打破;
    }

    short_name = StringConenate(short_name,(TF TFName , FastEMA , SlowEMA , Signal ));
    IndiorShortName(SHORT_NAME);
    SetIndexDrawBegin(0,draw_begin);
    SetIndexDrawBegin(1,draw_begin);
    SetIndexLabel(0,主);
    SetIndexLabel(1,信號);
    IndiorDigits(6);
    返回(0);
    }
    // ----------------------------------------------- -------------------
    //|定制室內取消初始化功能|
    // ----------------------------------------------- -------------------
    int deinit()
    {
    //----

    //----
    返回(0);
    }
    // ----------------------------------------------- -------------------
    //|自定義室內迭代功能|
    // ----------------------------------------------- -------------------
    int start()
    {
    int limit,iChart,iTF,delta = 0;
    datetime TimeArray [];
    if(TimeFramegt; Period())delta = MathCeil(TimeFramePeriod());
    int counts_bars = IndiorCounted();
    //----檢查可能的錯誤
    if(counts_barslt; 0)return(-1);
    //----將重新計算最後計算的欄
    if(counting_barsgt; 0)counting_bars--;
    極限=棒材 - counted_bars 增量;

    ArrayCopySeries(TimeArray,MODE_TIME,符號(),時間範圍);

    ITF = 0;
    for(Chart = 0; iChart; limit; iChart)
    {
    while(Time [iChart] lt; TimeArray [iTF])iTF ;
    MainBuffer [iChart] = EMPTY_VALUE;
    SignalBuffer [iChart] = EMPTY_VALUE;
    MainBuffer [iChart] = iMACD(符號(),時間範圍,FastEMA,SlowEMA,信號,AppliedPrice,MODE_MAIN,ITF Shift鍵);
    SignalBuffer [iChart] = iMACD(符號(),時間範圍,FastEMA,SlowEMA,信號,AppliedPrice,MODE_SIGNAL,ITF Shift鍵);
    }
    返回(0);
    }

    // ----------------------------------------------- -------------------

    https://www.forex-pedia.com/attachme...1556900020.mq4

  2. #2
    如何收集和引用從MaximumTimeFramePresentTimeFrame = TFfactor和MACD中的周期數定義數組的價格數組? FastPeriod的數組(在本例中為FastPeriod = 12)為:Shift0和11個週期,每個值之間有TFfactor(如果PresentTimeFrame = M5和HigherTimeFrame = M15則快速週期引用的數組為Shift0,3,6,9 M5上的,12,15,18,21,24,27,30,33)。對於SlowPeriod數組也是如此。

  3. #3
    1附件認為這有點朝向你想要的東西(現在沒有時間了)。可能需要調整? (沒有實時嘗試)。 HTH
    https://www.forex-pedia.com/attachme...0849415505.mq4

  4. #4
    Quote Originally Posted by ;
    認為這會對你想要的東西有所幫助(現在不再有時間了)。可能需要調整? (沒有實時嘗試)。 HTH
    謝謝 - 我會測試它,研究代碼並回复你

  5. #5
    2附件
    Quote Originally Posted by ;
    認為這會對你想要的東西有所幫助(現在不再有時間了)。可能需要調整? (沒有實時嘗試)。 HTH
    你好Futurespec很忙,但現在我測試了它。由於您的版本實際領先,因此M1M5比較看起來很有希望。這裡直方圖在0317處低於零線,其中另一個MTF MACD(普通MACD)在0320-3個小時後穿過零線。然而,看起來indior只是在進行平滑處理,因為它被附加到圖表上,而不是實時運行。 M5H1比較顯示了另一個問題。看起來它不會保持較高的時間幀值(在較低的時間範圍內)直到1個週期才能轉到下一個整個小時值。 H1圖表上的普通MACD和參考H1的另一個MFT MACD在時間1400處具有0.000009的MACD值。但是mnMTF MACD直到1455才獲得該值 - 所以這裡它是滯後的。同樣的情況是1500小時與1555和1600小時相比,而1655值則相同。您的版本通過平均較高時間幀的值來平滑值是否正確?這就是我的目標 - 在5MH1參考的情況下:你可以在數學上為FastPeriod值12小時數量地定義一個收盤價數組,並為SlowPeriod值定義26小時?因此,在過去一小時的時間05,它參考收盤價格在xx05 12小時後和xx05 26小時後...以及在小時後10分鐘,分別參考過去12小時和26小時的所有xx10值。謝謝你的幫助。不能保證這個想法值得,但我認為你會獲得更高時間幀參考和早期交易觸發的穩定性的組合。
    https://www.forex-pedia.com/crypto-t...fic-price.html
    https://www.forex-pedia.com/forex-ma...red-green.html

  6. #6

    Quote Originally Posted by ;
    這就是我的目標 - 在5MH1參考的情況下:你可以在數學上為FastPeriod值12小時數量地定義一個收盤價數組,並為SlowPeriod值定義26小時?因此,在過去一小時的時間05,它參考收盤價格在xx05 12小時後和xx05 26小時後...以及在小時後10分鐘,分別參考過去12小時和26小時的所有xx10值。
    MT4是否具有與C 中的模數運算符相當的東西?我被告知C 中的模數運算符非常適合省略不需要的值。參考:
    http://www.cprogramming.com/tutorial/modulus.html是的,實際上確實如此!我搜索了mql4.com,發現存在相同的功能。因此,如果delta = TimeFramePeriod()那麼我們可以測試條件:if(bar%delta == 0)所有將返回true的條形應該包含在用於MACD計算的新MTF數組中。如果圖表時間範圍是M5並且較高的參考時間範圍是H1,那麼delta = 60/5 = 12 if(bar%delta == 0)然後將返回0,7,24,36,48等處的柱線因為只有這些數字在除以12(delta)時才會返回整數。任何其他條形(例如條形圖37)將在除以12時返回十進制數。這樣,應該用於MTF MACD計算的條形可以很容易地放在單獨的條形序列中,可以用於任何時間段MACD。現在的問題是:它可以編碼,誰能在MT4中做到這一點?

  7. #7
    MathMod(double value,double value2)在MT4中也是如此。至於編碼...不是問題,但對不起,我目前沒有時間。

  8. #8

發布權限

  • 您不可發布新主題
  • 您不可回复
  • 您不可發布附件
  • 您不可編輯您的帖子
  •  
  • BB代碼是打開的
  • 表情符號是打開的
  • [IMG]代碼是打開的
  • [視頻]代碼是打開的
  • HTML代碼是關閉的
forex-pedia網站使用cookie 文字跟蹤
forex-pedia.com網站使用cookie 文字跟蹤,某些設定已經固定。您可以點擊此處閱讀我們的Cookie使用說明。 請點擊右鍵接受我們的cookies。如果您選擇繼續使用forex-pedia.com網站,我們將認為您接受我們的cookies。