Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
я их критиковал и буду критиковать, за их тупизм и наглость, за их хамство на их форуме, либо игнор и бан за повторные вопросы от трейдеров и пользователей...:facepalm:
Я открою тебе маленький секрет. Я всегда писал определение разрядности котировок вот так.
Код:
double [COLOR=Red][B]_Point[/B][/COLOR];
int [COLOR=Red][B]_Digits[/B][/COLOR];
int init()
{
  _Digits = Digits;
  _Point = Point;
  if((Digits == 3 || Digits == 5))
  {
  _Digits = Digits-1;
  _Point = Point*10;
  }
}
А теперь, ты знаешь что это зарезервированные слова.

Кроме этого частенько оставались незадействованные объявленные переменные, были одноимённые переменные глобального уровня и локальные. За которые теперь сыпятся предупреждения.
 
Последнее редактирование модератором:
  • Like
Реакции: Ugar

matro3

Почетный гражданин
Отвлеку Вас от междусобойчика )
Есть индикатор Currency Power Meter. Не могу понять как он работает.
Т.е. у меня декомпил, и принцип работы ускользает за корявыми именами переменных.
Может кто-то намекнуть?
Хотел в робота засунуть, а он на объектах. Думаю что проще сам метод перенести.
Или, может, у кого-то есть похожий индюк или другой способ?
Спасибо.
 

Dom

Гуру форума
Здравствуйте! Уважаемые программисты!Подскажите пожалуйста, как исправить эту ошибку:
 
Последнее редактирование:

Ugar

Гуру форума
Отвлеку Вас от междусобойчика )
Есть индикатор Currency Power Meter. Не могу понять как он работает.
Т.е. у меня декомпил, и принцип работы ускользает за корявыми именами переменных.
Может кто-то намекнуть?
Хотел в робота засунуть, а он на объектах. Думаю что проще сам метод перенести.
Или, может, у кого-то есть похожий индюк или другой способ?
Спасибо.
Так выложи сам индюк, может кто разберёт и подскажет.
Я не ковыряю чужие программы, тем более декомпилы, но на мне свет клином не сошелся.
А без выкладывания индикатора, объяснить его работу смогут экстрасенсы, а это уже другой форум.
 

matro3

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

Currency Power Meter.rar
http://narod.ru/disk/29066410001/Currency%20Power%20Meter.rar.html
 

AlexeyVik

Программист mql4 mql5
А сюда загрузить не мог?
Я его раньше смотрел, это какой-то информер с красивой картинкой и ковырять его никакого желания.
 

Вложения

  • CurrencyPowerMeter.mq4
    13,1 КБ · Просмотры: 52
Последнее редактирование модератором:

chocolate

Гуру форума
Уважаемые, просьба личные отношения выяснять в личке. И жаловаться на сообщения, высасывая из пальца причину, не стоит.
 
  • Like
Реакции: Ugar

Milord

Местный знаток
Уважаемые, просьба личные отношения выяснять в личке. И жаловаться на сообщения, высасывая из пальца причину, не стоит.
уважаемый администратор, ваши удаления моих постов по просьбам хама ветки АлексеяVIK выглядят мягко говоря нелогичными, так будьте объективны до конца, удаляйте и его посты тоже...
то что вы называете личными отношениями - ими не являются, он хамит и флудит во всех ветках форума, вы ему косвенно помогаете,тем что удаляете посты всех, кто ему не нравится...
P.S. обратите внимание на его хамские посты по всем веткам форума - почему вы их не удаляете???
 
Последнее редактирование:

chocolate

Гуру форума
Milord, я не вижу никакого хамства в сообщениях, на которые Вы жалуетесь. Пишите в личку, конкретно указывайте фразу, которую считаете хамством.
 

ctmcn

Новичок форума
Здравствуйте !
На 509 билде все "гуд".

При компилиловании в ME 604 билда - ошибки и предупреждения.:not-good:
Ошибки поправте пожалуйста, если не трудно - я в основном могу для себя переделать рабочий исходник: изменить, убрать лишнее и т.п.
А по предупреждениям - я так понял, что пока можно игнорировать, но сильно раздражает. Как то привык к - "0 ошибок, 0 предупреждений.:)

P.S. Специально подобрал 5 простых индикаторов с типичными в МЕ 604 билда ошибками и предупреждениями - другие править по аналогии придется, я так понимаю. Пригодится многим думаю...
С уважением.
 

Вложения

  • indicators.zip
    17,3 КБ · Просмотры: 53

qqmber

Почетный гражданин
Здравствуйте !
На 509 билде все "гуд".

При компилиловании в ME 604 билда - ошибки и предупреждения.:not-good:
Ошибки поправте пожалуйста, если не трудно - я в основном могу для себя переделать рабочий исходник: изменить, убрать лишнее и т.п.
А по предупреждениям - я так понял, что пока можно игнорировать, но сильно раздражает. Как то привык к - "0 ошибок, 0 предупреждений.:)

