Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1910

 
Alexey Viktorov #:

Este poderia ser o problema? Tente apagar o recurso periodicamente

mas então você teria que criá-lo dinamicamente.

Ou seja, primeiro apague o recurso, depois recrie-o. O único problema é que eu não sei como isso funcionaria. Ou, se funcionar de alguma forma. Vou ter que tentar...

Não funcionou. ResourceCreate cria apenas um novo arquivo para fotos, para que não veja o indicador. Entendo que só é preciso limpar a memória periodicamente. Vou tentar algo com ZeroMemory

 

Olá a todos. O roteiro para definir o padrão correto em todos os gráficos acabou sendo a seguinte história.

Abri 8 gráficos, todos diferentes em n1 com um modelo de escalpe abaixo.

8 GRÁFICOS ABERTOS COM PADRÃO DE ESCALPE

Adicionei um script no gráfico mais à esquerda(AUD/USD) para traduzir todos os gráficos para d1 e um modelo a médio prazo, o código abaixo.

string tplName = "FIBOmAGIC СРЕДНЕСРОК.tpl";//ИМЯ ПОДГРУЖАЕМОГО ШАБЛОНА
void OnStart()
 {
  long prevChart = ChartFirst();
  while(prevChart >= 0)
   {
    if(ChartPeriod(prevChart) != PERIOD_D1)// ЕСЛИ ПЕРИОД ГРАФИКА НЕ Д1
      ChartSetSymbolPeriod(prevChart, ChartSymbol(prevChart), PERIOD_D1); // УСТАНАВЛИВАЕМ ПЕРИОД ГРАФИКА КАК Д1
      ChartApplyTemplate(prevChart, tplName); // И УСТАНАВЛИВАЕМ НА ГРАФИК ШАБЛОН СРЕДНЕСРОКА
    prevChart = ChartNext(prevChart);
   }
 }/******************************************************************/
/*****************************End program****************************/


Mudei o modelo de meio-termo para todos os gráficos, exceto o gráfico da esquerda, ao qual acrescentei o roteiro.

Depois coloquei o roteiro na tabela da esquerda para traduzir a tabela na n1 e o padrão de escalonamento. O código do roteiro está abaixo

+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
string tplName = "FIBOmAGIC СКАЛЬПИНГ.tpl";
void OnStart()
 {
  long prevChart = ChartFirst();
  while(prevChart >= 0 && IsStopped())
   {
    if(ChartPeriod(prevChart) != PERIOD_H1)
      ChartSetSymbolPeriod(prevChart, ChartSymbol(prevChart), PERIOD_H1);
      ChartApplyTemplate(prevChart, tplName);
    prevChart = ChartNext(prevChart);
   }
 }/******************************************************************/
/*****************************End program****************************/

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


Parece que tudo está bem. O padrão de escalpe é aplicado a todos os gráficos. Mas há um problema: se eu anexar o mesmo roteiro ao gráfico mais à esquerda duas vezes, 5 dos 8 gráficos se tornam uma ferramenta aud/usd.

APÓS DOIS USOS SUCESSIVOS DO MESMO ROTEIRO, PARTE DOS GRÁFICOS PASSAM A SER DA MESMA FERRAMENTA

Por que isso acontece e como evitá-lo, além de 2 passagens sucessivas do mesmo roteiro?

 
DanilaMactep #:

Olá a todos. O roteiro para definir o padrão correto em todos os gráficos acabou sendo a seguinte história.

Abri 8 gráficos, todos diferentes em n1 com um modelo de escalpe abaixo.

Adicionei um script no gráfico mais à esquerda(AUD/USD) para traduzir todos os gráficos para d1 e um modelo a médio prazo, o código abaixo.


Mudei o modelo de meio-termo para todos os gráficos, exceto o gráfico da esquerda, ao qual acrescentei o roteiro.

Em seguida, coloquei o roteiro no gráfico da esquerda para traduzir o gráfico no n1 e o modelo de escalpe. O código do roteiro está abaixo


Parece que tudo está bem. O padrão de escalpe é aplicado a todos os gráficos. Mas há um problema: se eu anexar o mesmo roteiro ao gráfico mais à esquerda duas vezes, 5 dos 8 gráficos se tornam uma ferramenta aud/usd.

Por que isso acontece e como evitá-lo, além de 2 passagens sucessivas do mesmo roteiro?

Tente assim

void OnStart()
 {
  long prevChart = ChartFirst();
  while(prevChart >= 0 && IsStopped())
   {
    //if(ChartPeriod(prevChart) != PERIOD_H1)
      ChartSetSymbolPeriod(prevChart, ChartSymbol(prevChart), PERIOD_H1);// или PERIOD_D1
      ChartApplyTemplate(prevChart, tplName);
    prevChart = ChartNext(prevChart);
   }
 }/******************************************************************/
