MQL4 - automated forex trading   /  

Форум

Не вьехал по МТ-5

К списку тем  | 1 2 3 4 Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
84
alex54 20.10.2009 17:40 

ГУРУ!

не могу получить значение МА, пишет ""copied=-1""

Ткните меня носом где не так

Если ВСЕ не так напишите кодик, будьте так любезны

Заранее благодарен

double Ups[];
ArraySetAsSeries(Ups,true);
int MAhandle= iMA(Symbol(), 0,24, 0, 1,PRICE_CLOSE );

int copied=CopyBuffer(MAhandle,0,0,10,Ups);
Print(Ups[1]," ",copied);

Организуйте багтрекинг и техсаппорт для своей компании

В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем.


avatar
7054
TheXpert 20.10.2009 17:47 

alex54 писал(а) >>

Если буфер Ups не индикаторный, то задайте ему нужный размер перед копированием. Если индикаторный -- копируйте целиком. А вообще GetLastError в помощь.


avatar
Модератор
5198
stringo 20.10.2009 17:55 
TheXpert писал(а) >>

Если буфер Ups не индикаторный, то задайте ему нужный размер перед копированием. Если индикаторный -- копируйте целиком. А вообще GetLastError в помощь.

Вообще, если буфвер динамический, то может иметь любой размер. CopyBuffer сделает ресайз.

В данном же случае необходим некоторый таймаут, чтобы после создания хэндла данные посчитались.


avatar
7054
TheXpert 20.10.2009 17:59 
stringo >>:

Вообще, если буфвер динамический, то может иметь любой размер. CopyBuffer сделает ресайз.

Когда писал статью, специально проверял -- ресайза не было. Билд был что-то около 199, точно не скажу.

В данном же случае необходим некоторый таймаут, чтобы после создания хэндла данные посчитались.

Есть специфичная ошибка, отражающая этот момент?


avatar
84
alex54 20.10.2009 18:01 
stringo писал(а) >>

Вообще, если буфвер динамический, то может иметь любой размер. CopyBuffer сделает ресайз.

В данном же случае необходим некоторый таймаут, чтобы после создания хэндла данные посчитались.

Все получилось! Все дело в SLEEP !!!

ДЕНЬ КОВЫРЯЛСЯ


avatar
Модератор
5198
stringo 20.10.2009 18:27 
TheXpert писал(а) >>

Когда писал статью, специально проверял -- ресайза не было. Билд был что-то около 199, точно не скажу.

Есть специфичная ошибка, отражающая этот момент?

Есть. ERR_INDICATOR_DATA_NOT_FOUND - 4806


avatar
Модератор
5198
stringo 20.10.2009 18:31 
alex54 писал(а) >>

Все получилось! Все дело в SLEEP !!!

ДЕНЬ КОВЫРЯЛСЯ

Посмотрите примеры наших кастомных индикаторов, которые используют другие индикаторы для своих расчётов. Например MACD. Мы используем функцию BarsCalculated, чтобы выяснить сколько насчиталось и насчиталось ли вообще.


avatar
2132
kombat 20.10.2009 19:02 
stringo >>:

Есть. ERR_INDICATOR_DATA_NOT_FOUND - 4806

Кстати об ошибках...

Давеча "поймал" 4752 а что это неизвестно.

Сейчас отвечать не стОит, особо, но вот списочек оных для собираемого мной файла пригодился бы.

Да обновляемый периодически...

//+------------------------------------------------------------------+
//|                                                       Errors.mqh |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

//---
string Err(int c)
{
switch(c)
{
// ...
case 4602: return((string)c+"=Ошибочный индекс своего индикаторного буфера");
case 4603: return((string)c+"=Ошибочный идентификатор свойства пользовательского индикатора");
case 4701: return((string)c+"=Ошибочный идентификатор свойства счета");
case 4752: return((string)c+"=4752 ?");
// ...
case 65536: return((string)c+"=gggooo");
//---
default: return((string)c+"=n/a");
}
}

avatar
Модератор
5198
stringo 20.10.2009 19:09 

ERR_TRADE_DISABLED - 4752 - Торговля для экспертов запрещена.

Сегодня внесли в язык и в справку


avatar
550
marketeer 21.10.2009 23:52 
stringo >>:

Вообще, если буфвер динамический, то может иметь любой размер. CopyBuffer сделает ресайз.

В данном же случае необходим некоторый таймаут, чтобы после создания хэндла данные посчитались.

...

Есть. ERR_INDICATOR_DATA_NOT_FOUND - 4806

Может перепроектируете этот кусок пока не поздно, ибо это баг?

Либо нужно возвращать управление из функции только после того, как хэндл указывает на валидные данные.

Либо возвращать иной код ошибки - указанный не соответствует по описанию: должно быть что-то вроде DATA_NOT_READY_YET. И еще тогда нужна функция типа WaitForSingleObject, т.к. Sleep - это кривизна: одни раз хватит 1 мс, в другой не хватит, а ставить с запасом - будут тормоза.

ИМХО.


avatar
707
api 22.10.2009 00:02 
marketeer писал(а) >>

... И еще тогда нужна функция типа WaitForSingleObject ...

Поддерживаю.

К списку тем   | 1 2 3 4  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий