Em vez de Fechar[2] colocar o valor do indicador na segunda barra (por exemplo iRSI(.......,2) ) e em vez de Fechar[1] colocar o valor do indicador na primeira barra. E o uroven é o valor do nível.
Pode dizer-me se alguém viu um volume lateral do dia no lado direito do gráfico para mt5, para mt4 encontrei-o aqui https://www.mql5.com/ru/code/9777. Tenho duas variantes: ou reescrevo as variáveis nele ou encontro uma já pronta. Ou não vejo a utilidade de encomendar,,,,,,, , preciso de verificar uma teoria de equilíbrio ,,,,. Encontrei uma obra para mt5 onde o perfil do dia de ontem é desenhado à esquerda mas há um inconveniente importante, não mostra o que acontece hoje. Por isso, quero acrescentar ao padrão do gráfico informação sobre o que se passa no momento da negociação
Tral_Start__Upgr é igual a uma variável externa do tipo int e é igual a 5.
Tral_Size__Upgr é similarmente igual a 4
TV - valor do tick, =10
SumLotSellDBL = 0.04
Já o li. Viu como funcionaria se Tral_Start__Upgr, Tral_Size__Upgr e as suas variáveis externas fossem definidas como duplas. Isto é, quando tudo é do mesmo tipo sem qualquer conversão e perda de dados. O resultado é o mesmo. O que é que me enganei?
Maria Baburina: Ler. Viu como funcionaria se Tral_Start__Upgr, Tral_Size__Upgr e as suas variáveis externas fossem definidas como duplas. Isto é, quando tudo é do mesmo tipo sem qualquer conversão e perda de dados. O resultado é o mesmo. O que é que me enganei?
Um homem cego a falar com um surdo. Se quiser que alguém o teste, precisa do código mínimo possível que pode ser compilado noutra máquina e testado. Sem código - nada de que falar.
#property indicator_chart_window#property indicator_buffers1#property indicator_plots1class CLASS
{
public:
double Buffer[];
CLASS( void )
{
SetIndexBuffer(0, this.Buffer);
}
};
CLASS* Class;
voidOnInit( void )
{
Class = new CLASS;
delete Class;
Class = new CLASS;
Class.Buffer[0] = 0; // array out of rangedelete Class;
return;
}
intOnCalculate( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[] )
{
return(rates_total);
}
Em quatro funcionou bem! Em cinco é um aborrecimento. Será esta outra limitação arquitectónica em comparação com o quad? Dê-me uma ligação para uma discussão sobre isto, não a consegui encontrar eu próprio.
Compreendo correctamente que só pode atribuir qualquer coisa aos amortecedores indicadores após a primeira chamada do próprio terminal (não manualmente) à OnCalculate?
comp: Compreendo correctamente que algo só pode ser atribuído a amortecedores indicadores após a primeira chamada do terminal (não manualmente) OnCalculate?
Os buffers indicadores podem ser acedidos depois de OnCalculate() ter sido chamado. Ao mesmo tempo, o próprio tampão indicador deve ser declarado na área das variáveis globais:
Os amortecedores indicadores podem ser acedidos depois de OnCalculate() ter sido chamado.
Ao que parece, está enganado. Só se pode candidatar quando o terminal chama a OnCalculate. Neste caso, a condição no MT4 é mais flexível, porque basta chamar a OnCalculate apenas uma vez. E em MT5, deve esperar pela chamada da OnCalculate pelo próprio terminal sempre após o SetIndexBuffer. Comprovação
#property strict#property indicator_chart_window#property indicator_buffers1#ifdef __MQL5__#property indicator_plots1#endif
#ifdef __MQL5__#define TRUEtrue#define FALSEfalse#endif
class CLASS
{
public:
double Buffer[];
CLASS( void )
{
::SetIndexBuffer(0, this.Buffer);
}
#define TIMESERIES(X) \
::ArraySetAsSeries(X, TRUE); \
Size = ::MathMin(Copy##X(::Symbol(), ::Period(), 0, bars, X), Size);
staticint FullOnCalculate( void )
{
int Spread[];
long RealVolume[];
int Size = INT_MAX;
#ifdef __MQL4__constint bars = ::Bars;
#endif
#ifdef __MQL5__constint bars = ::Bars(::Symbol(), ::Period());
#endif
TIMESERIES(Spread)
TIMESERIES(RealVolume)
#ifdef __MQL4__return(::OnCalculate(Size, 0, Time, Open, High, Low, Close, RealVolume, Volume, Spread));
#endif
#ifdef __MQL5__datetimeTime[];
doubleOpen[];
doubleHigh[];
doubleLow[];
doubleClose[];
long TickVolume[];
TIMESERIES(Time)
TIMESERIES(Open)
TIMESERIES(High)
TIMESERIES(Low)
TIMESERIES(Close)
TIMESERIES(TickVolume)
return(::OnCalculate(Size, 0, Time, Open, High, Low, Close, RealVolume, TickVolume, Spread));
#endif
}
};
CLASS* Class;
bool FirstRunOnCalculate = TRUE; // Необходимо TRUE, т.к. вызов OnCalculate только самим терминалом инициирует индикаторный буферvoidOnChartEvent( constint id, constlong& lparam, constdouble& dparam, conststring& sparam )
{
if (id == CHARTEVENT_CHART_CHANGE)
{
Print(__FUNCTION__);
::OnDeinit();
::Class = new CLASS;
if (!FirstRunOnCalculate)
CLASS::FullOnCalculate(); // Тут будет задница для MT5 (в MT4 - без проблем), т.к. после SetIndexBuffer в MT5 надо дожидаться вызова OnCalculate САМИМ терминалом
}
return;
}
voidOnDeinit( constint Reason = 0 )
{
if (::CheckPointer(::Class) == POINTER_DYNAMIC)
delete ::Class;
return;
}
intOnCalculate( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[] )
{
Print(__FUNCTION__);
if (FirstRunOnCalculate)
FirstRunOnCalculate = FALSE;
if (::CheckPointer(::Class) != POINTER_INVALID)
::Class.Buffer[0] = 0; // array out of range - MT5-ERROR!!!return(rates_total);
}
Em MT4 este indicador funcionará sem problemas, em MT5 irá colidir com um erro. Como se verificou, no MT4 basta esperar pela primeira chamada da OnCalculate pelo terminal e fazer o que quiser com os amortecedores, incluindo a sua redefinição usando SetIndexBuffer. Mas em MT5 após TODOS os SetIndexBuffer é necessário esperar pela primeira chamada da OnCalculate pelo terminal.
Esta característica não está documentada em lado nenhum. E não parece enquadrar-se na definição de "principiante".
Podemos esperar que em MT5 este comportamento seja o mesmo que em MT4? Isto é, após a primeira chamada da OnCalculate pelo próprio terminal seria possível ligar para SetIndexBuffer sem problemas?
Ao que parece, está enganado. Só pode chamá-lo quando a OnCalculate é chamada pelo próprio terminal. Neste caso, no MT4 a condição é mais flexível, porque só é necessário chamar a OnCalculate uma vez. Mas em MT5, é preciso esperar pela chamada da OnCalculate pelo próprio terminal sempre após o SetIndexBuffer. Comprovação
Em MT4 este indicador funcionará sem problemas, em MT5 irá colidir com um erro. Como se verificou, no MT4 basta esperar pela primeira chamada da OnCalculate pelo terminal e depois fazer o que quiser com os amortecedores, incluindo a sua redefinição utilizando o SetIndexBuffer. Mas em MT5 após TODOS os SetIndexBuffer é necessário esperar pela primeira chamada da OnCalculate pelo terminal.
Esta característica não está documentada em lado nenhum. E não parece enquadrar-se na definição de "principiante".
Podemos esperar que em MT5 este comportamento seja o mesmo que em MT4? Isto é, após a primeira chamada da OnCalculate pelo próprio terminal será possível ligar para SetIndexBuffer sem problemas?
Não se envolver em verborreia - naturalmente, a chamada da OnCalculate implica uma chamada pelo próprio terminal, porque
A função OnCalculate() é chamada apenas em indicadores personalizados quando é necessário calcular os valores dos indicadores pelo eventoCalculate. Isto geralmente acontece quando se recebe um novo tick para o símbolo, para o qual o indicador é calculado. O indicador não precisa de ser anexado a qualquer tabela de preços deste símbolo.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Em vez de Fechar[2] colocar o valor do indicador na segunda barra (por exemplo iRSI(.......,2) ) e em vez de Fechar[1] colocar o valor do indicador na primeira barra. E o uroven é o valor do nível.
E o resto já lhe foi dito acima.
Pré-requisito:
ProfitSellDBL é calculado aqui
Lucro_Upgr = 0.01
Tral_Start__Upgr é igual a uma variável externa do tipo int e é igual a 5.
Tral_Size__Upgr é similarmente igual a 4
TV - valor do tick, =10
SumLotSellDBL = 0.04
Ler. Viu como funcionaria se Tral_Start__Upgr, Tral_Size__Upgr e as suas variáveis externas fossem definidas como duplas. Isto é, quando tudo é do mesmo tipo sem qualquer conversão e perda de dados. O resultado é o mesmo. O que é que me enganei?
Um homem cego a falar com um surdo. Se quiser que alguém o teste, precisa do código mínimo possível que pode ser compilado noutra máquina e testado. Sem código - nada de que falar.
Acrescentado: Usar depuração(Debugging):
-Preconfiguração
-Pontos de paragem
-Iniciar adepuração
-Expressõesobserváveis
-Vista dapilha de chamadas
-Depuraçãopasso a passo
-Parar, Retomar e Terminar a Depuração
-Depuração dahistória
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
comp, 2016.04.03 18:21
Erro de tempo de execução
Em quatro funcionou bem! Em cinco é um aborrecimento. Será esta outra limitação arquitectónica em comparação com o quad? Dê-me uma ligação para uma discussão sobre isto, não a consegui encontrar eu próprio.
Compreendo correctamente que algo só pode ser atribuído a amortecedores indicadores após a primeira chamada do terminal (não manualmente) OnCalculate?
Os buffers indicadores podem ser acedidos depois de OnCalculate() ter sido chamado. Ao mesmo tempo, o próprio tampão indicador deve ser declarado na área das variáveis globais:
Penso ter encontrado o que procurava, mas a antiguidade do código dá um erro
Ajude-me a consertá-lo ...... se não for muito incómodo.
e se me puder ajudar a virá-lo para o lado direito do ecrã, isso seria óptimo.
Os amortecedores indicadores podem ser acedidos depois de OnCalculate() ter sido chamado.
Ao que parece, está enganado. Só se pode candidatar quando o terminal chama a OnCalculate. Neste caso, a condição no MT4 é mais flexível, porque basta chamar a OnCalculate apenas uma vez. E em MT5, deve esperar pela chamada da OnCalculate pelo próprio terminal sempre após o SetIndexBuffer. Comprovação
Em MT4 este indicador funcionará sem problemas, em MT5 irá colidir com um erro. Como se verificou, no MT4 basta esperar pela primeira chamada da OnCalculate pelo terminal e fazer o que quiser com os amortecedores, incluindo a sua redefinição usando SetIndexBuffer. Mas em MT5 após TODOS os SetIndexBuffer é necessário esperar pela primeira chamada da OnCalculate pelo terminal.
Esta característica não está documentada em lado nenhum. E não parece enquadrar-se na definição de "principiante".
Podemos esperar que em MT5 este comportamento seja o mesmo que em MT4? Isto é, após a primeira chamada da OnCalculate pelo próprio terminal seria possível ligar para SetIndexBuffer sem problemas?
Ao que parece, está enganado. Só pode chamá-lo quando a OnCalculate é chamada pelo próprio terminal. Neste caso, no MT4 a condição é mais flexível, porque só é necessário chamar a OnCalculate uma vez. Mas em MT5, é preciso esperar pela chamada da OnCalculate pelo próprio terminal sempre após o SetIndexBuffer. Comprovação
Em MT4 este indicador funcionará sem problemas, em MT5 irá colidir com um erro. Como se verificou, no MT4 basta esperar pela primeira chamada da OnCalculate pelo terminal e depois fazer o que quiser com os amortecedores, incluindo a sua redefinição utilizando o SetIndexBuffer. Mas em MT5 após TODOS os SetIndexBuffer é necessário esperar pela primeira chamada da OnCalculate pelo terminal.
Esta característica não está documentada em lado nenhum. E não parece enquadrar-se na definição de "principiante".
Podemos esperar que em MT5 este comportamento seja o mesmo que em MT4? Isto é, após a primeira chamada da OnCalculate pelo próprio terminal será possível ligar para SetIndexBuffer sem problemas?