/*****************************End program****************************/
 
Alexey Viktorov #:

Tente isto

esta opção não faz absolutamente nada - eu libero o roteiro no gráfico e nada acontece.
 
DanilaMactep #:
Esta opção não faz absolutamente nada - eu libero o roteiro no gráfico e nada acontece.

A declaração da variável

string tplName = "FIBOmAGIC СРЕДНЕСРОК.tpl";//ИМЯ ПОДГРУЖАЕМОГО ШАБЛОНА

foi, por acaso, excluída?

 
Alexey Viktorov #:

A declaração da variável

foi, por acaso, excluída?

Se eu o fizesse, o compilador gritaria variável não identificada. Mas agora vou tentar novamente...
 
Alexey Viktorov #:

A declaração da variável

foi, por acaso, excluída?

Eu verifiquei duas vezes. A variável não é apagada. Eu compenso e o roteiro não faz nada.
 
DanilaMactep #:
Esta opção não faz absolutamente nada - eu libero o roteiro no gráfico e nada acontece.

isso não funciona para você?

//+------------------------------------------------------------------+
//|                                           ChartApplyTemplate.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//----
sinput string Template           = "ADX";          // Имя шаблона(without '.tpl')
sinput ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Период
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long currChart, prevChart = ChartFirst();
   int i = 0, limit = 100;
   bool errTemplate;
   while(i < limit)
     {
      currChart = ChartNext(prevChart);
      if(TimeFrame != PERIOD_CURRENT)
        {
         ChartSetSymbolPeriod(prevChart, ChartSymbol(prevChart), TimeFrame);
        }
      errTemplate = ChartApplyTemplate(prevChart, Template + ".tpl");
      if(!errTemplate)
        {
         Print("Error ", ChartSymbol(prevChart), "-> ", GetLastError());
        }
      if(currChart < 0)
         break;
      Print(i, ChartSymbol(currChart), " ID =", currChart);
      prevChart = currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
 
137 Matrix #:

isso não funciona para você?

Se não estou enganado, foi aqui que tudo começou - não funcionou como eu me lembro ;-) E eu também não sei onde colocar o nome do modelo no código. Em resumo, é uma confusão...
 
DanilaMactep #:
Se não estou enganado, foi assim que começou e não funcionou como eu me lembro ;-)

Já mostrei a você - não sei por que não funciona para você - funciona para mim tanto no mt4 como no mt5.

\\\\\\\\\\\\\\\\\\\\

você também pode mudar a cor dos gráficos

//+------------------------------------------------------------------+
//|                                       CHART_COLOR_BACKGROUND.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//----
sinput color Backclr = clrWhite; // Цвет фона графика.
sinput color Foreclr = clrBlack; // Цвет осей, шкалы и строки OHLC графика.
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
//--- переменные для идентификаторов графиков
   long currChart, prevChart = ChartFirst();
   int i = 0, limit = 100;
   bool errTemplate;
   Print("ChartFirst = ", ChartSymbol(prevChart), " ID = ", prevChart);
   while(i < limit) // у нас наверняка не больше 100 открытых графиков
     {
      currChart = ChartNext(prevChart); // на основании предыдущего получим новый график
      errTemplate = ChartBackColorSet(Backclr, prevChart);
      errTemplate = ChartForeColorSet(Foreclr, prevChart);
      if(errTemplate)
        {
         Print("Error ", ChartSymbol(prevChart), "-> ", GetLastError());
        }
      if(currChart < 0)
         break;          // достигли конца списка графиков
      Print(i, ChartSymbol(currChart), " ID =", currChart);
      prevChart = currChart; // запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
     }
  }
//+------------------------------------------------------------------+
//| Функция устанавливает цвет фона графика.                         |
//+------------------------------------------------------------------+
bool ChartBackColorSet(const color clr, const long chart_ID = 0)
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- установим цвет фона графика
   if(!ChartSetInteger(chart_ID, CHART_COLOR_BACKGROUND, clr))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__ + ", Error Code = ", GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Функция устанавливает цвет осей, шкалы и строки OHLC графика.    |
//+------------------------------------------------------------------+
bool ChartForeColorSet(const color clr, const long chart_ID = 0)
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- установим цвет осей, шкалы и строки OHLC графика
   if(!ChartSetInteger(chart_ID, CHART_COLOR_FOREGROUND, clr))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__ + ", Error Code = ", GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+