P.S. Специально подобрал 5 простых индикаторов с типичными в МЕ 604 билда ошибками и предупреждениями - другие править по аналогии придется, я так понимаю. Пригодится многим думаю...
С уважением.

Ну, давай посмотрим.

'supertrend.mq4' supertrend.mq4 1 1
Предупреждение: variable 'var' not used supertrend.mq4
Лечение: убрать неиспользуемую переменную var

'#MTF_Supertrend.mq4' #MTF_Supertrend.mq4 1 1
Ошибка: 'return' - expressions are not allowed on a global scope #MTF_Supertrend.mq4 89 4
Смысл: return оказался вне функции
Лечение: исправить опечатку, return(0); и соседнюю фигурную скобку поменять местами.

'TMA-M.mq4' TMA-M.mq4 1 1
Ошибка: 'char' - unexpected token TMA-M.mq4 325 11
Смысл: char теперь зарезервированное слово, нельзя использовать как имя переменной.
Лечение: заменить везде char на bukva.
Остальные ошибки - следствие первой.

'Murrey_Math_AllTF.mq4' Murrey_Math_AllTF.mq4 1 1
Предупреждение: 'void' function returns a value Murrey_Math_AllTF.mq4 219 4
Смысл: если функция имеет тип void, то оператор return не должен иметь аргументов.
Лечение: заменить return(0); на return; в двух местах.

'Divergence Petr.mq4' Divergence Petr.mq4 1 1
Ошибка: '.' - semicolon expected Divergence Petr.mq4 95 18
Смысл: точка не может быть частью имени переменной.
Лечение: заменить точку на _
Предупреждение: arrays passed by reference only Divergence Petr.mq4 1378 25
Смысл и лечение: В описании функций, получающих массив как параметр, надо ставить знак & перед именем массива и понимать, что операции будут производиться не на копии массива, а на оригинале.
Предупреждение: not all control paths return a value Divergence Petr.mq4 213 1
Смысл и лечение: каждая не-void функция должна заканчиваться оператором return.
Предупреждение: declaration of 'n' hides global declaration at line 107 Divergence Petr.mq4 505 11
Смысл: есть две одноименных переменных n, одна глобальная, другая локальная, объявленная внутри блока. Соответственно, глобальная n не видна внутри этого блока, что провоцирует разнообразные ошибки и непониманиие работы кода.
Лечение: избегать повторов, давать глобальным переменным имена только с Заглавной буквы, локальным - только со строчной.
 
Последнее редактирование:

ctmcn

Новичок форума
Ну, давай посмотрим...

Супер ! :)
Спасибо !!!

Все свои индикаторы, советники перелопатил - получилось, кроме одного индикатора. Посмотрите, пожалуйста предупреждение.
С уважением.
 

Вложения

  • FX Tim (G_L).mq4
    28,6 КБ · Просмотры: 50

qqmber

Почетный гражданин
Уже было.
'Divergence Petr.mq4' Divergence Petr.mq4 1 1

Предупреждение: arrays passed by reference only Divergence Petr.mq4 1378 25
Смысл и лечение: В описании функций, получающих массив как параметр, надо ставить знак & перед именем массива и понимать, что операции будут производиться не на копии массива, а на оригинале.

Супер ! :)
Спасибо !!!

Все свои индикаторы, советники перелопатил - получилось, кроме одного индикатора. Посмотрите, пожалуйста предупреждение.
С уважением.
Код:
void Fibo(string name, int Size_, double fi_[], string fitxt_[], datetime x1, double y1, datetime x2,double y2,color Color, int Style, int Widht, int period)
добавить пару &
void Fibo(string name, int Size_, double & fi_[], string & fitxt_[], datetime x1, double y1, datetime x2,double y2,color Color, int Style, int Widht, int period)
Ворнинги пропадут, но у меня есть серьезные сомнения, что удастся так передать массив строк. Попробуй и отпишись, пожалуйста.
 

ctmcn

Новичок форума
Уже было...
Ворнинги пропадут, но у меня есть серьезные сомнения, что удастся так передать массив строк. Попробуй и отпишись, пожалуйста.
Да, точно было - зашарился:D
Проверил - на первый взгляд все гуд - устанавливается, при переключении таймов меняется, удаляется.
Спасибо.

P.S. В чем разница хочу понять - как правильно:
...double & fi_[], string & fitxt_[],
...double &fi_[], string &fitxt_[],
...double& fi_[], string& fitxt_[],
 
Последнее редактирование:

qqmber

Почетный гражданин
Да, точно было - зашарился:D
Проверил - на первый взгляд все гуд - устанавливается, при переключении таймов меняется, удаляется.
Спасибо.

P.S. В чем разница хочу понять - как правильно:
...double & fi_[], string & fitxt_[],
...double &fi_[], string &fitxt_[],
...double& fi_[], string& fitxt_[],

Всяко правильно. Пробелы вокруг & необязательны, как и вокруг операторов.
 

hmpr

