Pessoal, olá a todos os profissionais e a quem sabe como!
Tenho um problema com a obtenção de dados de um indicador - por favor, me ajudem, quem pode fazer isso....
Objetivo da função: Calcular a distância média em pontos entre as linhas externas do indicador"Bollinger Bands", para o período especificado.
A essência do problema: Não consigo obter os valores reais do preço nas linhas do indicador para a barra especificada, porque, por algum motivo, o mesmo valor de preço é gravado em diferentes buffers do indicador, o que também não corresponde aos valores reais de nenhuma das linhas dessa barra. E, como resultado, algum valor de preço desconhecido é gravado em diferentes buffers (em diferentes solicitações), o que anula todo o trabalho adicional da função. Além disso, usando exatamente o mesmo método dessa função, consegui obter indicadores de quaisquer outros indicadores, mas aqui não funciona....
int Bollinger_Bands(int _Average_Period, int _Number)
{
double Buffer_BASE_LINE[]; // Массив Буффера Линии BASE_LINEdouble Buffer_UPPER_BAND[]; // Массив Буффера Линии UPPER_BANDdouble Buffer_LOWER_BAND[]; // Массив Буффера Линии LOWER_BANDint Bar_Cash = _Average_Period; // Количество плучаемых значений от индикатораint Bands_Handel = 0; // Хендл индикатора Bollinger_Bands//---//double Base_Line = 0; // Значение линии BASE_LINEdouble Upper_Line = 0; // Значение линии UPPER_BANDdouble Lower_Line = 0; // Значение линии LOWER_BAND//---//double Band_Size_Buffer[];// Буфер расчётных значений разницы между линиями индикатора
int Band_Size_Total = 0;// Итог среднего значения расстояния между линиями в пунктах
ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE; // тип цены //---//ArrayResize(Band_Size_Buffer,_Average_Period+1);
ArrayResize(Buffer_UPPER_BAND,_Average_Period+1);
ArrayResize(Buffer_LOWER_BAND,_Average_Period+1);
//---//
Bands_Handel = iBands(_Symbol,PERIOD_CURRENT,20,2,0,applied_price);
//---// CopyBuffer(Bands_Handel,0,_Number,_Average_Period,Buffer_BASE_LINE); ArraySetAsSeries(Buffer_BASE_LINE,true);
CopyBuffer(Bands_Handel,1,_Number,_Average_Period,Buffer_UPPER_BAND); ArraySetAsSeries(Buffer_UPPER_BAND,true);
CopyBuffer(Bands_Handel,2,_Number,_Average_Period,Buffer_LOWER_BAND); ArraySetAsSeries(Buffer_LOWER_BAND,true);
//---////---// Тут получение значений для выбранного номера бара из переменной которая передаётся в функцию (использовал как проверку получения данных по линиям)
Base_Line = NormalizeDouble(Buffer_BASE_LINE[_Number], _Digits); //Alert("Base_Line[",_Number,"] = ",Base_Line);
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[_Number], _Digits); //Alert("Upper_Line[",_Number,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[_Number], _Digits); //Alert("Lower_Line[",_Number,"] = ",Lower_Line);//---////---// ** А это расчёт среднего расстояния между внешними линиями Боллинджера за указанный период. Получается 0 потому что одно число отнимается само от себя.for(int i=_Average_Period; i>=0; i--) {
//---//
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[i], _Digits); //Alert("Upper_Line[",i,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[i], _Digits); //Alert("Lower_Line[",i,"] = ",Lower_Line);//---//
Band_Size_Buffer[i] = NormalizeDouble( ((Upper_Line - Lower_Line) / _Point), 2); //Alert("Band_Size_Buffer[",i,"] = ",Band_Size_Buffer[i]);
}//---//
Band_Size_Total = (int) MathMean(Band_Size_Buffer);
//---//return(Band_Size_Total);
}
Há uma confusão com o uso da biblioteca padrão. Como obter um tíquete depois de abrir um pedido usando a biblioteca padrão? Posso ter certeza de que a resposta do servidor já foi recebida aqui? O terminal trava enquanto aguarda uma resposta do servidor? Isso não está claro.
Nauris Zukas uso da biblioteca padrão. Como obter um tíquete depois de abrir um pedido usando a biblioteca padrão? Posso ter certeza de que a resposta do servidor já foi recebida aqui? O terminal trava enquanto aguarda uma resposta do servidor? Não estou entendendo.
Obrigado! Terei que refazer algumas funções então.
Você viu em algum lugar uma função para calcular a derrapagem no mql5?
Por que procurar por ela? Em OnTradeTransaction, você captura o evento de colocação da ordem, lê o preço da ordem, depois captura a negociação, lê o preço da negociação e obtém a diferença desses preços.
Você também pode criar uma variável em nível global, gravar o preço nela no momento do envio da ordem e, em OnTradeTransaction, obter o preço da transação...
Você também pode criar uma variável em nível global, gravar o preço nela quando a ordem for enviada e obter o preço da transação em OnTradeTransaction....
Essa opção está definitivamente descartada. Se eu precisar de um preço sem um tíquete e enviar muitas ordens, como a OnTradeTransaction lidará com isso?
Você obtém uma negociação, obtém o ID da posição, extrai ordens e negociações do histórico por esse ID e lê os preços da ordem e da negociação.
Está claro! Mas a segunda opção com o preço salvo, durante o envio de uma ordem, no nível global e, em seguida, em OnTradeTransaction, obter o preço da transação... isso não está claro para mim. Por que salvar um preço que não está vinculado (à ordem) durante o envio da ordem?
Resumindo, farei dessa forma: obtenho a negociação e, em seguida, retiro todo o resto dela.
Adam Dee "Bollinger Bands", para o período especificado.
A essência do problema: Não consigo obter os valores reais do preço nas linhas do indicador para a barra especificada, porque, por algum motivo, o mesmo valor de preço é gravado em diferentes buffers do indicador, o que também não corresponde aos valores reais de nenhuma das linhas dessa barra. E, como resultado, algum valor de preço desconhecido é gravado em diferentes buffers (em diferentes solicitações), o que anula todo o trabalho adicional da função. Além disso, usando exatamente o mesmo método dessa função, consegui obter indicadores de quaisquer outros indicadores, mas aqui não funciona....
Bolinger é SMA +- N*standard_deviations.
Há seus próprios indicadores sobre desvio padrão e SMA. Mas tudo é calculado sem eles - pegue um livro de referência e aqui está uma fórmula. Nela, você encontra a "distância média em pontos entre as linhas", que é igual a 4 sigma no momento, de acordo com os valores padrão. E a média (para qual período?), você se preocupa em calculá-la?
De fato, você quer saber a média do desvio padrão.
Isso está claro! Mas a segunda opção de salvar o preço ao enviar a ordem, em nível global, e depois em OnTradeTransaction para obter o preço da transação... não está clara para mim. Por que salvar um preço que não está vinculado (à ordem) durante o envio da ordem?
Resumindo, farei dessa forma: obtenho a negociação e, em seguida, retiro todo o resto dela.
Isso foi dito sobre a negociação tranquila, quando tudo estará no tempo certo... Sem levar isso em consideração
Essa opção está definitivamente fora de questão. Qual é o preço para mim sem um bilhete se eu enviar muitas ordens, como a OnTradeTransaction lidará com isso?
Pessoal, olá a todos os profissionais e a quem sabe como!
Tenho um problema com a obtenção de dados de um indicador - por favor, me ajudem, quem pode fazer isso....
Objetivo da função: Calcular a distância média em pontos entre as linhas externas do indicador"Bollinger Bands", para o período especificado.
A essência do problema: Não consigo obter os valores reais do preço nas linhas do indicador para a barra especificada, porque, por algum motivo, o mesmo valor de preço é gravado em diferentes buffers do indicador, o que também não corresponde aos valores reais de nenhuma das linhas dessa barra. E, como resultado, algum valor de preço desconhecido é gravado em diferentes buffers (em diferentes solicitações), o que anula todo o trabalho adicional da função.
Além disso, usando exatamente o mesmo método dessa função, consegui obter indicadores de quaisquer outros indicadores, mas aqui não funciona....
Há uma confusão com o uso da biblioteca padrão.
Como obter um tíquete depois de abrir um pedido usando a biblioteca padrão?
Posso ter certeza de que a resposta do servidor já foi recebida aqui? O terminal trava enquanto aguarda uma resposta do servidor? Isso não está claro.
No MQ4 tudo era simples:
Como obter um tíquete depois de abrir um pedido usando a biblioteca padrão?
Posso ter certeza de que a resposta do servidor já foi recebida aqui? O terminal trava enquanto aguarda uma resposta do servidor? Não estou entendendo.
No MQ4 tudo era simples:
É melhor usar o tratamento do evento OnTradeTransaction()
É melhor usar o manipulador de eventos OnTradeTransaction()
Obrigado! Então terei que refazer algumas funções.
Talvez você tenha visto em algum lugar uma função para calcular a derrapagem no mql5?
Obrigado! Terei que refazer algumas funções então.
Você viu em algum lugar uma função para calcular a derrapagem no mql5?
Por que procurar por ela? Em OnTradeTransaction, você captura o evento de colocação da ordem, lê o preço da ordem, depois captura a negociação, lê o preço da negociação e obtém a diferença desses preços.
Você também pode criar uma variável em nível global, gravar o preço nela no momento do envio da ordem e, em OnTradeTransaction, obter o preço da transação...
Alexey Viktorov #:
Você também pode criar uma variável em nível global, gravar o preço nela quando a ordem for enviada e obter o preço da transação em OnTradeTransaction....
Essa opção está definitivamente descartada. Se eu precisar de um preço sem um tíquete e enviar muitas ordens, como a OnTradeTransaction lidará com isso?
Essa opção está definitivamente descartada. Qual é o preço sem um tíquete se eu enviar muitas ordens? Como a OnTradeTransaction lidará com isso?
Por ID de posição, isso será resolvido sem problemas.
Você obtém uma negociação, obtém o ID da posição, extrai ordens e negociações do histórico por esse ID e lê os preços da ordem e da negociação.
Leia a documentação. Você pode encontrar muitas coisas interessantes lá.
Alexey Viktorov #:
Você obtém uma negociação, obtém o ID da posição, extrai ordens e negociações do histórico por esse ID e lê os preços da ordem e da negociação.
Está claro! Mas a segunda opção com o preço salvo, durante o envio de uma ordem, no nível global e, em seguida, em OnTradeTransaction, obter o preço da transação... isso não está claro para mim. Por que salvar um preço que não está vinculado (à ordem) durante o envio da ordem?
Resumindo, farei dessa forma: obtenho a negociação e, em seguida, retiro todo o resto dela.
A essência do problema: Não consigo obter os valores reais do preço nas linhas do indicador para a barra especificada, porque, por algum motivo, o mesmo valor de preço é gravado em diferentes buffers do indicador, o que também não corresponde aos valores reais de nenhuma das linhas dessa barra. E, como resultado, algum valor de preço desconhecido é gravado em diferentes buffers (em diferentes solicitações), o que anula todo o trabalho adicional da função.
Além disso, usando exatamente o mesmo método dessa função, consegui obter indicadores de quaisquer outros indicadores, mas aqui não funciona....
Bolinger é SMA +- N*standard_deviations.
Há seus próprios indicadores sobre desvio padrão e SMA. Mas tudo é calculado sem eles - pegue um livro de referência e aqui está uma fórmula. Nela, você encontra a "distância média em pontos entre as linhas", que é igual a 4 sigma no momento, de acordo com os valores padrão.
E a média (para qual período?), você se preocupa em calculá-la?
De fato, você quer saber a média do desvio padrão.
Isso está claro! Mas a segunda opção de salvar o preço ao enviar a ordem, em nível global, e depois em OnTradeTransaction para obter o preço da transação... não está clara para mim. Por que salvar um preço que não está vinculado (à ordem) durante o envio da ordem?
Resumindo, farei dessa forma: obtenho a negociação e, em seguida, retiro todo o resto dela.
Isso foi dito sobre a negociação tranquila, quando tudo estará no tempo certo... Sem levar isso em consideração
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Perguntas de iniciantes MQL5 MT5 MetaTrader 5
Nauris Zukas, 2022.06.11 17:49
Essa opção está definitivamente fora de questão. Qual é o preço para mim sem um bilhete se eu enviar muitas ordens, como a OnTradeTransaction lidará com isso?