[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 504

 
hoz:

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

Не по теме отвечаете, еще раз - Функция init() запускается после подгрузки исторических данных (это касается только советников и не касается индикаторов) - как это понимать (пощупать охота)?


Взятие пешки на проходе какое-то, знаю, что есть такое правило, а как применяется - не знаю (так понятнее)?

 
 Я выше ответил, как я это понимаю. А вашу точку зрения я не особо понял. Может кто другой поймёт.
 

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

if(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)

  {

  go_s=true; 

  } 

я думал что смогу привязать мою комбинацию с помощью  iHigh, iLow, iOpen и тд  но при тесте на М5 он показывает один результат а на других временных масштабах другой. Помогите пожалуйста что делаю не так.  Спасибо!

 
hoz:

...

 В учебнике вообще https://book.mql4.com/ru/build/conditions всё скучковано. Там МАКД и стохастик в одной ф-ции, а мне так не нужно.

 Да и по сути, всё значения индикаторов по ссылке должны передаваться в соответствующие ф-ции. Почему нет? Это же логично.

 Таким образом получается, что все рассчёты индюков будут в одной главной ф-ции получения сигнала. Тут же всё логично..

Извините, но, похоже,  Вы находитесь ещё в самом начале пищевой цепочки, вот тут точно - "всё логично". :-)

Сделайте по подобию УЧЕБНИКА И ДОКИ, а уже потом заворачивайте в отдельные ф-ии и получайте торговый критерий в результирующей.

В учебнике - сразу всё прописано в результирующей, можете прописать свои ф-ии - отдельно, а РЕЗУЛЬТИРУЮЩУЮ оформить, как в учебнике! Никакой цикл, никакая передача значений параметров по ссылке - здесь не нужна!

П.С. А вообще, для начала разберите коды экспов - всех в учебнике  и нескольких в кодобазе  - сразу всё встанет на свои места. 

 
fore-x:

Сразу же после присоединения к графику программа начинает работу с функции init(). Функция init() присоединенного к графику советника или пользовательского индикатора запускается также сразу после старта клиентского терминала и подгрузки (это касается только советников и не касается индикаторов) исторических данных, после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счёта.

Растолкуйте пожалуйста, как это работает? В фоне или это можно, как-то отследить? Или функция init в индикаторе при старте терминала после некоторого длительного простоя вообще не запустится?

Не совсем понятно чего Вы хотите. В Вашем варианте описания init() есть некоторые не совсем верно выделенные красным цветом "моменты". Например, старт клиентского терминала сопровождается подгрузкой исторических данных и выделять слово "подгрузки" некорректно - это не запускающий инициализацию процесс.

И не всё в жизни можно потрогать: максимум - посозерцать. :))) Хотите зафиксировать процесс инициализации т.е. запуска функции init() - выведите на принт внутри этой функции уведомляющую строку.

 
hoz:

Чё та меня уже совсем запутали. Вот 3 функции, каждая из которых получает свой канкретный сигнал по конкретному индюку.

 Это функция получает общий сигнал от всех индюков, и принимает решение КУПИТЬ или ПРОДАТЬ.

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

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal() , в принципе тоже можно запихнуть туда же.

 Таким образом получается, что все рассчёты индюков будут в одной главной ф-ции получения сигнала. Тут же всё логично..

Виктор! Логика у Вас присутствует, а вот знаний пока маловато. Первое, если не бросите это дело, поможет пойти дальше учебника, а чтобы "победить" второе - с него же (с учебника) и надо пока начинать. Вы не готовы (пока) строить СВОЮ логическую структуру кода, вернитесь к азбучному варианту.
P.S. Что "бросается в глаза" в Вашем коде:

в функции GetSignal() для поиска пересечения двух линий МОЖНО использовать цикл for, НО ЛУЧШЕ использовать цикл while, хотя это личные предпочтения. А для начала, чтобы код исполнял Вами озвученное, нужно перенести скобочку, как и в "Казнить, нельзя помиловать". Почему-то в этой (результирующей) функции отсутствуют рузультаты двух функций: GetStochSignal() и GetMomentumSignal(), - это НЕМНОЖКО не логично.

в функциях  GetCrossingMa() и GetStochSignal() нет НИКАКОГО смысла передавать параметры по ссылкам, потому, что это имело бы смысл, если бы эти переменные внутри функции МЕНЯЛИ свои значения.

функция  void GetMomentumSignal() НИЧЕГО не возвращает.

 Хотя я допускаю, что со стороны "хуже видно"... :)))

 
laveosa:

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

if(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)

  {

  go_s=true; 

  } 

я думал что смогу привязать мою комбинацию с помощью  iHigh, iLow, iOpen и тд  но при тесте на М5 он показывает один результат а на других временных масштабах другой. Помогите пожалуйста что делаю не так.  Спасибо!

Попробуйте так:

if(iHigh("EURUSD",PERIOD_M5,1)> (iLow("EURUSD",PERIOD_M5,1)+8*kio*Point()) )

Чтобы красиво на форуме вставить код жмите SRC и потом туда код.


 
У меня центовый щет (не цент лайт) и 100уе на щету а плечо 1:500 как мне посчитать какой максимальный лот я могу поставить? Помогите! Я знаю что на ценовом щете можна ставить максимум лот 100, хочу узнать когда я ставлю лот и мне пишет недостаточно средств чтото типа етого )))
 
Beowulf:
У меня центовый щет (не цент лайт) и 100уе на щету а плечо 1:500 как мне посчитать какой максимальный лот я могу поставить? Помогите! Я знаю что на ценовом щете можна ставить максимум лот 100, хочу узнать когда я ставлю лот и мне пишет недостаточно средств чтото типа етого )))
double maxvolume = MathMax(MarketInfo(Symbol(), MODE_MAXLOT), AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED));
 
Наверно я не туда куда надо написал гг Я в етих кодах ничего не понимаю, я думал мне скажут например максимум 20.0 ... Где мне почитать чтоб розобратся в том что вы написали?
Причина обращения: