Как Вы определили, что функция не работает?
Комент не работает. на чарт не выводится информация "Visual mode turned on"
Вот пример надеюсь более удачный. Стандартный индикатор MACD, если его прикрепить на чарт то он ничего не должен расчитывать, а если прикрепить к графику где идёт визкальное тестирование то расчет должен осуществляться. т.к. IsVisualMode()==true
//+------------------------------------------------------------------+
//| Custom MACD.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Silver
#property indicator_color2 Red
#property indicator_width1 2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_LINE);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(Digits+1);
//---- indicator buffers mapping
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
if (IsVisualMode()==true){
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
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);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom MACD.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Silver
#property indicator_color2 Red
#property indicator_width1 2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_LINE);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(Digits+1);
//---- indicator buffers mapping
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
if (IsVisualMode()==true){
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
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);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
}
return(0);
}
//+------------------------------------------------------------------+
Индикаторы, вызванные из экспертов, работают в контексте вызвавшего их эксперта. И они ничего не рисуют на графике.
Попробуйте вместо коммента использовать принт.
Попробуйте вместо коммента использовать принт.
Я просто прикрепляю индикатор на график визуализации руками. и ничего не происходит, ни коменты не выводятся ни чего-то другое. Индикатор не вызывается из тестируемого эксперта.
Вы прикрепили индикатор к графику. И этот индикатор не имеет никакого отношения к тестированию. Если Вы попытаетесь вызвать в этом индикаторе функцию IsTesting, то она вернёт false. По той же причине.
объясните подробнев в связке с чем и как использовать данную функцию.
Попробывал написать эксперта который вызывает данный индикатор, тоже ничего не вышло.
int start()
{
//----
double indic = iCustom(NULL, 0, "MACD",12,26,9,0);
Comment (indic);
//----
return(0);
}
Попробывал написать эксперта который вызывает данный индикатор, тоже ничего не вышло.
int start()
{
//----
double indic = iCustom(NULL, 0, "MACD",12,26,9,0);
Comment (indic);
//----
return(0);
}
Эту функцию желательно использовать в экспертах (согласно справки). Например, для дополнительной визуализации с помощью графических объектов.
В индикаторах тоже можно. Просто для общности. Вызванные экспертом индикаторы наследуют всё окружение (флаги в том числе) эксперта.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В новом 200 билде и в 199, не работает функция IsVisualMode(), не возвращает True
пример приведенный в хелпе, тоже не функционирует, исправте этот баг.
код для проверки:
#property indicator_chart_window
int start()
{
int counted_bars=IndicatorCounted();
//----
if(IsVisualMode()) Comment("Visual mode turned on");
//----
return(0);
}