[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 647

 
Mathers:

верно.
 
Добрый день форумчане.Надыбал интересный код по построению трендовой линии .И решил с ним чуть побаловаться - что бы рисовал тренд не в пунктах,а в процентах,но почему-то - после моей доработки индюк перестает рисовать историю - только три последних бара(точнее если индюк запустить, то линию тренда он рисует с момента запуска нормально,но как только нажимаешь на обновление индюка - свойства>ОК история сбрасывается ). Что я не так сделал?неделю химичу,голову ломаю и никак
Ниже код, может подскажет кто в чем козявка - фрагмент,который я вставил выделен жирным?
Задача - чтобы индюк рисовал историю далеко назад сразу и не сбрасывал ее после изменения параметров.
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,Idx);

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

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta));

//if (Curency == "AUDUSD")
Idx[i] = AUD;



}

//----

//----
return(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
 Добрый день форумчане.Надыбал интересный код по построению трендовой линии .И решил с ним чуть побаловаться    

Сразу, почему-то вспомнился анекдот - в семье программиста сынок подходит к папе и спрашивает, а почему солнце всходит на востоке, а заходит на западе?

Папа, не отрываясь от компьютера, что, действительно восходит на востоке? -Да - А заходит на западе? - Да - И что, каждый день? - Да. - Ну, вот и не надо ничего трогать, раз все работает.

 
Roger:

Сразу, почему-то вспомнился анекдот - в семье программиста сынок подходит к папе и спрашивает, а почему солнце всходит на востоке, а заходит на западе?

Папа, не отрываясь от компьютера, что, действительно восходит на востоке? -Да - А заходит на западе? - Да - И что, каждый день? - Да. - Ну, вот и не надо ничего трогать, раз все работает.

:))
 
Lonely_man:
 Добрый день форумчане.Надыбал интересный код по построению трендовой линии .И решил с ним чуть побаловаться    

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

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

ЗЫ успехов 

 
IgorM:

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

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

ЗЫ успехов

По сепарату - я в курсе,он в отдельном и рисуется окне,дело не в нем.Видно фиг чего с этим кодом получится - видимо данный метод расчета для процентов не пойдет((.

Сразу, почему-то вспомнился анекдот - в семье программиста сынок подходит к папе и спрашивает, а почему солнце всходит на востоке, а заходит на западе?

Папа, не отрываясь от компьютера, что, действительно восходит на востоке? -Да - А заходит на западе? - Да - И что, каждый день? - Да. - Ну, вот и не надо ничего трогать, раз все работает.

))) Вы просто не совсем знаете,что я хочу сделать.Намек:мне это нужно для торговли кроссов валют - изменение в пунктах к доллару британца или йены не дают полной информации, кто из них по отношению к другому подешевел,а вот процентное изменение их к доллару все наглядно показывает - как дополнительный индюк очень полезная вещь.
 
Mathers:
Спасибо. Я так понимаю, различие только в том что советник запускается каждый раз при поступлении нового тика, а скрип приходится в бесконечном цикле запускать чтобы он работал постоянно?


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

Это лишь пример. Назначения скриптов могут быть разные.

 
Lonely_man:

По сепарату - я в курсе,он в отдельном и рисуется окне,дело не в нем.Видно фиг чего с этим кодом получится - видимо данный метод расчета для процентов не пойдет((.

Сразу, почему-то вспомнился анекдот - в семье программиста сынок подходит к папе и спрашивает, а почему солнце всходит на востоке, а заходит на западе?

Папа, не отрываясь от компьютера, что, действительно восходит на востоке? -Да - А заходит на западе? - Да - И что, каждый день? - Да. - Ну, вот и не надо ничего трогать, раз все работает.

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

Весьма простенький индикатор, не понял правда чем проценты нагляднее пунктов, ну да ладно.

Ошибок вы понаделали всетаки :)

1. 

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

Для правильного расчета процентов нужно добавить скобки.

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

 2.


Задача - чтобы индюк рисовал историю далеко назад сразу и не сбрасывал ее после изменения параметров.

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

Почему не считалась история?
Ответ: вы добавили операцию деление

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

А то что функция iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) в самом начале истории возвращает 0 не учли. И при попытке разделить на 0 вас «вышибало» с ошибкой 4013 (ERR_ZERO_DIVIDE), посмотрите журнал. 

По этому нужно в цикл FOR добавить еще одну проверочку

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

И все будет в порядке. Ниже представлен мой вариант.

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+

 


 

#property indicator_color1 White

Возможно ли изменить этот параметр программно в модуле start(),

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



 

 
valenok2003:

#property indicator_color1 White

Возможно ли изменить этот параметр программно в модуле start(),

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




Вроде бы нельзя. Да и зачем?