[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 24

 

Já estava em funcionamento. Ele não previu o sinal de abertura por muito tempo, e o ar foi fornecido pelo mesmo timer.

Em resumo, Paul morreu.

 
Qualquer pessoa pode aconselhar: É uma pergunta trivial , mas parece que não consigo resolvê-la o dia todo. Como fazer a EA abrir uma ordem na abertura de uma vela, e se ela se fechar na mesma vela, não abrir até o aparecimento de uma nova vela. O problema aqui é que quando o sinal abre, digamos que o pedido é fechado no mesmo castiçal, então o sinal está em vigor, mas não é mais relevante porque o robô foi escrito para o preço de abertura. Lembro-me que havia uma maneira, mas não consigo lembrar-me dela.
 

A bandeira é chamada.

Quando o pedido abrir, atribua OrderIsOpened=true. Quando uma vela nova se abre - ...=falsa, e assim por diante.

 
tara:

A bandeira é chamada.

Quando o pedido abrir, atribua OrderIsOpened=true. Quando uma vela nova se abre - ...=falsa, e assim por diante.

Obrigado. E como codificar a abertura de uma nova vela?
 
kwadrad:
Obrigado. E como codificar a abertura de uma nova vela?


O que você quiser - está tudo em suas mãos. Por exemplo:

- quando o tempo muda pelo tamanho TF (o mais fácil)

- quando o "novo" preço aberto difere do "velho".

pela mesma tecnologia de "bandeira".

Seja bem-vindo.

 
kwadrad:
Obrigado. E como você codifica a abertura de uma nova vela?
Explore com um mecanismo de busca.
 
Fartarantula:

Olá querido povo mql. Aí vem meu primeiro problema de código.

É um indicador de tendência. A tarefa é um indicador de tendência com coordenadas 1ª linha = máximo do último dia e o dia anterior e 2ª linha = mínimo do último dia e o dia anterior.

Tudo bem, mas quando você muda para um período de tempo inferior, a coordenada se agarra ao início do dia, embora no nível de preço correspondente.... e o sentido da linha está completamente perdido.

Ao criar um objeto de linha de tendência, o parâmetro de data e hora é o culpado. Não consigo pensar como chegar até ele. É necessário calcular o tempo de formação do preço extrema. Parece que esta informação

Parece que esta informação está embutida no prazo de 1 minuto. Como determinar a data e a hora em que o cronograma muda para que uma tendência seja redesenhada e as coordenadas sejam anexadas às barras correspondentes aos extremos.

Infelizmente, a busca não rendeu nada sobre o assunto. Eu ficaria grato pelo conselho.

Entendo que o próprio procedimento de redação do código causa dificuldades.

Eu lhe ofereço a seguinte maneira de resolver esta tarefa:

// Ваша трендовая по High на дневном таймфрейме
datetime Time1 = iTime(Symbol(), PERIOD_D1, 1);
double   High1 = iHigh(Symbol(), PERIOD_D1, 1);
datetime Time2 = iTime(Symbol(), PERIOD_D1, 2);
double   High2 = iHigh(Symbol(), PERIOD_D1, 2);
ObjectCreate("High_Trend", OBJ_TREND, 0, Time2, High2, Time1, High1, 0, 0);

// Ищем точное время High'ев на таймфрейме PERIOD
int PERIOD = PERIOD_M5;

int BarTime1 = iBarShift(Symbol(), PERIOD, Time1);
int BarTime2 = iBarShift(Symbol(), PERIOD, Time2);
Time1 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime1, 1));
Time2 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime2, BarTime1+1));

ObjectSet("High_Trend", OBJPROP_TIME2, Time1);
ObjectSet("High_Trend", OBJPROP_TIME1, Time2);

O único problema é que se você lançar o Expert Advisor com este código no Strategy Tester e definir a variável PERIOD para PERIOD_M1, ambas as funções iBarShift retornam -1, ou seja, a função não consegue encontrar uma barra na TF M1 com o mesmo tempo na história... Não sei por que isso acontece.

Descobri o porquê! Não havia histórico de barras M1 no período testado.

 
alex12:

Preciso ver o comportamento do preço durante toda a história do instrumento por MA, mas o indicador não é desenhado quando inserido no gráfico.

Qual é o problema?

Quando compilado = 0 e 0.

A propósito - o terminal MT4 fica pendurado!

Defina os parâmetros de entrada do Histórico e Aver_Bars para um valor menor e o terminal deixará de "pendurar".

O que o faz pensar que o indicador não é desenhado quando anexado a um gráfico? Isto é o que seu indicador desenhou quando o coloquei no gráfico de hoje para EUR/USD TF M1:


D :D :D :D

 
artmedia70:
Quando este erro ocorre (divisão por zero), a EA deixa de funcionar. Procure um lugar no código onde ocorre a divisão por zero - o mais provável é que o zero seja obtido como resultado do cálculo de alguns parâmetros.
Obrigado, eu já descobri. Vou verificar isso no fim de semana.
 

Olá, caros membros do fórum.

É claro, tenho algumas perguntas de um recém-chegado. Estou tentando aprender o mql4, já que nunca desenvolvi nenhum programa antes, por isso as perguntas podem ser muito primitivas. Mas eu nunca fui capaz de fazê-las eu mesmo.

Decidi "bagunçar" com a exibição de volumes desenhando uma linha em vez de um gráfico de barras com algum processamento. O código deve fazer o seguinte sentido. A partir da segunda barra que está na mesma direção que a barra anterior (ambas as barras estão para cima), o volume é extraído da segunda barra. Como resultado, recebo uma linha quebrada na janela indicadora, que de fato é traçada da segunda barra para cima, mas não em todos os casos por algum motivo. A linha é interrompida porque outras condições de seu desenho não estão definidas de forma alguma, é uma coisa do futuro. Mas eu mesmo aqui para entender porque a linha não é traçada em cada segunda barra para cima, eu não posso. Por favor, me ajude.

Aqui está o código. Se você tiver qualquer outro comentário sobre outros bugs no código, terei prazer em ajudá-lo.

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }