Não sabe como verificar o valor de retorno para zero? E não sabe como sair da OnCalculate() com um retorno de zero? Nunca tentou procurar informações no sítio web?
Obter o valor necessário da função
Verificar se é zero
Se for zero, então devolva 0;
Se não for zero, então para o passo 3
Trabalhar com este valor
Nunca pensei que iria contar o básico da lógica sobre este recurso a um homem com a classificação superior a 13 mil...
Isto não é um indicador.
Especificei intencionalmente se devo fazer verificações em cada chamada ou uma no início do OnTick é suficiente...
As devoluções não são aceitáveis para mim ... e fazer looping na espera no testador é impossível, e no real deve funcionar (ou não?).
A minha classificação não é para programação, não sou um programador, e estou a aprender este complicado negócio apenas graças a pessoas como você, aprecio realmente o feedback de pessoas com conhecimentos.
Olá. Por alguma razão Handel só transmite quando definido para todos os períodos, mas eu defino para um período específico e não há nada. Não sei qual é o problema. Tentativa de digitação em handel directamente não a partir de variáveis globais, o resultado é o mesmo. O que é que está errado? Preciso que o valor seja de um período.
//+------------------------------------------------------------------+//| 77777.mq5 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers1#property indicator_plots0//+----------------------------------------------+//| Параметры отрисовки индикатора 1 |//+----------------------------------------------+//----inputstring xBars="2018.11.19 00:00"; //Дата начала отсчетаinputbool DataBars=false; //Считать по дате (true)inputint InpMAShift=1; //Сдвиг бара расчета inputENUM_TIMEFRAMES Timeframes=PERIOD_D1; //Таймфрейм скользящейinputENUM_MA_METHOD Method=MODE_EMA; //Метод расчета скользящейinputENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; //Расчет цены скользящейinputENUM_LINE_STYLE MAStyle=STYLE_DASH; //Стиль всех скользящих линийinputint InpMAPeriod1=5; //Скользящая 1 периода//----int handle_ma,shift;
double BufferPrice[];
//---int period;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
period=(InpMAPeriod1<1 ? 1 : InpMAPeriod1);
//---SetIndexBuffer(2,BufferPrice,INDICATOR_CALCULATIONS);
ArraySetAsSeries(BufferPrice,true);
//--- create MA's handlesResetLastError();
//----------------------------------------------------------------+// ПРОБЛЕМА ТУТ ////----------------------------------------------------------------+
handle_ma=iMA(NULL,PERIOD_D1,period,0,MODE_SMA,PRICE_CLOSE); //ПРОБЛЕМА ТУТ
// handle_ma=iMA(NULL,PERIOD_CURRENT,period,0,MODE_SMA,PRICE_CLOSE); // БЕЗ ПРОБЛЕМЫif(handle_ma==INVALID_HANDLE)
{
Print("The iMA (",(string)period,") object was not created: Error ",GetLastError());
returnINIT_FAILED;
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function | //+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ObjectDelete(0,"Proba");
Comment("");
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баровif(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1)
{
limit=rates_total-1;
ArrayInitialize(BufferPrice,0);
}
//--- Подготовка данныхint count=(limit>1 ? rates_total : 2),copied=0;
copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
if(copied!=count) return0;
//---- if(DataBars==false)
shift=InpMAShift;
else
shift=iBarShift(NULL,PERIOD_CURRENT,StringToTime(xBars));
double ma1=BufferPrice[shift];
datetime tm=iTime(NULL,Timeframes,shift);
Comment(NormalizeDouble(BufferPrice[shift],_Digits)," ",shift);
HLine("Proba","",tm,ma1,MAStyle,1,Red);
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+void HLine(string name,
string text,
datetime tm,
double price,
int stl,
int wid,
color clr)
{
if(ObjectFind(0,name)!=0)
{
ObjectCreate(0,name,OBJ_HLINE,0,tm,price);
ObjectSetInteger(0,name,OBJPROP_TIME, tm);
ObjectSetString(0,name,OBJPROP_TEXT,text);
ObjectSetString(0,name,OBJPROP_FONT,"Times New Roman");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,name,OBJPROP_STYLE, stl);
ObjectSetInteger(0,name,OBJPROP_WIDTH, wid);
ObjectSetInteger(0,name,OBJPROP_COLOR, clr);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
}
}
kopeyka2: Olá. Não consigo encontrar nada, por alguma razão o handel só transfere quando está definido para todos os períodos, mas eu defino-o para um determinado período e nada acontece. Não sei qual é o problema. Tentei introduzir dados não provenientes de variáveis globais directamente no handel, o resultado é o mesmo. O que é que está errado?
ResetLastError();
if(CopyBuffer(handle_ma,0,0,count,BufferPrice)<0)
{
PrintFormat("Failed to copy data from the handle_ma indicator, error code %d",GetLastError());
return(0.0);
}
// copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
Estude o erro, Artem tem razão em dizer que deve verificar tudo 10 vezes...
2019.01.2520:12:26.169 Test777 (Si Splice,M1) Failed to copy data from the handle_ma indicator, error code 4806
ERR_INVALID_ARRAY
4006
Matriz de tipo impróprio, tamanho impróprio ou objecto de matriz dinâmica corrompida
kopeyka2: Olá. Reparei que o handel só se transfere quando está definido para todos os períodos, mas quando o defino para um determinado período, nada acontece. Não compreendo qual é o problema. Tentativa de digitação em handel directamente não a partir de variáveis globais, o resultado é o mesmo. O que é que está errado? Preciso que o valor seja do mesmo período.
Tira exemplos da CodeBase dos indicadores do Scriptor, não tira? Certo? Depois procure no seu código (recentemente publicado) exemplos que tenham MTF no seu nome, mas sem MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Isto é, se quiser obter dados sobre o símbolo actual, mas a partir de um período de tempo diferente do período do gráfico, então precisa de um exemplo de um indicador multi-tempo. No MCP ainda não se deve envolver - lá no OOP com a utilização das classes padrão. Vai ficar confuso.
É apenas para MA a trabalhar no período e símbolo actuais. Para trabalhar num período diferente, o cálculo será diferente. Procurem - tudo está perto, e a direcção que vos dei.
Tira exemplos da CodeBase dos indicadores do Scriptor, não tira? Certo? Depois procure no seu código (recentemente publicado) exemplos que tenham MTF no seu nome, mas sem MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Isto é, se quiser obter dados sobre o símbolo actual, mas a partir de um período de tempo diferente do período do gráfico, então precisa de um exemplo de um indicador multi-tempo. No MCP ainda não se deve envolver - lá no OOP com a utilização das classes padrão. Vai ficar confuso.
Por exemplo, este cálculo:
é apenas para MA a trabalhar no período e símbolo actuais. Para trabalhos sobre um período diferente, o cálculo será diferente. Pesquisa - tudo está perto, e eu dei-lhe a direcção.
Por favor, mas eu copiei o erro errado, deveria ser
ERR_INDICATOR_DATA_NOT_FOUND
4806
Os dados solicitados não foram encontrados
A questão é que o número de barras é diferente para diferentes TFs e isto deve ser tido em conta.
Estava apenas a verificá-lo. Mas o PROBLEMA é que, tendo passado por um período constante, em
CopyBuffer o valor em outros prazos NÃO é PERMANENTE. No período de manuseamento estabelecido o valor era, mas nos prazos mais pequenos 0,0 (zero). Movido em busca do tampão... zero. Porque não é passado paraCopyBuffer?
Como encontro a razão para esta mensagem?
Profiler
Não sabe como verificar o valor de retorno para zero? E não sabe como sair da OnCalculate() com um retorno de zero? Nunca tentou procurar informações no sítio web?
Isto não é um indicador.
Especificei intencionalmente se devo fazer verificações em cada chamada ou uma no início do OnTick é suficiente...
As devoluções não são aceitáveis para mim ... e fazer looping na espera no testador é impossível, e no real deve funcionar (ou não?).
A minha classificação não é para programação, não sou um programador, e estou a aprender este complicado negócio apenas graças a pessoas como você, aprecio realmente o feedback de pessoas com conhecimentos.
Obrigado pela vossa compreensão.
Profiler
E se acontecer uma vez por dia ou menos?
Olá. Não consigo encontrar nada, por alguma razão o handel só transfere quando está definido para todos os períodos, mas eu defino-o para um determinado período e nada acontece. Não sei qual é o problema. Tentei introduzir dados não provenientes de variáveis globais directamente no handel, o resultado é o mesmo. O que é que está errado?
Estude o erro, Artem tem razão em dizer que deve verificar tudo 10 vezes...
ERR_INVALID_ARRAY
4006
Matriz de tipo impróprio, tamanho impróprio ou objecto de matriz dinâmica corrompida
ERR_INDICATOR_DATA_NOT_FOUND
4806
Dados solicitados não encontrados
Olá. Reparei que o handel só se transfere quando está definido para todos os períodos, mas quando o defino para um determinado período, nada acontece. Não compreendo qual é o problema. Tentativa de digitação em handel directamente não a partir de variáveis globais, o resultado é o mesmo. O que é que está errado? Preciso que o valor seja do mesmo período.
Tira exemplos da CodeBase dos indicadores do Scriptor, não tira? Certo? Depois procure no seu código (recentemente publicado) exemplos que tenham MTF no seu nome, mas sem MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Isto é, se quiser obter dados sobre o símbolo actual, mas a partir de um período de tempo diferente do período do gráfico, então precisa de um exemplo de um indicador multi-tempo. No MCP ainda não se deve envolver - lá no OOP com a utilização das classes padrão. Vai ficar confuso.
Por exemplo, este cálculo:
É apenas para MA a trabalhar no período e símbolo actuais. Para trabalhar num período diferente, o cálculo será diferente. Procurem - tudo está perto, e a direcção que vos dei.
Tira exemplos da CodeBase dos indicadores do Scriptor, não tira? Certo? Depois procure no seu código (recentemente publicado) exemplos que tenham MTF no seu nome, mas sem MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Isto é, se quiser obter dados sobre o símbolo actual, mas a partir de um período de tempo diferente do período do gráfico, então precisa de um exemplo de um indicador multi-tempo. No MCP ainda não se deve envolver - lá no OOP com a utilização das classes padrão. Vai ficar confuso.
Por exemplo, este cálculo:
é apenas para MA a trabalhar no período e símbolo actuais. Para trabalhos sobre um período diferente, o cálculo será diferente. Pesquisa - tudo está perto, e eu dei-lhe a direcção.
Estude o erro, Artem tem razão em dizer que deve verificar tudo 10 vezes...
ERR_INVALID_ARRAY
4006
Matriz de tipo impróprio, tamanho impróprio ou objecto de matriz dinâmica corrompida
Obrigado
Por favor, mas eu copiei o erro errado, deveria ser
ERR_INDICATOR_DATA_NOT_FOUND
4806
Os dados solicitados não foram encontrados
A questão é que o número de barras é diferente para diferentes TFs e isto deve ser tido em conta.
Por favor, mas eu copiei o erro errado, deveria ser
ERR_INDICATOR_DATA_NOT_FOUND
4806
Os dados solicitados não foram encontrados
A questão é que o número de barras é diferente para diferentes TFs e isto deve ser tido em conta.
Estava apenas a verificá-lo. Mas o PROBLEMA é que, tendo passado por um período constante, em
CopyBuffer o valor em outros prazos NÃO é PERMANENTE. No período de manuseamento estabelecido o valor era, mas nos prazos mais pequenos 0,0 (zero). Movido em busca do tampão... zero. Porque não é passado paraCopyBuffer?