Discussão sobre a implementação dos conselheiros. - página 8

 
altec3:

Boa tarde!

Estou tentando escrever uma função que determina o lucro para o dia atual:

Você pode me dizer como na função

Especificar o período a partir do dia atual. É claro que fim do período até_data=TimeCurrent(), como especificar corretamente o início do período desde_data, de modo que comece a partir de 00h:00m:00c do dia atual?

Escolha a gosto:

datetime  iTime(
   const string        symbol,          // символ
   ENUM_TIMEFRAMES     timeframe,       // период PERIOD_D1
   int                 shift            // сдвиг
   );
int  CopyTime(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период PERIOD_D1
   int              start_pos,       // откуда начнем 0
   int              count,           // сколько копируем 1
   datetime         time_array[]     // массив для копирования времени открытия. Объявить заранее

Ou o máximo, o máximo. O que já foi sugerido.

 
Vladimir Karputov:

Assumindo que houve pelo menos um tick hoje, o algoritmo é o seguinte: a hora atual é enviada para a estruturaMqlDateTime. Em seguida, ajuste as horas, minutos e segundos para zero nesta estrutura. Resta converter a estrutura editada em um tempo:


Resultado:

Obrigado! Outra pergunta, se eu acrescentar uma função

//+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect(TimeCurrent()-PeriodSeconds(PERIOD_D1),TimeCurrent());
   uint     total       =HistoryDealsTotal();   // количество сделок в истории
   ulong    ticket      =0;                     // тикет сделки в истории
   long     type        =0;                     // тип сделки
   double   profit      =0.0;                   // финансовый результат сделки
   double   commission  =0.0;                   // коммиссия по сделке
   double   DayProfit   =0.0;                   // прибыль за текущие сутки
//--- for all deals
   for(uint i=0; i<total; i++)
     {
      if((ticket=HistoryDealGetTicket(i))>0)       //--- если имеются сделки, то...
        {
         profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         if(HistoryDealGetInteger(ticket,DEAL_TYPE)!=DEAL_TYPE_BALANCE)
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

para o Expert Advisor, como será atualizado o período para o qual as negociações são analisadas? Por exemplo, se meu consultor especializado trabalhar por alguns dias, então quando chegar o dia seguinte, o período será atualizado?

Implementação da função acima no Expert Advisor:

void OnTick()
  {
   if(Day_Profit()<ProfitMax)
     {
      ExtExpert.OnTick();
     }
   return;
  }
 
altec3:

Obrigado! Outra pergunta, se eu acrescentar a função:

ao consultor especializado, como será atualizado o período para o qual as negociações são analisadas? Por exemplo, se o Expert Advisor trabalhar por alguns dias, então com o dia seguinte o período será atualizado?

A implementação da função acima no Expert Advisor:

A hora deve ser definida desde o início de um dia até a hora atual + dia ou + três dias.

Você já sabe como determinar o início do dia.

 

Boa tarde!

Há a necessidade de determinar o spread para um símbolo antes de fazer um pedido sobre ele. A biblioteca MQL5 padrão inclui a classe CSymbolInfo. Foi aí que comecei a me perguntar, qual a melhor maneira de implementar esta verificação - via CSymbolInfo ou usando uma função? Por favor, especialista, me aconselhe sobre o que devo fazer! Se esta questão já foi levantada, ficarei muito grato se você me orientar na direção certa.

 

Boa tarde!

Estou precisando de alguns conselhos. Como as barras são consideradas se um EA contém módulos de sinal de diferentes períodos de tempo?

Por exemplo, tenho um Expert Advisor simples que tem dois módulos de sinal baseados em estocástico (quando a linha principal está acima da linha de sinal em 0 e 1 barra - COMPRAR, abaixo da linha de sinal em 0 e 1 barra - VENDER) - um em H1 e o outro em M15. Os pesos de ambos os módulos são os mesmos e no Expert Advisor o limiar para abertura de um negócio é estabelecido de tal forma que os sinais de ambos os módulos devem ser considerados simultaneamente. O Expert Advisor trabalha no gráfico no cronograma H1. Se você olhar a captura de tela de H1, tudo fica claro - a linha principal é mais alta do que a linha de sinal na última e penúltima barras e é por isso que compramos. Mas no gráfico da M15 não consigo entender qual barra deve ser considerada como 0 e qual como 1? O negócio está aberto - significa que na M15 a condição para o negócio também deve ser cumprida.

Arquivos anexados:
H1.png  43 kb
M15.png  21 kb
 
altec3:

Por exemplo, existe um Expert Advisor simples que inclui dois módulos de sinal baseados em estocástico (quando a linha principal está acima da linha de sinal em 0 e 1 barra - COMPRAR, abaixo da linha de sinal em 0 e 1 barra - VENDER) - um para H1, o outro para M15.

Barra zero é o mal! O indicador no histórico que você vê calculado como se em 1 barra - fechado (bem, simplificado, se não levar em conta a possibilidade de re-cruzamento). Assim, a estratégia é construída sobre uma barra fechada e, no testador, o indicador da maior TF em MT4 mostrará o resultado de até mesmo uma barra zero, como uma barra fechada - ou seja, do futuro.
O resultado é uma decepção: uma coisa é diferente no testador, enquanto o oposto é verdadeiro em tempo real.
Acredite em minha palavra - perdi metade da minha vida enquanto tentava descobrir onde estava o erro do sistema. Para um mapeamento correto dos indicadores de TFs mais altos em uma abordagem especial mais baixa é necessário. Normalmente com Pushka, por exemplo, tudo é simples - multiplique o período por TF e a ordem, mas se houver cálculos não lineares, então só há imitação de cálculo em 0 barra.
Eu estava quebrando o RSI por um ano para que ele exibisse corretamente a maior TF no gráfico.
Não insisto, recomendo como mínimo o uso de sinais de barras fechadas, especialmente de barras mais altas em relação ao cronograma atual, e também verificar especialmente os indicadores personalizados para uma nova classificação.
 
altec3:

Boa tarde!

Estou precisando de alguns conselhos. Como as barras são consideradas se um EA contém módulos de sinal de diferentes períodos de tempo?

Por exemplo, tenho um Expert Advisor simples que tem dois módulos de sinal baseados em estocástico (quando a linha principal está acima da linha de sinal em 0 e 1 barra - COMPRAR, abaixo da linha de sinal em 0 e 1 barra - VENDER) - um em H1 e o outro em M15. Os pesos de ambos os módulos são os mesmos e no Expert Advisor o limiar para abertura de um negócio é estabelecido de tal forma que os sinais de ambos os módulos devem ser considerados simultaneamente. O Expert Advisor trabalha no gráfico no cronograma H1. Se você olhar a captura de tela de H1, tudo fica claro - a linha principal é mais alta do que a linha de sinal na última e penúltima barras e é por isso que compramos. Mas no gráfico da M15 não consigo entender qual barra deve ser considerada como 0 e qual como 1? O negócio está aberto, o que significa que na M15 a condição para o negócio também deve ser cumprida.

Na história você vê barras já fechadas e a barra zero não é um mal, mas é móvel e temos que levá-la em conta, pois é formada dependendo do preço atual e mudanças estocásticas de direção são possíveis quando os preços saltam, por issoé mais sensível, pode fechar, por exemplo.

Tente adicionar mais uma barra apenas para abrir 0 &&& 1 && 2. talvez as ameixas sejam reduzidas.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Razão: