Что-то неладное с историей. Нули только при тесте на исторических данных. При тесте на реальных данных значения вполне адекватные.
Как в пятом закачать новую историю?
a_khl:
Ничего качать не нужно. Пример работы с индикатором iMA:Что-то неладное с историей. Нули только при тесте на исторических данных. При тесте на реальных данных значения вполне адекватные.
Как в пятом закачать новую историю?
//+------------------------------------------------------------------+
//| iMA.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property description "Receiving values of the Moving Average indicator on bars number: \"0\", \"1\" and \"2\""
#property version "1.000"
//---
int handle_iMA; // variable for storing the handle of the iMA indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iMA
handle_iMA=iMA(Symbol(),Period(),6,0,MODE_EMA,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iMA==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- get value iMA in bar 0
double ma_0=iMAGet(0);
//--- get value iMA in bar 1
double ma_1=iMAGet(1);
//--- get value iMA in bar 2
double ma_2=iMAGet(2);
//---
string text="";
text+="bar 0: "+DoubleToString(ma_0,Digits()+1)+"\n"+
"bar 1: "+DoubleToString(ma_1,Digits()+1)+"\n"+
"bar 2: "+DoubleToString(ma_2,Digits()+1);
Comment(text);
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA |
//+------------------------------------------------------------------+
double iMAGet(const int index)
{
double MA[1];
//--- reset error code
ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(MA[0]);
}
//+------------------------------------------------------------------+
//| iMA.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property description "Receiving values of the Moving Average indicator on bars number: \"0\", \"1\" and \"2\""
#property version "1.000"
//---
int handle_iMA; // variable for storing the handle of the iMA indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iMA
handle_iMA=iMA(Symbol(),Period(),6,0,MODE_EMA,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iMA==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- get value iMA in bar 0
double ma_0=iMAGet(0);
//--- get value iMA in bar 1
double ma_1=iMAGet(1);
//--- get value iMA in bar 2
double ma_2=iMAGet(2);
//---
string text="";
text+="bar 0: "+DoubleToString(ma_0,Digits()+1)+"\n"+
"bar 1: "+DoubleToString(ma_1,Digits()+1)+"\n"+
"bar 2: "+DoubleToString(ma_2,Digits()+1);
Comment(text);
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA |
//+------------------------------------------------------------------+
double iMAGet(const int index)
{
double MA[1];
//--- reset error code
ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(MA[0]);
}
//+------------------------------------------------------------------+
Файлы:
iMA.mq5
7 kb
Все неожиданно заработало. Спасибо.
Еще вопрос. Напишу сюда же, чтоб не плодить темы.
При прогоне теста в одних случаях OrderSend проходит нормально, в других пишет, "Invalid request".
При ошибке OrderCheck сообщает что баланс и эквити равны нулю. Что бы это могло быть?
Файлы:
invalid_request.txt
1 kb
Request_executed.txt
1 kb
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день
Подскажите, пожалуйста. Не въезжаю. Из индикатора в массив копируются нули.
int ma_handle;
double ma[];
ma_handle=iMA(_Symbol,PERIOD_M15,6,0,MODE_EMA,PRICE_CLOSE);
CopyBuffer(ma_handle,0,0,4,ma);
Значения в отладчике:
ma_handle = 10
ma[0] = 9.881312916824931e-324