"Класс памяти extern определяет внешнюю переменную. Модификатор extern указывается перед типом данных. Внешние переменные определяют входные параметры программы, они доступны из окна свойств программы. Массивы не могут выступать в качестве внешних переменных. "
спасибо большое, не откажусь. :-) А мыло я тебе в аську напишу, укажи номер. А насчет ответов я тебе так скажу: я просто первей откликнулся, другие зашли увидели ответ и не стали ничего добавлять. Поэтому ты не думай, что все тут такие злые и не хотят делиться знаниями.
Эксперт: iCustom("USDJPY", ...
А индикатор откуда об этом знает? Лучше добавить в секцию extern индикатора строковую переменную вроде
extern string SymbolName = "USDJPY"; // инструмент по умолчанию
и вызывать стохастик так
Stochastic[i]=iStochastic(SymbolName, 0, ...
(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски)
#propertyindicator_separate_window#propertyindicator_buffers3#propertyindicator_color1Yellow#propertyindicator_color2Red#propertyindicator_color3Red#propertyindicator_minimum0#propertyindicator_maximum100//---- input parameters//extern string st="---Параметры Stochastic---";
extern string SymbolName = "USDJPY";
extern int TimeFrame = 0;
externintKPeriod =12;
externintDPeriod =3;
externintSlowing =2;
//extern string en="---Параметры Envelopes---";externintEnvPeriod=17;
externintDeviation=15;
externintShift=1;
//---- buffersdoubleStochastic[];
doubleUP[];
doubleLOW[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intinit(){//---- indicatorsSetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Stochastic);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,UP);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LOW);
//----return(0);
}intdeinit(){return(0);
}//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intstart(){intlimit;
intcounted_bars=IndicatorCounted();
//---- последний посчитанный бар будет пересчитанif(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
//---- основной циклfor(inti=limit-1; i>=0; i--) // индикаторы лучше рассчитывать слева направо{Stochastic[i]=iStochastic(SymbolName,TimeFrame,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
}for(i=limit-1; i>=0; i--) // см. примечание{UP[i] =iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)+Deviation;
LOW[i]=iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)-Deviation;
)
return(0);
}
Вызов из эксперта:
iCustom("USDJPY", 0, ...
С iMAOnArray вообще надо обращаться аккуратно. Например, поэкспериментировать с порядком ее расчета.
А лучше всего такие вещи делать самому. Кстати, для мультивалютного эксперта может потребоваться везде
явно задавать имя символа и рабочий тайм-фрейм, чтобы избежать умолчательных сюрпризов вроде этого.
В мультивалютном эксперте при вызове польз. индикатора iCustom для конкретной пары нужно лучше сначала в самом польз. индикаторе предусмотреть -
extern string SymbolName = "USDJPY"; // инструмент по умолчанию
Это помимо того что и в советнике задавать :
iCustom("USDJPY", 60, ... для этой пары!
Но если я вызываю этот пользовательский индикатор ещё для одной пары с др. внеш. параметрами, - то значит для ещё этой другой пары нужно вводить копию этого польз. индюка с др. названием, и там тоже задавать символ другой пары!
Но тогда действительно проще рассчитать iMAOnArray внутри эксперта самому без всяких пользовательских индюков!
Правильно. Хотя это дело вообще-то на любителя. Моя практика, например, заключается в применениии пользовательских индикаторов лишь для проверки некой идеи с последующим переносом кода индикатора в эксперт, если идея окажется рабочей. Такой подход практически гарантирует от подводных камней типа "пустых" значений индикатора, которые обнаруживаются с трудом и могут сильно отравить жизнь при неряшливом программировании.
alexjou, я посмотрел справку и обнаружил:
"Класс памяти extern определяет внешнюю переменную. Модификатор extern указывается перед типом данных. Внешние переменные определяют входные параметры программы, они доступны из окна свойств программы. Массивы не могут выступать в качестве внешних переменных. "
Вот весь код пользовательского индикатора.
В кач. внешних переменных советника задаю
В тестере эта пара работает. В чем здесь может быть ошибка?А насчет ответов я тебе так скажу: я просто первей откликнулся, другие зашли увидели ответ и не стали ничего добавлять. Поэтому ты не думай, что все тут такие злые и не хотят делиться знаниями.
alexjou !
Првильно ли я вас понял??????????
В мультивалютном эксперте при вызове польз. индикатора iCustom для конкретной пары нужно лучше сначала в самом польз. индикаторе предусмотреть -
extern string SymbolName = "USDJPY"; // инструмент по умолчанию
Это помимо того что и в советнике задавать :
iCustom("USDJPY", 60, ... для этой пары!
Но если я вызываю этот пользовательский индикатор ещё для одной пары с др. внеш. параметрами, - то значит для ещё этой другой пары нужно вводить копию этого польз. индюка с др. названием, и там тоже задавать символ другой пары!
Но тогда действительно проще рассчитать iMAOnArray внутри эксперта самому без всяких пользовательских индюков!
,Благодарю за пояснения! CЕйчас займусь...
klerk, у меня с аськой по выходным проблемы.
Вот моя почта - на неё можно прислать адрес для советника.
rid200549@ya.ru
klerk, пож. подтвердите здесь или в почту получение моего послания.
И ещё вопрос к специалистам (извините если слишком глупый):
в мултивалютном эксперте -
А в трейлингах по каждой паре нужно ли тоже вводить и заменять эти значения?
или можно оставить как есть?А в трейлингах по каждой паре нужно ли тоже вводить и заменять эти значения?