[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 134

 
klyuchnikk:

Olá a todos.

Tenho um consultor especializado que trabalha na história (para análise). Eu defino manualmente um parâmetro nele - o tempo (horas, minutos) de fazer pedidos. Eu executo a EA dentro do intervalo de datas estabelecido, altero os horários dos pedidos e a executo novamente. Eu o faço 96 vezes (depois de 15 min) por dia. Como posso fazer um loop para que ele faça isso sozinho?

Posso ajudá-los?
 
artmedia70:
Mais uma vez eu pergunto: Quando exatamente você quer fazer o pedido? Não responda com seu código (não quero entendê-lo - temos o suficiente de nossos próprios códigos para análise), mas apenas em palavras,

por exemplo: quero colocar uma pausa acima/abaixo do MA a essa distância, desde que ... ...yada yada yada yada yada ...

Pela segunda vez, peço-lhe que me explique. Teríamos resolvido seu problema há muito tempo.


No momento o problema é o seguinte: fastMa atravessou aMa lenta... ...portanto, estamos procurando onde comprar. Então esperamos até que o preço, ou seja, Ask (já que consideramos a compra) chegue ao fastMa ( bem, acho que não haverá valor exato, precisamos de +- algum desvio, ele é renomeado i_thresholdFromMa) e assim que o preço chegar ao fastMa +- i_thresholdFromMa , o Expert Advisor deve colocar BUYSTOP em (fastMa + buyHear * pt).

O que eu inventei não funciona em um terminal e nem sempre funciona em outro. Algo está errado em geral.

A última variante da função buyHear aqui:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;
   
   if ((ND(OOP) - Ask) >= g_stopLevel)           
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
Aqui estão os parâmetros de entrada:
extern double i_thresholdFromMa = 5;                           // Отступ от МА
extern double buyHear = 10,                                    // Расстояние от МА до отложки на бай

int init()
{
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
}

Os erros podem ser vistos na captura de tela (em OrderSend() o preço é alimentado acima do grânulo vermelho, enquanto que o pedido como visto na captura de tela está abaixo....):

preço de abertura conjunta

artmedia70:
E outra coisa: se você tem fastMA e slowMA definidos como globais, por que você os passa para as funções? Todas as funções podem vê-las de qualquer forma, sem passar seus parâmetros para a função chamada.

E antes de não serem globais, foram declarados em funções específicas, não no início. Mas como não foram usados em nenhuma das funções, obtê-los sempre foi de alguma forma, digamos, um sinal de "má educação como programador" e não é confortável ter linhas de código idênticas em funções diferentes.

Artyom, você acha que eu tenho o pulso certo no início? Quero dizer, que em cada tick o valor será recebido. Não é muito caro? Como não sou um programador por educação, estas perguntas às vezes me ocorrem...

 
Tincup:

A resposta não é muito clara para mim, então deixe-me perguntar novamente. Eu entendi corretamente que ao estabelecer as condições comerciais

Você deve usar o valor MA para o número correspondente de barras para trás, mas não o valor marcado com uma seta amarela na figura.

Eu desenhei a figura como entendi sua resposta.



Na verdade, a questão está um pouco fora de questão. O assunto não é o deslocamento da curva, mas o valor a que o Expert Advisor precisa obter do buffer. Isto é o que precisa ser entendido. E NÃO há correspondência entre o viés e a obtenção do valor do buffer.
 

olá

primeira pergunta


A=verdadeiro

se o valor Imacd(Linha Principal) 15 minutos atrás é menos de 30 minutos atrás

 
Claus084:

olá

primeira pergunta

A=verdadeiro

se o valor Imacd (Linha Principal) 15 minutos atrás é menos de 30 minutos atrás

Não, melhor adiante!
 
duplo iMACD( símbolo de string, int timeeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Cálculo do indicador de Convergência/Divergência das Médias Móveis. Nos sistemas onde o OMA é chamado histograma MACD, este indicador é desenhado como duas linhas. No terminal do cliente, a convergência/divergência das médias móveis é desenhada como um histograma.
Parâmetros:
símbolo - Nome do símbolo, em cujos dados o indicador será calculado. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos períodos do gráfico. 0 significa o período da tabela atual.
fast_ema_period - Período médio para o cálculo da média móvel rápida.
período_ema_lento - Período médio de cálculo de uma média móvel lenta.
período_sinal - Período médio para o cálculo da linha de sinal.
preço_aplicado - Preço utilizado. Pode ser qualquer uma das constantes de preço.
modo - Índice da linha indicadora. Pode ser qualquer um dos valores do identificador da linha indicadora.



A questão aqui é


se eu entendi corretamente
- Índice do valor recebido do buffer de indicadores (deslocamento relativo à barra atual pelo número especificado de períodos de retorno).


número de quais períodos?
ou como obter o valor do macd da barra anterior em vez da barra atual?

int start ()
{
bool A=trueif
(iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2)) { A===true; } return; }


 

Clique nosperíodos no gráfico e veja quais são os períodos! E encontrar a barra anterior(shift = 1) para a barra atual(shift = 0) no último lugar:

double MA0 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,0);//текущий бар
double MA1 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);//предыдущий бар


Ou melhor ainda, comece a estudar o livro didático de S. Kovalev!
 
Por favor, informe, no modo de teste "preços abertos", o testador usa os preços aberto, ou o aberto, fechado, alto e baixo?
 
xant:

Olá novamente.

Por favor, informe como resolver o seguinte problema.

Há um indicador na forma compilada. O código não está disponível. O indicador reflete os níveis de preços na janela principal do gráfico. Quero usar estes níveis para minha EA, mas é impossível chamar o indicador usando a função iCustom() - os níveis exibidos são objetos gráficos. É possível ler os dados de outra forma, por exemplo, através dos nomes dos objetos e do tempo? Os nomes de todos os níveis são conhecidos (disponíveis nas configurações do indicador), os objetos são atualizados uma vez por semana.

Quero dizer desde já que não sou muito experiente em programação, ficaria muito grato por uma resposta útil.

Esta é uma boa idéia. Os objetos gráficos são reconhecidos pelo nome. Os níveis podem ser definidos por dois tipos (básicos) de objetos gráficos: OBJ_TREND (linha de tendência) e OBJ_HLINE (linha horizontal). Pelo que entendi, são necessárias duas propriedades destes objetos (preço e possivelmente tempo):

    //---- Уровень для горизонтальной линии
    double ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
    //---- Уровень для трендовой линии на текущем баре
    ld_Level = ObjectGetValueByShift (Name, Bar);
    datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Algo parecido com isto.
 
Sancho77:
Favor informar: no modo teste por "preços abertos", o testador usa apenas os preços abertos, fechados, altos e baixos?

Sim, somente preços abertos, por isso é importante considerá-lo ao analisar a EA. Por exemplo, se a cauda da vela quebra seu canal, então a EA pode não perceber, mas você pode escrever isto na lógica do programa e resolver o problema.

Razão: