К виртуозам по таймсериям и таймфреймам обращаюсь :)

 

Не хотел новый топик открывать, но уже два дня форум листаю, а найти что-нибудь так, чтобы это в одном месте было собрано никак не могу.

Вопрос такого порядка:
Эксперт работает на таймфрейме H1, необходимо получить значения индикатора с таймфреймов H4 и M15. При оптимизации и тестировании вся история подкачана, проблем нет.
Как организовать корректную и бесконфликтную работу (подкачку истории) при реальной торговле.

Вариантов решения вижу три (в смысле - это то что я знаю):
1. Открыть рядом еще два графика.
2. Работая на M15 программно эмулировать H1, H4 и тр... мучиться с этой эмуляцией.
3. Использовать функцию или скрипт подкачки.
За и против:
[1] - тупо и незатейливо, но будут два лишних окна в терминале, да и забыть открыть просто можно или делкнуть невзначай :(
[2] - изящно, но здорово усложняет и тормозит код, особенно при оптимизации, а если потребуется использовать еще какой-нибудь индикатор, то нужно заново перелопачивать весь код.... :(
[3] - оптимально, но ни разу не пробовал.... да и проходило здесь как-то на форуме сообщение от разработчиков, что при программном доступе скачивается только последний блок (2048 Бар)

Кто что посоветует, господа? Если кто про третий вариант будет говорить, то очень прошу, если есть, показать готовый код и сказать в какое место его вставить, вот фрагмент моего:

.....
if (LastTimeOpenCloseCalc != Time[0]) OpenCloseCalc();
.....
void OpenCloseCalc()
{
LastTimeOpenCloseCalc=Time[0];
int OpenBuyGTC_Stop=0; int OpenSellGTC_Stop=0;

double Level_1 =iCustom(NULL,0,"iM_At",0,1);

double Level_2 =iCustom(NULL,0,"iM_At",0,2);

double Up15=iCustom(NULL,15,"iM_Fractal",0,3);
double Dn15=iCustom(NULL,15,"iM_Fractal",1,3);
double Up4=iCustom(NULL,240,"iM_Fractal",0,3);
double Dn4=iCustom(NULL,240,"iM_Fractal",1,3);
// Дальше условия .......

}
......

и до кучи :)
пишу в файл *.csv статистику, вот фрагмент:
.....
int Plus=MathCeil((High[iHighest(NULL,0,MODE_HIGH,y,1)]-OrderOpenPrice())/Point);
int Minus=MathCeil((OrderOpenPrice()-Low[iLowest(NULL,0,MODE_LOW,y,1)])/Point);
double PF=Plus/Minus;
// Запись в файл
FileWrite(FileNumber,VarOpen,y,PF,Plus,Minus,"Buy",StringConcatenate(Day(),".",Month(),".",Year()),Symbol(),Period());
......
Все пишется, как задумывалось, только PF в эксель никак не хочет отображаться, как double, показывает только наименьшее целое... в чем фишка никак понять не могу, может кто-нибудь сталкивался?
Вот, собственно, и все.

Размер моей благодарности будет безграничен.... в пределах разумного :)



 

Совершенно спокойно работает первый вариант, и никаких дополнительных окон открывать не надо... Или я чего-то не понимаю .... У меня половина экспертов висит 1М, и использует значения (или индикаторы) с других ТФ, никаких проблем никогда не было.

 
Figar0:

Совершенно спокойно работает первый вариант, и никаких дополнительных окон открывать не надо... Или я чего-то не понимаю .... У меня половина экспертов висит 1М, и использует значения (или индикаторы) с других ТФ, никаких проблем никогда не было.

Все правильно. Все используемые ТФ подкачиваются автоматом.
Единственное, перед первым запуском надо скачать историю достаточной глубины.

 

А если первое подключение происходит автоматически, как запустить скрипт подкачки истории в советнике, перед анализом графика?

