Características da linguagem mql5, subtilezas e técnicas - página 32
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu verifico se o indicador está pronto (no início daOnCalculate)
você também pode adicionar uma Verificação de período
1. Só um esclarecimento. Agora está claro que estamos a falar da mesma coisa.
2. Eu entendo isso, mas não concordo que tenha de inverter as arrays para o fazer. É necessário ter um indicador para dois terminais? Quase como fazer 2 em 1 uma foice e um machado.
3. como eu entendo Buffer[] é usado pelo receptor na função CopyBuffer() para obter apenas 1 valor indicador.
4. Você não prestou atenção ao mais importante. O início da cópia do valor do indicador não deve ser determinado pelo índice de barras, mas pela hora da i-ésima barra.
1. Ok.
2. Eu reverti o array porque reescrevi o indicador dos quatro - tudo funciona corretamente nele e todos os dados estão corretos. Tudo nele está ligado à obtenção de dados na sequência exacta em que são lidos no laço. Se não virarmos o buffer, teremos de escrever o indicador do zero - para quê? É bastante complicado. Citei este indicador apenas como um exemplo de como é errado obter dados de um gf não nativo.
Não. Em Buffer[], os dados são inseridos no laço um a um - a cada iteração do laço, um valor retirado de AO() é inserido.
4. O que você quer dizer com "início de cópia"?
1. Óptimo.
2. Estou virando a matriz porque estou reescrevendo o indicador a partir de quatro - tudo funciona corretamente nela, todos os dados estão corretos. Tudo está ligado à obtenção de dados na sequência exacta em que estes são lidos no laço. Se não virarmos o buffer, teremos de escrever o indicador do zero - para quê? É bastante complicado. Citei este indicador apenas como um exemplo de como é errado obter dados de um gf não nativo.
Não. No buffer[] os dados são inseridos um a um no laço - a cada iteração do laço é inserido um valor retirado de AO()
4. O que você quer dizer com "início de cópia"?
2. Nada o impede de construir um loop de 0 a taxas_total-1
3. Sim, eu tenho algo errado em algum lugar.
4.
deve ser mudado para
"From where to start" ou "from what date" é o início da cópia dos valores do indicador para a matriz receptora.
3. Sim, eu tenho algo errado em algum lugar.
4.No seu código.
deve ser mudado para
"De onde começamos" ou "a partir de que data" é o início da cópia dos valores do indicador para a matriz receptora.
Porquê passar a data se estou a ler o valor do índice do laço? Você já executou este indicador de teste? Ele sempre tira AO apenas de um - o fator de corrente especificado nas configurações. Não importa como você muda o período de tempo atual, o gráfico AO sempre corresponde ao que você define nas configurações.
Neste caso todos os dados são devolvidos, mas no meu indicador que estou modificando, os dados não são devolvidos a partir de um preço não nativo.
Você não precisa deste indicador de teste - os dados de uma corrente não nativa já são devolvidos. Mas os dados não são devolvidos no meu, mas eu recebo-os da mesma forma.
Porquê passar a data se estou a ler o valor do índice do laço? Você já executou este indicador de teste? Ele sempre plota AO a partir de apenas um - o setff nas configurações. Não importa como você muda o período de tempo atual, o gráfico AO sempre corresponde ao que você define nas configurações.
Neste caso todos os dados são devolvidos, mas no meu indicador que estou modificando, os dados não são devolvidos a partir de um preço não nativo.
Você não precisa deste indicador de teste - os dados de uma corrente não nativa já são devolvidos. Mas o meu não, mas recebo dados exactamente da mesma forma.
Porque a barra zero H4 contém QUATRO barras H1. E se você solicitar o índice 2 do período H1, você receberá o valor do indicador na barra 2 do período H4.
Eu mal entendo o que eu consegui escrever.
No momento são 13:35. Hora de abertura da barra H1 actual = 13:00. Você tenta copiar os valores do indicador pelo índice de barra = 1, ou seja, barra 12:00 do período H1 atual. Mas em vez das 12:00, você tem 8:00, à hora H4 do período.
Para H1 o primeiro bar é às 12:00
Para H4 o primeiro bar é às 8:00
Tanto lá como lá o índice de barras é o primeiro...
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Bugs, bugs, perguntas
fxsaber, 2017.04.12 08:38
Um pouco da ponta do chapéu. Contornar o operador de atribuiçãoFórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Não consigo obter dados indicadores de um período de tempo elevado.
Artyom Trishkin, 2017.04.14 01:23
Há quatro dias que tento obter os dados do indicador AO padrão do indicador sénior, e ainda não consegui...
Estou lendo dados AO no loop, mas exatamente no loop não há dados históricos. Há dados sobre o bar actual. Qual é o problema? O que estou a fazer mal?
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Características da linguagem mql5, dicas e truques
fxsaber, 2017.02.27 18:40
Obrigado pela dica! No deserto é SymbolInfoMarginRate. Então agora é assim.double GetMarginRequired( const string Symb )
{
MqlTick Tick;
double MarginInit, MarginMain;
return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Precisamos ser claros de que pode haver requisitos de margem muito diferentes na MT5 em diferentes direções. Ou seja, uma única variante do MT4 pode não funcionar. No Forex, é claro, este não será o caso. Mas tens de te lembrar. Portanto, em geral, você deve escrevê-lo desta forma
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
double MarginInit, MarginMain;
const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
(SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
return(Res);
}
Destacado pode retornar 0. O BKS deparou-se com isto.
Fê-lo assim:
Acho que estás a fazer um monte de coisas "erradas". Por favor, descreva o que você precisa fazer: passo a passo, ponto a ponto.
O que é que se passa exactamente? Essa era a questão - o que estou fazendo de errado para obter dados indicadores a partir de um período de tempo não nativo?
Exemplo: O indicador está a correr em М1, enquanto os dados da AO devem ser obtidos em М5. Assim, enquanto temos limite>1 (o histórico precisa ser recalculado), AO de M5 retorna zeros com ausência de erro de dados. Assim que todo o histórico é calculado (limite==0), os dados de AO com M5 começam a chegar.