Прохожий
Так как 0 бар меняется, придётся пересчитывать все бары что бы они то же менялись.
Значит меняем limit=Bars-counted_bars; на limit=Bars;

В MACD быры перебираются от 0. Значит при расчёте всех остальных баров, значение 0 уже посчитано, нужно просто прибавить.
Вместо
Код:
for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
делаем
Код:
for(int i=0; i<limit; i++)
{     MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
if(i>0)MacdBuffer[i]=MacdBuffer[i]+MacdBuffer[0];
}
Как то так.

Спасибо. Но почему-то не получается. Правда MACD я привел как пример. На самом деле у меня не MACD, а другой индикатор. Вот его код:
#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Red
extern int barsToProcess=100;

double ExtMapBuffer1[];

int init()
{

SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);

return(0);
}


int start()
{
int counted_bars=IndicatorCounted();
if (counted_bars>0)counted_bars--;
int limit=Bars-counted_bars;


double dResult;

if(limit>barsToProcess)
limit=barsToProcess;

for(int i=0; i<limit; i++)
{

dResult = Close-Open;

ExtMapBuffer1=dResult;

}

return(0);
}


И чтоб сделать как вы сказали я создал еще один индикатор:

#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Red
extern int barsToProcess=100;

double ExtMapBuffer1[];

int init()
{

SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);

return(0);
}


int start()
{
int counted_bars=IndicatorCounted();
if (counted_bars>0)counted_bars--;
int limit=Bars;

if(limit>barsToProcess)
limit=barsToProcess;

for(int i=0; i<limit; i++)
{

ExtMapBuffer1=iCustom(NULL,0,"Result",barsToProcess,0,i);
if(i>0)ExtMapBuffer1=ExtMapBuffer1+ExtMapBuffer1[0];

}

return(0);
}


И почему-то все-равно ничего не выходит.
 

Genadi22

Новичок форума
Привет Всем, - доброго здравия,- а также успехов в освоении программирования тем кто решил освоить язык - mql4,

Во первых, - я хочу поблагодарить от всей души,- всех,- кто так или иначе принял участие в проекте – Stels.
Особая благодарность пользователю под ником – SERG…
с ним я знаком лично и на протяжении почти 1.5 месяца ночами напролёт и обьяснявшего и показывавшего на примерах как происходит собственно программирование,- и благодаря его помощи в итоге проект был завершён…
на этом собственно знания по программированию в рамках проекта считаю для себя законченным…

Следующий этап обучения для меня,- научится и желательно виртуозно с помощью кода определять нужное время и нужное место на графике
-----------------------------------------------------------------------------------------------------
ранее я высказывал – непонимание, в неприятии нашими программистами относительно 5 знака…
и даже высказывал предположение что это не может быть каким то длинным кодом,- и можете сами судить,- вот сам код с помощью которого решается вся эта
- я бы даже назвал это – ленью…
//=============
int init()
{
if(Digits == 3 || Digits ==5) // тоже самое (Digits == 3<5)
{
TP *=10;
SL *=10;
sleep *=10;
}
return(0);
}
//=============

это касательно тейков и стопов …
а вот с помощью этого

//=============
double point;
if(Digits == 5) point = 0.0001/Point;
else
{
if(Digits == 3) point = 0.01/Point;
}
//=============
решается проблема отображения индикаторами ценовых уровней – типа без лишних нулей,- то есть если – от искомого уровня - до цены – 10 п, а индикатор показывает все 100…
надо отметить что это один из нескольких вариантов и причём не оригинальный,- но почему то он мне больше приглянулся…
------------------------------------------------------------------------------------------------------------------
С Вашего позволения я закончу официальную и хвалебную части,- и собственно перейду к проблеме которая выявилась, и в итоге из-за которой весь проект и гроша ломанного не стоит…
-------------------------------------------------------------------------------------------------------------------
речь идёт о тактике – “Прайс Экшн”,- вернее не о самой тактике,- а о возможности в программном исполнении передать максимально точную,- а ещё лучше – идеальную картину происходящего на графике – то есть – об отдельной функции способной определить нужное место в нужное время…

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

И так сама суть проблемы…
свеча – главный и единственный показатель…
имеет четыре общепризнанных параметра

Open[1]
Close[1]
High[1]
Low[1]
манипулируя этими параметрами предполагается распознавание или определение комбинации
на пример:
if
(
Open[2] > Close[2] || // медведи
Open[1] < Close[1] || // бычки
Open[1] => Close[2] ||
Close[1] > Close[2]||
High[1] => High[2]||
Low[1] =< Low[2]||
Low[1] => Close[2]
)
примерно так,- код - должен определить бычье поглощение на графике,- которое на самом деле ничего общего не имеет с определяемыми обьектами - свечами…- иными словами ложных показаний примерно 10 на один истинный…- эволюционированные коды показывают лучший результат,- но не на стоко – что бы их можно было применить хотя бы на худой конец в советнике…

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

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

Вложения

  • проверка.rar
    4,7 КБ · Просмотры: 45
Верх