Vou duplicar a pergunta, talvez ninguém tenha notado por causa das perguntas posteriores.
Decidi entender como funciona o indicadorATR e, ao mesmo tempo, estudar seu código. Entendi a essência, mas está escrita de forma estranha.
Aqui está sua funçãoinicial:
Aqui está o primeiro bloco com alguma confusão:
Qual é o sentido de se fazer algo se o valor das barrinhas contadas <1. Na minha opinião, isso significa que o indicador não contou nenhuma barra e eu deveria simplesmente sair da função, pois ainda não há valores... Qual é o senão?
Por quea AtrBuffer tem o índice[Bars-i]? Entendi que a idéia é colocar o buffer em 0,0 se não houver valores. Mas acontece que o valor 0,0 é definido apenas para barras de(Barras) a(Período AtrP), enquanto que doPeríodo AtrP atéa barra 0 nada é escrito para o buffer. Por quê?
Eu não entendo a lógica deste fragmento de código
No próximo bloco:
Na fila:
Condição sei==Bars-1. Parece que o valor da1ªbarra desde o início do gráfico à esquerda é levado em conta...Mas isto está muito longe, de que serve este valor?
As barras são contadas da direita para a esquerda (de 0 para a última (Barras) menos 1). Com cada nova barra (0) todas as barras são correspondentemente aumentadas em uma, e a última (à esquerda) nunca é especificada em termos numéricos, e esta variável Barras, porque ninguém sabe que história você tem, mas garante o trabalho do indicador em toda a história, que ele tem. Treine sua lógica, não há maneira de entender nada sem ela!
As barras são contadas da direita para a esquerda (de 0 para a última (Barras) menos 1). A cada nova barra (0) todas as barras são correspondentemente aumentadas em uma, e a última (esquerda) nunca é especificada numericamente, e esta variável Barras, porque ninguém sabe que história você tem, mas ela garante o trabalho do indicador em toda a história, que ele tem. Treine sua lógica, não há maneira de entender nada sem ela!
Eu sei que as barras são contadas da direita para a esquerda. Se houver 5000 barras no gráfico e período ATR = 14, então[Bars-i] levará o valor de (5000 - 1) a (5000 - 14), ou seja, de 4999 a 4986.
Portanto,a AtrBuffer estará com índice i igual a4999 a 4986. E onde estão as barras restantes de 0 a 4986????
Eu sei que as barras são contadas da direita para a esquerda. Se houver 5000 barras no gráfico e período ATR = 14, então[Bars-i] levará o valor de (5000 - 1) a (5000 - 14), ou seja, de 4999 a 4986.
Portanto,a AtrBuffer estará com índice i igual a4999 a 4986. E onde estão as outras barras de 0 a 4986????
Como você calcula? Se o período ATR = 14, então a barra zero dá a média das 14 barras antes da barra zero e assim por diante até a profundidade da história.
O i passa por cima das 14 barras em último lugar no tempo, mas primeiro em número para calculá-las em média ou o que fazer com a fórmula. Também conta o valor da 4986ª barra pelas 14 barras anteriores no tempo, ou seja, por aqueles que estão à esquerda.
Como você calcula? Se o período ATR = 14, então a barra zero dá a média das 14 barras antes da barra zero e assim por diante até a profundidade da história.
Eu ultrapassei as 14 barras da última vez, mas ultrapassei a primeira por número para calculá-las ou o que fazer com a fórmula. Também conta o valor da 4986ª barra pela última barra no tempo, ou seja, pelas que estão à esquerda.
Estude o para operador em Doc e o tutorial!
Não era essa a pergunta, o que você disse eu entendo. Fui eu que estava trabalhando demais e fui estúpido. Havia um incômodo no fato de que o buffer doperíodo AtrPassar o número de barras da história... E eu estava olhando para ele e não o consegui. Eu fico assim quando trabalho demais...
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.09.2008 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника)://| int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.//| int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
Isto é, se o preço for para um prejuízo de uma ordem aberta pelo número de pips LevelProfit (você pode chamá-lo LevelLoss), você tem que mover TakeProfit para zero ou para um prejuízo de 1 pip 2, etc., dependendo do que você colocar no parâmetro LevelWLoss, de modo que se o preço se vira mesmo, não haveria mais lucro. Ou talvez você tenha um pronto?
Vou duplicar a pergunta, talvez ninguém tenha notado por causa das perguntas posteriores.
Decidi entender como funciona o indicadorATR e, ao mesmo tempo, estudar seu código. Entendi a essência, mas está escrita de forma estranha.
Aqui está sua funçãoinicial:
Aqui está o primeiro bloco com alguma confusão:
Qual é o sentido de se fazer algo se o valor das barrinhas contadas <1. Na minha opinião, isso significa que o indicador não contou nenhuma barra e eu deveria simplesmente sair da função, pois ainda não há valores... Qual é o senão?
Por quea AtrBuffer tem o índice[Bars-i]? Entendi que a idéia é colocar o buffer em 0,0 se não houver valores. Mas acontece que o valor 0,0 é definido apenas para barras de(Barras) a(Período AtrP), enquanto que doPeríodo AtrP atéa barra 0 nada é escrito para o buffer. Por quê?
Eu não entendo a lógica deste fragmento de código
No próximo bloco:
Na fila:
Condição sei==Bars-1. Parece que o valor da1ªbarra desde o início do gráfico à esquerda é levado em conta...Mas isto está muito longe, de que serve este valor?
As barras são contadas da direita para a esquerda (de 0 para a última (Barras) menos 1). Com cada nova barra (0) todas as barras são correspondentemente aumentadas em uma, e a última (à esquerda) nunca é especificada em termos numéricos, e esta variável Barras, porque ninguém sabe que história você tem, mas garante o trabalho do indicador em toda a história, que ele tem. Treine sua lógica, não há maneira de entender nada sem ela!
Eu tenho 1 pip-1 cent. isso significa que preciso de 20USD para poder suportar uma parada de 200 pips para baixo?
As barras são contadas da direita para a esquerda (de 0 para a última (Barras) menos 1). A cada nova barra (0) todas as barras são correspondentemente aumentadas em uma, e a última (esquerda) nunca é especificada numericamente, e esta variável Barras, porque ninguém sabe que história você tem, mas ela garante o trabalho do indicador em toda a história, que ele tem. Treine sua lógica, não há maneira de entender nada sem ela!
Eu sei que as barras são contadas da direita para a esquerda. Se houver 5000 barras no gráfico e período ATR = 14, então[Bars-i] levará o valor de (5000 - 1) a (5000 - 14), ou seja, de 4999 a 4986.
Portanto,a AtrBuffer estará com índice i igual a 4999 a 4986. E onde estão as barras restantes de 0 a 4986????
Eu sei que as barras são contadas da direita para a esquerda. Se houver 5000 barras no gráfico e período ATR = 14, então[Bars-i] levará o valor de (5000 - 1) a (5000 - 14), ou seja, de 4999 a 4986.
Portanto,a AtrBuffer estará com índice i igual a 4999 a 4986. E onde estão as outras barras de 0 a 4986????
Como você calcula? Se o período ATR = 14, então a barra zero dá a média das 14 barras antes da barra zero e assim por diante até a profundidade da história.
O i passa por cima das 14 barras em último lugar no tempo, mas primeiro em número para calculá-las em média ou o que fazer com a fórmula. Também conta o valor da 4986ª barra pelas 14 barras anteriores no tempo, ou seja, por aqueles que estão à esquerda.
Estude o para operador no Doc e no tutorial!
Como você calcula? Se o período ATR = 14, então a barra zero dá a média das 14 barras antes da barra zero e assim por diante até a profundidade da história.
Eu ultrapassei as 14 barras da última vez, mas ultrapassei a primeira por número para calculá-las ou o que fazer com a fórmula. Também conta o valor da 4986ª barra pela última barra no tempo, ou seja, pelas que estão à esquerda.
Estude o para operador em Doc e o tutorial!
Victor, suas suposições são ilógicas.
Se o indicador não tiver processado uma única barra, significa que ele deve processar todas as barras e não terminar o programa.
E os valores indicadores sobre o histórico são necessários para analisar o histórico:)
Caros profissionais, a propagação de um EA em um teste de 5 minutos ainda é ruim, ou é mais ou menos?
Não há muita informação, e os profissionais estão dormindo:)
Se um lote 0,01 = 1 centavo, então para uma posição de 0,1 lote com uma perda de 200 pips stop = 20 USD.
Por favor, ajude a fazer esta função vice versa:
Isto é, se o preço for para um prejuízo de uma ordem aberta pelo número de pips LevelProfit (você pode chamá-lo LevelLoss), você tem que mover TakeProfit para zero ou para um prejuízo de 1 pip 2, etc., dependendo do que você colocar no parâmetro LevelWLoss, de modo que se o preço se vira mesmo, não haveria mais lucro. Ou talvez você tenha um pronto?
Agradecemos antecipadamente))