Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 484

 
Amigos, tenho mais uma questão sobre as definições do sinal.
O problema é o seguinte: quando as ordens do Provedor são fechadas, as ordens do Assinante ainda são mantidas. Aparentemente, devido à diferença na propagação. Como devo fazer negócios de um Assinante serem fechados imediatamente quando são fechados no do Provedor? Que configuração deve ser alterada?
 
Leo59:
Obrigado Alexey!!!! por 4))))

Então...encontrei o meu velho peru e cortei o que precisava dele. Não vou escrevê-lo por si), mas serve para um arranque. Acrescentei aí comentários, os nomes das variáveis são claros a partir dos nomes.

datetime date[]; // тут будем хранить данные времени баров, которые видны на экране
// если нужны другие данные баров, заводим соотв. массивы 

void DoWork(bool redrawAll = false)
{
    int visibleBars = 1, firstVisibleBars = 0;
    visibleBars = (int)ChartGetInteger(0, CHART_VISIBLE_BARS);
    firstVisibleBars = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
    
    ArrayResize(date, visibleBars + 10); // выделяем память с запасом

    // так можно узнать масштаб графика, может пригодится
    int scale = (int)ChartGetInteger(0, CHART_SCALE);
    // копируем данные времен баров 
    if (CopyTime(Symbol(), Period(), startpos, visibleBars, date) == -1)
    {
        Print("Не удалось скопировать значения времени! Код ошибки = ", GetLastError());
        return;
    }

    //--- определим шаг, если надо работать с масштабом
    int step = 1;
    switch (scale)
    {
    case 0:
        step = 12;
        break;
    case 1:
        step = 6;
        break;
    case 2:
        step = 4;
        break;
    case 3:
        step = 2;
        break;
    }
    double priceMin = ChartGetDouble(0,CHART_PRICE_MIN,0);
    double priceMax = ChartGetDouble(0,CHART_PRICE_MAX,0);

    for (int i = visibleBars - 1; i >= 0; i--)
    {
        /*
        проходимся по всем видимым барам и ищем стрелки, искать можно путями:
        1. Изначально при создании стрелок надо формировать имена стрелок с привязкой ко времени, например
        string name = "UpArrow"  + IntegerToString(TimeCurrent());
        тогда тупо ищем стрелку с таким именем и далее двигаем, куда надо
        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще
        */
    }
    
}
 
Artem Prischepa:
Meus amigos, tenho uma pergunta mais sobre a definição do sinal.
O problema é o seguinte: quando as ordens de um Provedor são fechadas, elas ainda permanecem no do Assinante. Aparentemente, devido à diferença na propagação. Como devo fazer negócios de um Assinante serem fechados imediatamente quando são fechados no do Provedor? Que configuração deve ser alterada?

O negócio também deve ser fechado quase instantaneamente. Perguntas:

  1. O terminal do subscritor está ligado neste momento?
  2. Por favor anexar o ficheiro de registo do terminal para o dia do problema.
 
Alexey Volchanskiy:

Então...encontrei o meu velho peru e cortei o que precisava dele. Não vou escrevê-lo por si), mas serve para um arranque. Acrescentei aí comentários, os nomes das variáveis são claros a partir dos nomes.

Além disso, eu deveria provavelmente colocar o número da subjanela indicadora nesta linha? Só não sei exactamente o que é necessário

ChartGetDouble(0,CHART_PRICE_MIN,0);
 
Alexey Volchanskiy:

Adenda, deve provavelmente colocar o número da subjanela indicadora nesta linha? Só não sei exactamente o que é necessário

Oooops, distraído esta manhã, não copiou o tratamento do evento gráfico no código

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    if(id == CHARTEVENT_CHART_CHANGE)
    {
        DoWork(true);
        ChartRedraw();
    }    
}
 
Alexey Volchanskiy:

Então...encontrei o meu velho peru e cortei o que precisava dele. Não vou escrevê-lo por si), mas serve para um arranque. Acrescentei aí comentários, os nomes das variáveis são claros a partir dos nomes.

Obrigado Alexey pela tua ajuda!

E onde anexar o passo, e em geral a sua funcionalidade, sobre o quê?

    //--- определим шаг, если надо работать с масштабом
    int step = 1;

E isto:

        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще

Nunca o fiz. Se puder, dê-me um exemplo de código, para que eu possa compreendê-lo, compreendê-lo e aplicá-lo.

 
Alexey Volchanskiy:

Oooops, distraído esta manhã, não copiou o tratamento do evento gráfico no código

Quem me dera ter a vossa ausência de espírito juntamente com os vossos conhecimentos))
É suficientemente fácil quando se sabe. Basta bater nas chaves, desde que tenha o desejo e os meios para o fazer.
E quando não se sabe e se está a cavar... isso é uma chatice... E se houver mais pistas, estás lixado, não tens coragem nenhuma.
Por isso, obrigado pelas dicas!!!!
 
Leo59:
Obrigado Alexey pela sua ajuda!

Onde se enrosca no campo, e a sua funcionalidade em geral, sobre o quê?

E isto:

Nunca o fiz. Se puder, dê-me um exemplo de código, para que eu o possa compreender, compreender e utilizar.

Quando comprimimos o gráfico horizontalmente (+/- teclas), ele muda de escala e por vezes os objectos gráficos podem sobrepor-se uns aos outros. Citei este código apenas para o caso de, como determinar a escala.

Não vou citar o código com haxixe - não o tenho, ocorreu-me agora. É melhor fazer a variante 1, é mais simples.

Quanto ao conhecimento - aconselho a todos os que estudam, leiam a ajuda quando quiserem, basta saltar à volta das secções, onde tudo está. Ou seja, não o abarrotar, eu era um abarrotar, de nada adiantado. Só precisa de saber, pelo menos aproximadamente, que existem sucessos e tal... pelo menos secções/sub-secções. Depois, quando surgem questões, as engrenagens girarão na sua cabeça e surgirá uma direcção de pesquisa. Em princípio, a ajuda não é perfeita, mas está bem, há muitos exemplos.

Como a língua em si é simples, não é difícil de aprender. As dificuldades surgem com o API, onde procurar o quê e como aplicar

 
Olá!

À primeira vista, a tarefa parece tão simples como três cêntimos. MAS! ....
Há uma linha de qualquer oscilador na janela indicadora, que se agita em relação a "0" com amplitude diferente.
O verdadeiro problema é:
- Na passagem "0" de baixo para cima, desenhar uma seta na borda inferior da janela indicadora,
- Na passagem "0" de cima para baixo, para desenhar uma seta perto da borda superior da janela indicadora,
- à auto-escala do gráfico oscilador na janela indicadora, as setas devem permanecer automaticamente nos seus limites da janela indicadora.
Isto é, percorrendo o gráfico para trás e para a frente através do histórico, ou alterando a sua escala horizontal, as setas devem permanecer sempre nos limites da janela indicadora automaticamente.

Por favor, não dê quaisquer dicas, "ajude-me financeiramente"))). Por favor anexar o código fonte de tal função, ou ligar a ele.

Obrigado de antemão!
 

Por favor, ajudem-me a compreender!

Preciso de encontrar o levantamento máximo em cada (deixe estar) dia (a escrita no ficheiro acontece uma vez por dia) - terminal MT4.

O levantamento máximo é a distância no gráfico desde o pico até ao levantamento actual dos fundos e o levantamento de fundos é a perda actual.

Escrevi o seguinte código

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

Mas é correcto nalguns gráficos e incorrecto noutros. Ao mesmo tempo, os gráficos são visualmente os mesmos.

Devo ter cometido um erro no código ou na lógica, mas não consigo compreender de que tipo.

Razão: