[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 27

 
Code:


OK, vamos tentar outra maneira de ver as coisas.

vVolume12 pode ser escrito como (dVolume+vback1)/k1 (fator 1)

vrealUP12 pode ser escrito como (dVolume+vback1)/k2 (coeficiente 2)

Como tentei descrever a ideologia do indicador, ela consiste na comparação de alguns níveis teóricos e reais. Para obter estes níveis, comparo (ou seja, dividir) o mesmo valor (dVolume+vback1) com algum valor teórico (k1) e valor real (k2). É claro que a k1 estou apenas inventando, para colocar as coisas em seus nomes próprios. Ou, se você quiser, fazer uma suposição. Agora isto tem que ser comparado a algo. Neste caso, nada é mais objetivo e verdadeiro do que o próprio gráfico. Portanto, tomo as diferenças de abertura e fechamento, tomando-as como a linha de fundo de um determinado período de tempo. E a única tarefa aqui é levá-lo ao mesmo dígito, e é por isso que ele é multiplicado por 1000.

Tente calcular várias variantes diferentes de castiçais vizinhos em uma calculadora e você poderá se surpreender com a variedade de resultados de acordo com esta fórmula muito simples.

E em termos de lógica escolar, você está certo. Eu acrescento Volume + Volume/Preço, você não pode fazer isso na escola. :))

Vou passar... :)))

Você não teve inicialmente um problema com a tela? Você o resolveu?

 
MaxZ:

Vou passar... :)))

Você não teve inicialmente algum problema com a tela? Você o resolveu?


Sim, por sinal, eu fiz. Não levei em conta que se tratava de uma linha, não de um histograma. A linha deve ter 2 pontos. Como o código não descreve todas as variantes, mas apenas 2 velas subindo em fila, no caso em que após a segunda vela subindo fosse uma vela descendo, o indicador não tiraria nada. E estava certo. Quando descobri, modifiquei-o para um histograma.

A propósito, não leve a sério meu raciocínio sobre as regras de adição e subtração. :)))

E eu ficaria muito grato se você pudesse me ajudar a continuar o código. Foi o começo. Depois de dois castiçais seguidos, gostaria de contar 3, 4 etc. castiçais seguidos pelo mesmo princípio. Aparentemente, o código deve ser laçado, com a busca de candelabros, certo? Ainda não posso fazer isso. Mas não se prenda ao que está dividido por quê. :)))

 

Portado de

VladimirR 29.07.2011 23:02 am Correção | apagar

Olá. Finalmente escrevi meu primeiro EA! Eu não entendo bem como funciona. A EA estabelece 2 ordens pendentes quando certas condições são atendidas. Stop loss para ambos os pedidos é igual a High[1] (Low[1]) para o pedido pendente de venda(compra) e take profit é sempre igual a pips para o stop loss. Notei no testador de estratégia que o lucro nem sempre é igual ao stop loss em pips. Por favor, informe como isto pode acontecer. Este é o código onde as ordens de parada são calculadas (não há outro lugar no programa onde as paradas são alteradas)

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
Olá, você poderia me dizer, é possível atribuir valores a múltiplas variáveis globais dentro de uma função, e onde essas variáveis precisam ser declaradas nesse caso?

Você pode.

Declare as variáveis globalmente - antes da função start(). Dentro das funções EA, altere seus valores como desejar - após retornar da função, estas variáveis terão os valores que você lhes atribuiu dentro de suas funções até que você as altere novamente em algum lugar.

 
nadya:
boa tarde! você poderia me dizer se é possível atribuir um valor a múltiplas variáveis globais dentro de uma função, e onde essas variáveis precisam ser declaradas nesse caso?

Exemplo. Dentro da myfunction, atribuímos um valor a duas variáveis globais. Você também pode atribuir um valor a três, quatro ou n variáveis desta forma.

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

Mas eu acho que há um senão em sua pergunta...

 
Code:


Sim, a propósito, eu mesmo já resolvi isso. Não levei em conta que se trata de uma linha, não de um histograma. E a linha requer 2 pontos. Como o código não descreve todas as variantes, mas apenas 2 velas subindo em fila, no caso em que após a segunda vela subindo era uma vela descendo, o indicador não desenhou nada. E estava certo. Quando descobri, converti-o para um histograma.

Você, a propósito, não leve a sério meu raciocínio sobre as regras de adição e subtração, pense nisso como uma experiência. :)))

E eu ficaria muito grato se você pudesse me ajudar a continuar o código. Foi o começo. Depois de dois castiçais seguidos, gostaria de contar 3, 4 etc. castiçais seguidos pelo mesmo princípio. Aparentemente, o código deve ser laçado, com a busca de candelabros, certo? Ainda não posso fazer isso. Mas não se prenda ao que está dividido por quê. :)))

Sim. Mas a melhor maneira de resolver este problema é usar um laço com pré-condição de poste "enquanto" ao invés de um laço com contador "para". Porque você não sabe quantos castiçais em alta ou em baixa você vai encontrar em uma fila.

Comece com um problema mais simples, se você achar tão difícil. Por exemplo, exibir os números de a a a b em incrementos de s. Ou encontrar o fatorial de n com um laço.

E para praticar, resolver estes problemas usando ambos os tipos de laços ("para" e "enquanto"). Então você pode começar a melhorar seu indicador.

 

Não existem loops pós-intervalo no idioma, MaxZ.

Seu desejo de ajudar os outros é louvável, mas você mesmo ainda precisa conhecer melhor o idioma.

 
Mathemat:
Não existem laços pós-partida no idioma.

Se você organizar o loop da seguinte forma, você obterá a condição pós-condição correta:

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

Mas eu aceito sua correção. Obrigado. Uma vez que existem de fato dois tipos de laço na MQL4: "para" (com um contador) e "enquanto" (com uma condição prévia). O terceiro tipo (com uma condição posterior) só pode ser organizado intencionalmente.


Mathemat:

Seu desejo de ajudar os outros é louvável, mas você mesmo ainda precisa conhecer melhor o idioma.

O que eu não sei, eu não vou lá.

E todos os outros erros foram cometidos inadvertidamente. Tenho andado distraído ultimamente... Eu só quero ajudar as pessoas.

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

Muito provavelmente, esta função não é modelada no testador (não foi verificado). Especialmente porque exato (o quarto parâmetro de função) é definido como falso por padrão.
 
Mathemat:
Esta função provavelmente não é simulada no testador (não foi verificada). Especialmente como exato (o quarto parâmetro de função) é definido como falso por padrão.
Eu já descobri... O problema era com a história. Não havia histórico de barras M1 para o período que estava sendo testado.
Razão: