Привет!
делается через iCustom(.....
Привет!
делается через ICustom(.....
iCustom
//--- create handle of the indicator iCustom handle_iCustom_ZZ=iCustom(m_symbol.Name(),Period(),"Examples\\NRTR", AveragePeriod,CountBars); //--- if the handle is not created if(handle_iCustom_ZZ==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iCustom (\"ZigZag\") indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); }
Expert ----> Indicator
//+------------------------------------------------------------------+ //| NRTR.mq5 | //| Ramdass - Conversion only | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Red //---- input parameters input int AveragePeriod = 10; input int CountBars = 300; //---- buffers double value1[]; double value2[];
Indicator -----> Expert?
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- проверка количества баров на достаточность для расчета
if(BarsCalculated(WPR_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total)
return(RESET);
//--- объявления локальных переменных
int to_copy,limit,bar,trend;
double WPR[],ATR[],range,stop;
static int oldtrend;
//--- расчеты необходимого количества копируемых данных и стартового номера limit для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
{
limit=rates_total-min_rates_total; // стартовый номер для расчета всех баров
oldtrend=0;
}
else
{
limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
}
to_copy=limit+1; // расчетное количество копируемых баров
//--- копируем вновь появившиеся данные в массивы WPR[] и ATR[]
if(CopyBuffer(WPR_Handle,0,0,to_copy,WPR)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//--- индексация элементов в массивах как в таймсериях
ArraySetAsSeries(WPR,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//--- основной цикл расчета индикатора
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
BuyBuffer[bar]=SellBuffer[bar]=UpBuffer1[bar]=DnBuffer1[bar]=UpBuffer2[bar]=DnBuffer2[bar]=NULL;
//---
trend=oldtrend;
if(WPR[bar]<-100+K) trend=-1;
if(WPR[bar]>-K) trend=+1;
range=AtrRatio*ATR[bar];
//---
if(oldtrend<0 && trend>0) BuyBuffer[bar]=low[bar]-range;
if(oldtrend>0 && trend<0) SellBuffer[bar]=high[bar]+range;
if(trend>0)
{
if(BuyBuffer[bar])
{
UpBuffer1[bar]=UpBuffer2[bar]=BuyBuffer[bar];
DnBuffer1[bar]=DnBuffer1[bar+1];
}
else
{
stop=low[bar]-range;
if(stop<UpBuffer1[bar+1]) stop=UpBuffer1[bar+1];
UpBuffer1[bar]=UpBuffer2[bar]=stop;
}
}
if(trend<0)
{
if(SellBuffer[bar])
{
DnBuffer1[bar]=DnBuffer2[bar]=SellBuffer[bar];
UpBuffer1[bar]=UpBuffer1[bar+1];
}
else
{
stop=high[bar]+range;
if(stop>DnBuffer1[bar+1]) stop=DnBuffer1[bar+1];
DnBuffer1[bar]=DnBuffer2[bar]=stop;
}
}
//---
if(bar) oldtrend=trend;
}
//---
return(rates_total);
GlobalVariableSet("LineValue",stop);
}
//+------------------------------------------------------------------+
эксперт хотел бы получить эту ценность GlobalVariableSet("LineValue",stop);
Я из мира, у вас есть другой путь?
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- int LineValue=GlobalVariableGet("LineValue"); //--- }
Я хотел бы получить эту ценность по-другому, не будучи GlobalVariable?
а то перекидывайся этими данными!
Есть ли другой способ получить данные INDICATOR без GLOBAL-переменных?
Мой индикатор генерирует данные, которые ЭКСПЕРТ должен анализировать и принимать решения.
if (buytrend) GlobalSet ("BuyTrend", 1);
как вариант, прописать весь код индикатора в советнике, и работать без индикатора.
продублировать код индикатора в советнике и работать одновременно индикатором и советником - думаю плохая идея. но если комп тянет - можно и так.
как вариант, прописать весь код индикатора в советнике, и работать без индикатора.
продублировать код индикатора в советнике и работать одновременно индикатором и советником - думаю плохая идея. но если комп тянет - можно и так.
Когда вы создаете индикатор с помощью iCustom (); все переменные в индикаторе являются частью EXPERT? Это было?
//+------------------------------------------------------------------+ //| NRTR.mq5 | //| Ramdass - Conversion only | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Red //---- input parameters input int AveragePeriod = 10; input int CountBars = 300; //---- buffers double value1[]; double value2[]; string stop;
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- Print(stop); //--- }
правильно?
Есть ли другой способ получить данные INDICATOR без GLOBAL-переменных?
Мой индикатор генерирует данные, которые ЭКСПЕРТ должен анализировать и принимать решения.
if (buytrend) GlobalSet ("BuyTrend", 1);
icustom, глобальная переменная и писать в csv файл.
Когда вы создаете индикатор с помощью iCustom (); все переменные в индикаторе являются частью EXPERT? Это было?
правильно?
через iCustom () можно подтянуть только те данные, которые на графиках в индикаторах. промежуточные расчеты - нельзя взять.
через iCustom () можно подтянуть только те данные, которые на графиках в индикаторах. промежуточные расчеты - нельзя взять.
Любой параметр, отличный от GlobalVariableGet?
iCustom
Expert ----> Indicator
Indicator -----> Expert?
эксперт хотел бы получить эту ценность GlobalVariableSet("LineValue",stop);
Я из мира, у вас есть другой путь?
Я хотел бы получить эту ценность по-другому, не будучи GlobalVariable?
А разве после
return(rates_total);
может выполняться строка
GlobalVariableSet("LineValue",stop);
Но, если уж так хочется работать с этим индикатором, то получить можно не GV а значение буфера индикатора.
CopyBuffer(handle_iCustom_ZZ,0,0,to_copy,arrZZ)
соответственно не забыть объявить массив arrZZ[]
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть ли другой способ получить данные INDICATOR без GLOBAL-переменных?
Мой индикатор генерирует данные, которые ЭКСПЕРТ должен анализировать и принимать решения.
if (buytrend) GlobalSet ("BuyTrend", 1);