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

 
hoz:


Идеала то нет! Просто для общего так сказать кругозора смотрю кто как пишет. Иногда нахожу некоторые трюки, которые можно перенять. Иногда вижу, что код вообще не читабельные напрочь. Как у tarasBY, например. Как ни пытался, не читается. Вроде читаю, понятно сегментами, и потом бац! Дальше не фига не понятно. И так много в какие местах.

 Я по просьбе знакомых декомпилы правил, там и то проще понять чем у tarasBY в кодах. Может это типа и нормально, но я вот тока сомневаюсь, что многие скачивающие их поймут. Кто слишком прошарен, чтоб понять, тот и скачивать не будет... Тогда возникает вопрос, зачем их тогда там публиковать :) 

Я тоже у него ничего не пользую! Зачем пытаться вслепую что-то делать, нужно, чтобы всё ясно было, что да для чего. А публикация для рекламы, а если всё ясно будет, так скачают и не закажут ничего.
 
tara:
Время отмеряю по Гринвичу. 
У меня на час меньше, чем у сервера, а я всё равно живу по среднеевропейскому. А у тебя должно быть на 3 часа больше, если сервер по Гринвичу. Пошёл спать. Спокойной ночи без взрывов!
 

Да я уж сплю. Спокойной ночи. 

 А в Каталонии как говорят? 

 
Buenas noches! Pero ahora ya es madrugada! Но сейчас уже поздняя ночь!
 
GaryKa:
Ничуть
Да, там отношение двух натуральных логарифмов. А теперь посмотрите  формулу из "Замена основания логарифма". Тоесть  в результате вот такое выражение
эквивалентно десятичному логарифму для bd_LOTSTEP. В MQL нет отдельной функции для десятичного логарифма, поэтому используют такое преобразование.


О том же говорил. Кондовый мой язык... Думается, либо программист  не боится математики, либо это своеобразная защита от чтения кода (шучу). Не знаю, моё личное мнение - математика упрощает алгоритм так же, как switch...case вместо дебрей if.
 
rigonich:

Покажите SetVLine();
 
Доброго времени суток.Попробовал разобраться в том как вставлять пользовательские индикаторы в советник.Компилируется хорошо но пишет совершенно

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

extern int PeriodP=12;
extern int TimeFrame=0;
double P_up0,P_up1,FrApPrise;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

P_up0=iCustom(Symbol(),Period(),"Ценовой канал",PeriodP,0,0);
P_up1=iCustom(Symbol(),Period(),"rezerv-xrust",FrApPrise,0,0);
{Comment("показ ценового канала=",P_up0,"\n","показ xrust=",P_up1);}
//----
return(0);
}



использовал два индикатора

1)https://www.mql5.com/ru/code/8908

индюк Ценовой канал.mq4

2)https://www.mql5.com/ru/code/8318

индюк Fractal_Level_Xrust_V2.mq4

помогите пожалуйста,почем 1 показывает,а второй не хочет?
 
gyfto:

О том же говорил. Кондовый мой язык... Думается, либо программист  не боится математики, либо это своеобразная защита от чтения кода (шучу). Не знаю, моё личное мнение - математика упрощает алгоритм так же, как switch...case вместо дебрей if.

В том коде есть один недочёт. Вот, выдернул из контекста:


Все дело в том, что выражение

MathCeil(MathAbs(MathLog( 0.25 )/MathLog(10))) = 1

Следовательно и значение лота округлится до одного знака после запятой.


Хотя, почитайте, мож поможет.

 

Небольшое дополнение к описанию моего вопроса.Переделал индикатор хруст.Вот на такой код

#property copyright "#Copyright © 2008, XrustSolution.#"
#property link "#xrust.ucoz.net#"

#property indicator_chart_window
extern int TimeFrame=0;//Если=0, то текуший


extern string FrApNam="Ap";//Имя линии соотв.Фракталу вверх
extern string FrDnNam="Dn";//Имя линии соотв.Фракталу вниз

//-----------------------------------------------------------------------------+
double FrPrise;
double FrApPrise=0,FrDnPrise=0;

//+----------------------------------------------------------------------------+
void init(){

if(TimeFrame==0){TimeFrame=Period();}
IndicatorShortName("Factal_Level_Xrust"+TimeFrame);
FrApNam=StringConcatenate(FrApNam,TimeFrame);
FrDnNam=StringConcatenate(FrDnNam,TimeFrame);
return;}
void deinit(){
ObjectDelete(FrDnNam);
ObjectDelete(FrApNam);
Comment(" ");
return;}
//+----------------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit;
double tmp;
int i, j,k;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//-----------------------------------------------------------------------------+

LineAp();
LineDn();
string FAP=DoubleToStr((FrApPrise),Digits);
string FDP=DoubleToStr((FrDnPrise),Digits);
int diap=MathRound((FrApPrise-FrDnPrise)/Point);
{Comment("TimeFrame="+TimeFrame+
"\nApPrise111 ="+FAP+
"\nDnPrise ="+FDP+
"\nFractal Channel ="
+diap+"Point");}

return(0);
}
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена |
//-----------------------------------------------------------------------------+
void LineDn(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise,MarketInfo(Symbol(),MODE_DIGITS));
//Comment(FrPrise);
if(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrDnPrise=FrPrise;
ObjectDelete(FrDnNam);

WindowRedraw();
return;}
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена |
//-----------------------------------------------------------------------------+
void LineAp(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise,MarketInfo(Symbol(),MODE_DIGITS));
if(ObjectFind(FrApNam)==0){
if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrApPrise=FrPrise;
ObjectDelete(FrApNam);

WindowRedraw();
return;}
//-----------------------------------------------------------------------------+
// Киму Респект и уважуха !!! |
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 07.10.2006 |
//| Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий ТФ) |
//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
double f=0;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;

for (s=2; s<100; s++) {
f=iFractals(sy, tf, mode, s);
if (f!=0) return(NormalizeDouble(f, d));
}
Print("FindNearFractal(): Фрактал не найден");
return(0);
}

Просто линии на графике мне не нужны.Надо просто две цифры(по одной из каждого из этих дух индикаторов).

 
palomnik:

Небольшое дополнение к описанию моего вопроса.Переделал индикатор хруст.Вот на такой код

Хотите ответ получить - уважайте читающих ваши портянки.

Код нужно вставлять с помощью кнопочки SRC - она над полем редактирования вашего сообщения среди других инструментов форматирования.

Причина обращения: