正如標題所示,我需要在每天的特定時間獲取自定義指標的值以推斷平均值。我嘗試了以下代碼,它有效,但我如何每天重複它?提前致謝。
for(i=0; ilt;酒吧; i )
{
雙值=iCustom(0, 0, i);
if (Time[i]gt;StrToTime(2019.11.15 15:00) Time[i]lt;StrToTime(2019.11.15 18:00))
{
續 =1;
總和 =值;
平均值=總和/續;
}
}
正如標題所示,我需要在每天的特定時間獲取自定義指標的值以推斷平均值。我嘗試了以下代碼,它有效,但我如何每天重複它?提前致謝。
for(i=0; ilt;酒吧; i )
{
雙值=iCustom(0, 0, i);
if (Time[i]gt;StrToTime(2019.11.15 15:00) Time[i]lt;StrToTime(2019.11.15 18:00))
{
續 =1;
總和 =值;
平均值=總和/續;
}
}
完全同意,使用 iCustom 和 iBarShift 更有效的方式。稍後的緩衝區指示器可以添加 #resource 並通過示例調用以將文件編號減少到 1 插入代碼 #resource CallIndicator.ex4 extern ENUM_TIMEFRAMES CheckTime = PERIOD_D1; for(int i = CheckPeriod 1; i gt;= 0 ; --i) { datetime HighTF = iTime(_Symbol,PERIOD_CURRENT,i); int y = iBarShift(_Symbol,CheckTime,HighTF);雙 _AvgDist = iCustom(_Symbol, CheckTime,::Indicators\\CallIndicator.ex4,Type,CheckPeriod,0,y); }Originally Posted by ;
Dani,您的方法和 paulselvan 提出的方法太複雜了。不需要循環,也不需要手動比較時間。使用
https://www.mql5.com/en/docs/series/ibarshift使用您的目標時間範圍來找到您要使用的目標時間範圍的條形圖
https://www.mql5.com/en/docs/indicators/icustom使用 iBarShift() 返回的條形來獲取您想要的一天中確切時間的自定義指標值循環將使您的程序變慢並且容易出錯。盡可能避免它們。特別是當有標準功能來實現相同的功能時。
還要考慮 mn 插入代碼 int counter=0; int mn, prd=PERIOD_M1;//也測試 mn int day_begin=0, day_end=9;//prd limitgt; day_end gt;= day_begin gt;=0 int hr_begin=15, hr_end=18;//24gt; hr_end gt;= hr_begin gt;=0 雙平均,值=0;日期時間檢查時間; MqlDateTime mT; for (int day=day_begin; daylt;day_end; day ){//測試過去 10 天 candels TimeToStruct(iTime(_Symbol, PERIOD_D1, day), mT); for(int hr=hr_begin; hrlt;hr_end; hr ){//檢查從 15:00 到 18:00 的時間 mT.hour = hr; mn=0;而 (mnlt;60){ mT.min=mn;檢查時間 = StructToTime(mT);/值 = iCustom(_Symbol,prd, ..,iBarShift(_Symbol,prd,checkingTime)); mn =prd;//下期蠟燭計數器 ; } } if (counter !=0) average = value/counter;否則平均值=0; }
您可以使用 MqlDateTime 變量來簡化計算平均插入代碼 int day_begin=0, day_end=149, hr_begin=15, hr_end=18;雙值=0;日期時間檢查時間; MqlDateTime mT; for (int day=day_begin; daylt;=day_end; day ){//測試過去 150 天 TimeToStruct(iTime(_Symbol, PERIOD_D1, day), mT); for(int hr=hr_begin; hrlt;hr_end; hr ){//僅檢查從 15:00 到 18:00 的小時數 mT.hour = hr;檢查時間 = StructToTime(mT); value = iCustom(_Symbol,_Period,indicator_name,..,iBarShift(_Symbol,_Period,checkingTime)); } } 雙平均 = (day_end-day_end 1)*(hr_end - hr_begin 1); if (average gt;0) 平均值 = 值/平均值;否則平均值=0;
Originally Posted by ;在 paulselvan 的建議下,我已經實現了該指標,並且考慮到我只是定期使用它來檢查交易量的平均值,因此放慢速度沒有問題。但是,我感謝你們的寶貴建議,我一定會嘗試創建一個更輕的版本。再次感謝Originally Posted by ;