индикатор возьму за основу других - проведу актуализацию данных.
Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.
Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.
Но это нужно если вы планируете добавлять индикатор в советник, а затем советник оптимизировать. Если просто на индюк на график, то и так сойдёт.
Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.
Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.
Но это нужно если вы планируете добавлять индикатор в советник, а затем советник оптимизировать. Если просто на индюк на график, то и так сойдёт.
Да. Гляну академический подход - отображу у себя... не доделал сам.... с мт4 переношу коды на мт 5 - спс за подсказку....
Да вот я и подумал что он не нужен из за ф - ии copy... короче не провел еще синхронизацию... ;-) в полном обьеме.....
Да - спс - пока индик на график. Ф -ии вшил в робота.
current_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
k = current_bid/_Point;
lot1 = lot / k;
приветсвую, как преобразовать ценовое значение в целочисленное.
Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?
приветсвую, как преобразовать ценовое значение в целочисленное.
Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?
пункт номер РАЗ: короткий код лучше вставлять непосредственно в сообщение. Web-деятели не осилили "посмотреть приаттаченный файл без загрузки", а не все кто готов помочь или высказаться жаждет скачивать файл и запускать MetaEditor
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[])
{
//-------------------------------int limit=rates_total-prev_calculated;
int i=fmax(0,prev_calculated-1);
for(i=0; i<rates_total; i++)
{
int symb2Shift = iBarShift(Symbol2,Period(),iTime(Symbol1,Period(),i),true);
if(symb2Shift != -1)
{
if(!Symbol2_Reverse)
{
BufferCurrent[i] = NormalizeDouble(100000*Weighting_coefficients1*kVol1*iOpen(Symbol1,Period(),i) - 100000*Weighting_coefficients2*kVol2*iOpen(Symbol2,Period(),i),0);
//----------------------------------------
}
else
{
BufferCurrent[i] = NormalizeDouble(100000*Weighting_coefficients1*iOpen(Symbol1,Period(),i) - 100000*1/(Weighting_coefficients2*iOpen(Symbol2,PERIOD_CURRENT,i)),0);
// BufferCurrent[i] = NormalizeDouble(10000*Weighting_coefficients1*iOpen(Symbol1,Period(),i) + 10000*(Weighting_coefficients2*iOpen(Symbol2,PERIOD_CURRENT,i)),0); //----------------------------------------
}
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
2. не раскрыто ветвление, "что-же делать если подходящего бара нет". Просто есть вариант что тот просто не подкачался ещё и стоит вернуть prev_calculated
3. в OnInit надо убедится что Symbol2 есть в обзоре рынка или его добавить, плюс там-же и при первом OnCalculate нужны танцы с бубном чтобы принудить терминал начать скачивать бары другого инструмента. Например запросить iBarShift(Symbol2,PERIOD_CURRENT,iTime(_Symbol,iBars(_Symbol,PERIOD_CURRENT)-1)); Или соответсвующий CopyTime. Есть подозрение что от билда к билду бубны разные нужны
4. Использовать специальную форму OnCalculate тут не оправданно, ты-же никак не используешь price[]
А разве такой цил
for(i=0; i<rates_total; i++)
не будет пересчитывать всю историю на каждом тике?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Вот так что то показывает.
О! Спс большое - эта картика снизу индика уже похожа на ту что я у себя видел...
Вот так что то показывает.
да - все верно кажет! Цифры сходятся по формулам что в роботе что в индикаторе!!!
Спасибо вам большое!
про эти фишки думал они умолчательно идут - исчисление у меня было наоборот...
возьму за правки проверки делать... в роботе делал - в индике не все....
спс еще раз - показывает данные идеально!!!! то что надо...
индикатор возьму за основу других - проведу актуализацию данных.
индикатор возьму за основу других - проведу актуализацию данных.
Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.
Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.
Но это нужно если вы планируете добавлять индикатор в советник, а затем советник оптимизировать. Если просто на индюк на график, то и так сойдёт.
Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.
Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.
Но это нужно если вы планируете добавлять индикатор в советник, а затем советник оптимизировать. Если просто на индюк на график, то и так сойдёт.
приветсвую, как преобразовать ценовое значение в целочисленное.
Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?
приветсвую, как преобразовать ценовое значение в целочисленное.
Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?
lot1 = lot / (int)current_bid;Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Maxim Kuznetsov, 2024.09.13 16:51
пункт номер РАЗ: короткий код лучше вставлять непосредственно в сообщение. Web-деятели не осилили "посмотреть приаттаченный файл без загрузки", а не все кто готов помочь или высказаться жаждет скачивать файл и запускать MetaEditor
2. не раскрыто ветвление, "что-же делать если подходящего бара нет". Просто есть вариант что тот просто не подкачался ещё и стоит вернуть prev_calculated
3. в OnInit надо убедится что Symbol2 есть в обзоре рынка или его добавить, плюс там-же и при первом OnCalculate нужны танцы с бубном чтобы принудить терминал начать скачивать бары другого инструмента. Например запросить iBarShift(Symbol2,PERIOD_CURRENT,iTime(_Symbol,iBars(_Symbol,PERIOD_CURRENT)-1)); Или соответсвующий CopyTime. Есть подозрение что от билда к билду бубны разные нужны
4. Использовать специальную форму OnCalculate тут не оправданно, ты-же никак не используешь price[]
А разве такой цил
for(i=0; i<rates_total; i++)не будет пересчитывать всю историю на каждом тике?
А разве такой цил
не будет пересчитывать всю историю на каждом тике?
Там надо чтобы он не считал уже посчитанные....
у меня в индикаторах типичный цикл :
for(int bar=prev_calculated>0?prev_calculated-1:0 ; bar<rates_total; bar++) {
// bar используется если массив в стиле mt5
int idx = rates_total - bar - 1; // idx для обращения к массивам которые как тайм-серии, mt4-style
...
}
Там надо чтобы он не считал уже посчитанные....
Надо то понятно, а вот что есть в таком цикле не понятно.
Ведь на каждом цикле счётчик цикла будет начинаться с нуля. Не так разве?