Привет, у меня есть вопрос к некоторым действительно хорошим программистам метатрейдеров. В моем советнике я переключаюсь между таймфреймами в зависимости от функции. Если эксперт определяет, что я должен использовать 15-минутные таймфреймы, то он вызывает RangePrefetch () сразу после start (). Если мне нужно использовать 1-часовые графики, то советник вызывает TrendPrefetch () сразу после start (). И RangePrefetch (), и TrendPrefetch () абсолютно одинаковы, за исключением периода, и они определены и сразу после init ().
Проблема состоит в том, что из-за этого переключения между таймфреймами, для его тестирования и оптимизации требуется значительно больше времени. Поэтому мне интересно, есть ли какой-нибудь способ переупорядочить код или просто кодировать его более эффективным способом, чтобы он работал намного быстрее. большое спасибо.
Вставленный код extern double JumpWidth_Percen = 0,25; строка Trend, Buy, Sell, TradeComm; двойной Close1, Close2, Close3, Close4, Close5, Close6, Open1, Open2, Open3, Open4, Open5, Open6, Fast1, Fast2, Fast3, Fast3, Fast5, Fast6, Slow1, Slow2, Slow3, Slow4, Slow5, Slow6, Средний , FastW, Currency_momentumA, Currency_momentumB, Currency_momentumC, Trend_momentumFastA, Trend_momentumFastB, Trend_momentumFastC, Trend_momentumFastD, Trend_momentumSlowA, Trend_momentumSlowB, ширина1, ширина2, ширина, ширина, ширина2, ширина-ширина5, ширина-ширина5, ширина-широта, ширина-ширина-ширина-широта int Trendd, MaxpipfromEMA, Ranging, RangingS, TFTime; void TrendPreFetch () {Среднее = iMA (NULL, PERIOD_H1,3,0, MODE_EMA, PRICE_CLOSE, 1); FastW = IMA (NULL, PERIOD_H1, fastma * 3.8,0, MODE_EMA, PRICE_CLOSE, 1); Currency_momentumA = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 0,1); Currency_momentumB = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 1,1); Currency_momentumC = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 0,5); Trend_momentumFastA = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,1); Trend_momentumFastB = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,2); Trend_momentumFastC = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,3); Trend_momentumFastD = iCustom (NULL, PERIOD_H1, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 1,1); Trend_momentumSlowA = iCustom (NULL, PERIOD_H1, OSMAMA, 6,8, SlowMA * 3, 3 * currency_momentum, currency_momentum * 3,0,1); Trend_momentumSlowB = iCustom (NULL, PERIOD_H1, OSMAMA, 6,8, SlowMA * 3, 3 * currency_momentum, currency_momentum * 3,0,5); } void RangePreFetch () {Среднее = iMA (NULL, PERIOD_M15,3,0, MODE_EMA, PRICE_CLOSE, 1); FastW = IMA (NULL, PERIOD_M15, fastma * 3.8,0, MODE_EMA, PRICE_CLOSE, 1); Currency_momentumA = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 0,1); Currency_momentumB = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 1,1); Currency_momentumC = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, currency_momentum, 1, currency_momentum, 0,5); Trend_momentumFastA = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,1); Trend_momentumFastB = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,2); Trend_momentumFastC = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 0,3); Trend_momentumFastD = iCustom (NULL, PERIOD_M15, OSMAMA, 4,6, trend_momentum, 1, trend_momentum, 1,1); Trend_momentumSlowA = iCustom (NULL, PERIOD_M15, OSMAMA, 6,8, SlowMA * 3, 3 * currency_momentum, currency_momentum * 3,0,1); Trend_momentumSlowB = iCustom (NULL, PERIOD_M15, OSMAMA, 6,8, SlowMA * 3, 3 * currency_momentum, currency_momentum * 3,0,5);} int start () {double Averagepips, Opentime, Stopip; int i, open, Spike, SpikeW, Buyjump, Selljump, BuyjumpR, SelljumpR, Ticket, Cnt, Can; double SlowTrend = iMA (NULL, PERIOD_H1, замедление, 0, MODE_EMA, PRICE_CLOSE, 1); double FastTrend = iMA (NULL, PERIOD_H1, fastma, 0, MODE_EMA, PRICE_CLOSE, 1); if ((MathAbs (FastTrend-SlowTrend) gt; RangePoint * Point)) {RangingS = 2; } else {RangingS = 1; } if ((TFTime! = iTime (Symbol (), PERIOD_M15,1)) (RangingS == 1)) {RangePreFetch (); MaxpipfromEMA = MaxpipfromEMAM; Ранжирование = 1; TFTime = iTime (Символ (), PERIOD_M15,1); } if ((TFTime! = iTime (Symbol (), PERIOD_H1,1)) (RangingS == 2)) {TrendPreFetch (); MaxpipfromEMA = MaxpipfromEMAH; Ранжирование = 0; TFTime = iTime (Символ (), PERIOD_H1,1); }