سوالات برنامه نویسی

سوال بپرسید, جواب بگیرید و با انجمن های ما در سرتاسر دنیا در ارتباط باشید.

آکادمی ایران ام کیو ال انجمن سوالات MQL4 مشکل در مولتی تایم کردن اندیکاتور

  • مشکل در مولتی تایم کردن اندیکاتور

    نوشته شده توسط alireza137871 در 2024-04-27 در 11:56 ب.ظ

    سلام
    روزتون بخیر
    من یک اندیکاتور دارم که به صورت مولتی تایم فریم عمل میکنه و چهارتا بافر داره : OpenBuffer , CloseBuffer , CoBuffer , S1Buffer
    مقدار بافر های اوپن ، کلوز و Co (بافر Co مقدار کلوز منهای اوپن هستش) همگی از کندل های تایم فریم ۱۵ دقیقه گرفته میشه و توی تایم های پایینتر یعنی ۵ دقیقه و ۱ دقیقه هم همون مقدار ۱۵ دقیقه رو نشون میده
    اما S1Buffer که در واقع یک مووینگ اوریج سیمپل از ۲۶ کندل آخر به جز کندل لایو هستش مقدارش در ۱۵ دقیقه نشون داده میشه اما در تایم فریم های پایینتر نشون داده نمیشه من میخام این مقدار S1Buffer در تایم فریم های پایینتر برابر با تایم فریم ۱۵ دقیقه باشه

    کسی میتونه کمکم کنه؟

    ممنون

    کد اندیکاتور:

    //+------------------------------------------------------------------+
    

    //| CandleLines.mq4|

    //| Copyright 2024 , CandleLines | //| no site | //+------------------------------------------------------------------+ #property strict #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 clrBlack #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_color2 clrGreen #property indicator_style2 STYLE_SOLID #property indicator_width2 2 #property indicator_color3 clrBlue #property indicator_style3 STYLE_SOLID #property indicator_color4 clrOrange #property indicator_style4 STYLE_SOLID double OpenBuffer[]; double CloseBuffer[]; double COBuffer[]; double S1Buffer[]; int OnInit() { // Set the indicator buffers SetIndexBuffer(0, OpenBuffer); SetIndexBuffer(1, CloseBuffer); SetIndexBuffer(2, COBuffer); SetIndexBuffer(3, S1Buffer); SetIndexLabel(0, "open"); SetIndexLabel(1, "close"); SetIndexLabel(2, "co"); SetIndexLabel(3, "s1"); return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int barsToProcess = rates_total - prev_calculated; for(int i = 0; i < barsToProcess; i++) { int bufferIndex = rates_total - i - 1; datetime currentTime = time[bufferIndex]; datetime m15Time = iTime(NULL, PERIOD_M15, iBarShift(NULL, PERIOD_M15, currentTime, true)); int m15bar = iBarShift(NULL, PERIOD_M15, currentTime, true); double m15Open = iOpen(NULL, PERIOD_M15, iBarShift(NULL, PERIOD_M15, m15Time)); double m15Close = iClose(NULL, PERIOD_M15, iBarShift(NULL, PERIOD_M15, m15Time)); OpenBuffer[bufferIndex] = m15Open; CloseBuffer[bufferIndex] = m15Close; COBuffer[bufferIndex] = CloseBuffer[bufferIndex] - OpenBuffer[bufferIndex]; S1Buffer[bufferIndex] = iMAOnArray(COBuffer, 0, 26, 0, MODE_SMA, m15bar+1); } // Return that calculation is successful return(rates_total); }
    • این گفتگو اصلاح شد 2 ماه، 4 هفته پیش توسط  alireza137871.
    alireza137871 پاسخ داد 2 ماه، 4 هفته پیش 1 عضو · 0 پاسخ ها
  • 0 پاسخ ها

با عرض پوزش، هیچ پاسخی یافت نشد.

برای پاسخ دادن وارد سایت شوید.