Просто с наступлением тепла начали проводить профилактику на линиях, иногда нет интернета короткие промежути времени, при использовании М1, М5, М15 это уже ощущается :(

(скрипт "Закачать все котировки.mq4" здесь на форуме лежит)

 
rider:

Все пишется, как задумывалось, только PF в эксель никак не хочет отображаться, как double, показывает только наименьшее целое... в чем фишка никак понять не могу, может кто-нибудь сталкивался?
Вот, собственно, и все.

Возможно в свойствах ячейки в экселе не указано, что это дробное число ?

 
komposter:
Figar0:

Совершенно спокойно работает первый вариант, и никаких дополнительных окон открывать не надо... Или я чего-то не понимаю .... У меня половина экспертов висит 1М, и использует значения (или индикаторы) с других ТФ, никаких проблем никогда не было.

Все правильно. Все используемые ТФ подкачиваются автоматом.
Единственное, перед первым запуском надо скачать историю достаточной глубины.

Благодарю, значит протупил где-то и сделал проблему из ничего.... или что-то не так прочитал.... но ведь где-то это было написано, не сам придумал :)

Тогда уточнение. Программную проверку нужно сделать, чтобы определить началось ли формирование нового бара на другом таймфрейме?

Почему спрашиваю, я как-то индикатор написал, который на младших ТФ фракталы переносит, так эта зараза на статическом графике вполне корректно и безошибочно работает, а на визуализации не пойми что показывает  (коды в аттаче - один обычный, для проверки, а второй глючный). Так и не смог разобраться почему. Может свежим глазом глянете....

zIG:
rider:

Все пишется, как задумывалось, только PF в эксель никак не хочет отображаться, как double, показывает только наименьшее целое... в чем фишка никак понять не могу, может кто-нибудь сталкивался?
Вот, собственно, и все.

Возможно в свойствах ячейки в экселе не указано, что это дробное число ?

при формировании файла этого сделать нельзя, а после открытия по всякому пробовал, результат один и тот же.... до полного идиотизма доходил, пытался вот так посчитать:

double PF=1000*Plus/Minus;

так он мне начал три дополнительных нуля показывать :)

Файлы:
fractal.rar  2 kb
 

может так?


double PF=(Plus/Minus)*1000;

string PFs=DoubleToStr(PF,0));// Можно вывести в эксель в текстовом формате

int PFi=StrToInteger("PFs");// или уже в целочисленном значении





 

При работе на M1 если не делаются перерасчеты в истори - что в общем то не имеет особого смысла

при пипсе такая настройка сильно экономит память и MT4 уже не тормозит сильно




все ТФ подчитываются к которым идет обращение!





так же в окне обзор рынка уберите пары которые не общитываете - экономия трафика и памяти так же

один из экспертов обсчитывает и работает с двумя парами

 
double PF=1.0*Plus/Minus;
Учите мат.часть:)
 
Xupypr:
double PF=1.0*Plus/Minus;
Учите мат.часть:)

это априори.

спасибо.... дьявол в деталях, как водится )

 
rider:

Тогда уточнение. Программную проверку нужно сделать, чтобы определить началось ли формирование нового бара на другом таймфрейме?

Зависит от задачи. Если не используются индикаторы с 0-го бара (для фрактала - со 2-го), пересчет есть смысл делать один раз в бар.


rider писал (а):

Почему спрашиваю, я как-то индикатор написал, который на младших ТФ фракталы переносит, так эта зараза на статическом графике вполне корректно и безошибочно работает, а на визуализации не пойми что показывает (коды в аттаче - один обычный, для проверки, а второй глючный). Так и не смог разобраться почему. Может свежим глазом глянете....

1. Зачем сравнивать хаи/лоу? Есть же iFractal - он замечательно работает! =)
2. Один бар на Н4 будет третьим для 240 минутных баров. И на каждом нарисуется фрактал. Надо искать соответствующий бар со старшего ТФ с помощью iBarShift.