[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 447

 
Yulia:
Talvez eu tenha explicado algo errado, você só precisa marcar a primeira vela no m1 m5 m15 m30 h1 h4, que começa às 16:00, horário de Moscou, e as marcas indicadoras (bem, por exemplo, no m15 quatro velas).

Ajudar e fazer são coisas ligeiramente diferentes. Você não concorda?
 
Vinin:

Você não tem que definir o tamanho da matriz?


Sim, eu realmente esqueci, estou ficando atolado. Agora a matriz está cheia, mas as linhas ainda não são exibidas. As arrays estão ligadas a amortecedores

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

void init()
        {
        SetIndexBuffer(0, HighMass);
        SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);
        SetIndexBuffer(1, LowMass);
        SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
        }
 
sss2019:


Sim, de fato, eu esqueci, já estou exausto. Agora a matriz está cheia, mas as linhas ainda não aparecem. As arrays estão ligadas a amortecedores


Você deveria ter me dado o código completo. Você não quer adivinhar o que é claro para você.
 
Vinin:

Ajudar e fazer são coisas ligeiramente diferentes. Você não concorda?

Concordo plenamente com você, pedi ajuda, tenho andado bisbilhotando por quinze dias e nenhum resultado, então sua opção também não me convém, bem, muito obrigado, vou descobrir por conta própria.
 

Boa tarde... Pergunta sobre a função do ArrayGetAsSeries. A fim de entender como funciona o ArrayGetAsSeries escreveu o seguinte roteiro:

//+------------------------------------------------------------------------------------------+
//|                                                                ArrayGetAsSeries_плюс.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                           //функция start
  {                                                   //начало start
   double Timestart=GetTickCount();                   //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   double array1[];                                   //объявляем массив-приемник (массив, куда будут скопированы данные)
   int element=ArrayCopy(array1,Open,0,0,WHOLE_ARRAY);//копируем данные по ценам открытия в пользовательский массив (начиная с нулевого бара)
   int size=ArraySize(array1);                        //устанавливаем количество элементов массива array1
   for(int i=0;i<=4;i++)                              //цикл по просмотру скопированных значений (первых пяти)
       {                                              //начало for
        Alert("Значение цены открытия бара № ",i," равно ",array1[i],
              "\nВремя цены открытия бара № ",i,": ",TimeToStr(iTime(NULL,0,i),TIME_DATE|TIME_MINUTES));//cообщение на экран
       }                                                                 //конец for
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopy(array1[],Open,0,0,WHOLE_ARRAY) вернула: ",element,
           "\nФункция ArraySize(array1) вернула: ",size,
           "\nФункция ArrayGetAsSeries(array1) вернула: ",ArrayGetAsSeries(array1),
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000),
           " секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать 
           //сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

O script copiou um array de preços abertos de barras para um array personalizado. Obviamente: este array personalizado é organizado como um array de séries temporais porque os elementos do array são indexados do último ao primeiro (isto é demonstrado na captura de tela onde a função Alerta produziu o tempo aberto e o preço da quarta barra. Esta barra é marcada com uma linha vertical no gráfico; também podemos ver o preço aberto desta barra e na janela de propriedades podemos ver que o tempo da barra é o mesmo que o exibido pela funçãoAlerta). Mas a função ArrayGetAsSeries retorna 0, o que significa: a matriz do usuário NÃO está organizada como uma matriz de timeseries (canto superior esquerdo da captura de tela).

Pergunta: por que a função ArrayGetAsSeries retornou 0, mesmo que a matriz do usuário esteja organizada como uma matriz de timeseries?

P.S. A fim de não desorganizar o fórum, obrigado antecipadamente pela resposta


 
7777877:
P: Por que a função ArrayGetAsSeries retornou 0, mesmo que a matriz do usuário esteja organizada como uma matriz de timeseries?
Só porque você copiou os dados em alguma ordem não significa que a matriz está organizada como uma série cronológica
 
ilunga:
Só porque você copiou os dados em alguma ordem, não significa que a matriz está organizada como uma série cronológica

Mas a questão é que os valores do preço de abertura, que são reproduzidos no for loop a partir de uma barra já copiada, são indexados do último para o primeiro. Mas, tanto quanto sei, isso significa (ou seja, indexação do último ao primeiro) que a matriz é organizada como uma série cronológica?

P.S. Obrigado pela resposta à minha pergunta anterior sobre as funções FileIsEnding e FileIsLineEnding

 
7777877:

Mas a questão é que os valores do preço de abertura, que são reproduzidos no for loop a partir de uma barra já copiada, são indexados do último para o primeiro. Mas, tanto quanto sei, isso significa (ou seja, indexação do último ao primeiro) que a matriz está organizada como uma série cronológica?

P.S. Obrigado pela resposta à minha pergunta anterior sobre as funções FileIsEnding e FileIsLineEnding

Não, isso significa apenas que os dados corresponderam a um pedaço de história.

Você poderia tê-lo digitado manualmente, por exemplo. Ou escrito a partir de um arquivo de texto. Ou recebeu-o no cálculo.


Afinal, mesmo tendo inserido alguns dados condicionais "1,25 1,16 1,73 1,35" lá podemos chegar à história de alguma moeda há muitos anos. Mas isso não significa que criamos uma série cronológica

 

Peço desculpas por duplicar uma pergunta, mas não posso fazer os seguintes exemplos até que eu consiga resolver isso.

Por favor, ajude-me a descobrir.

Escrevi um script simples para abrir um pedido (do tutorial MQL4).

int start()                                  // Спец. функция start()
  {                                          // Открытие BUY
   OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
   Alert (GetLastError());
   return;                                   // Выход из start()
  }

Codifiquei-o para instrumentos de 4 dígitos.

Tenho uma conta em uma empresa que tem 5 dígitos após o ponto.

Por favor, informe como corrigir o código para 5 dígitos e por que o erro 4109 (negociação não permitida) é exibido quando o script é executado?


 
Pacman:

Peço desculpas por duplicar uma pergunta, mas não posso fazer os seguintes exemplos até que eu consiga resolver isso.

Por favor, ajude-me a descobrir.

Escrevi um script simples para abrir um pedido (do tutorial MQL4).

Eu o codifiquei para instrumentos de 4 dígitos.

Tenho uma conta em uma empresa que tem 5 dígitos após o ponto.

Você pode modificar o código para 5 dígitos e por que o erro 4109 (negociação não permitida) aparece ao executar o script?

int start()                                  // Спец. функция start()
  {                                          // Открытие BUY
   OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-150*Point,Bid+150*Point);
   Alert (GetLastError());
   return;                                   // Выход из start()
  }

Exceto que não precisa funcionar em absoluto. Você precisa verificar a validade das paradas e tamanhos por sua empresa de corretagem

ERR_TRADE_NOT_ALLOWED 4109 O comércio não é permitido. Você precisa habilitar a opção "Permitir o comércio com a EA" nas propriedades da EA.