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

 
artem artem #:

SanAlex, sim, olhou o testador para o atual deste ano, tudo bem) Os resultados são bons, em um futuro próximo tentarei executá-lo em uma conta real

Qual é o nome do Expert Advisor? Você fez o download a partir do kodobase? Preciso ver como o autor a implementou na função

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Está nos faltando algo - para acrescentar a condição ao ontik

 
SanAlex #:

Qual é o nome do especialista? Você fez o download a partir do kodobase? Preciso ver como o autor a implementou na função

Falta algo - para acrescentar uma condição ao ontik

Sasha, o trabalho de timing não foi incluído. Apenas acrescentou algumas características para conectar durante o desenvolvimento)
 
MakarFX #:
Sasha, o trabalho de timing não foi incluído. Apenas adicionou algumas características para conectar durante o desenvolvimento)

Vou refazê-lo à minha própria maneira.

 
artem artem #:

SanAlex, sim, olhou o testador para o atual deste ano, tudo bem) Os resultados são bons, em um futuro próximo tentarei executá-lo em uma conta real

Este e o tempo vão funcionar - eu mudei a função

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

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

A função Tempo em mt4 e em mt5 funciona

Arquivos anexados:
 
MakarFX #:
Você não quer se livrar das aulas?

Recentemente descobri a respeito deles. Não sei, é uma coisa muito útil. O que você sugere? Colocando tudo em funções? Se isso resolveria o problema.

Tenho dois objetos globais (barra, db_last) de uma barra de classe, o primeiro é inicializado com parâmetros de cada nova barra (barra usual no gráfico), e o segundo salva uma barra correspondente a todas as condições. De fato, em outro objeto local da classe Ordem todos os cálculos são feitos a partir dos parâmetros db_last para abrir uma ordem. Os parâmetros db_last e bar são usados em muitos lugares, mas apenas para leitura, inicialização e atribuição ocorrem em um lugar, em OnTick(), portanto, mudanças inesperadas nos objetos não devem ser.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Recentemente descobri a respeito deles. Não sei, é uma coisa muito útil. O que você sugere? Colocando tudo em funções? Se isso resolveria o problema.

Tenho dois objetos globais (barra, db_last) de uma barra de classe, o primeiro é inicializado com parâmetros de cada nova barra (barra usual no gráfico), e o segundo salva uma barra correspondente a todas as condições. De fato, em outro objeto local da classe Ordem todos os cálculos são feitos a partir dos parâmetros db_last para abrir uma ordem. Os parâmetros db_last e bar são usados em muitos lugares, mas apenas para leitura, inicialização e atribuição acontecem em um único lugar, no OnTick (), portanto, mudanças inesperadas nos objetos não devem ocorrer.

Eu o tentaria - não custa dinheiro).

Mas há erros, especialmente erros com a normalização simples

Você pode me enviar o arquivo em uma mensagem particular? Vou dar uma olhada nisso.
 
SanAlex #:

Qual é o nome do especialista? Você fez o download a partir do kodobase? Preciso ver como o autor a implementou na função

Perdi algo - para adicionar a condição ao ontik

SanAlex, eu anexei a versão baixada nesta mensagem - tem Puria + parada móvel + nível de breakeven + comércio de cães de guarda. Eu testaria a negociação pelo relógio, mas ainda não cheguei lá)

Arquivos anexados:
 
MakarFX #:

A falta de histórico afeta as leituras do indicador no início do teste

MakarFX, também pensei nisso, portanto deve funcionar como deve

 
artem artem #:

SanAlex, anexei a versão que baixei neste post - é Puria + parada móvel + nível de breakeven + negociação de relógio. Eu testaria a negociação pelo relógio, mas ainda não cheguei lá).

Encontrei isto na kodobase https://www.mql5.com/ru/code/12654

- Perdi seu alvo, o que você queria mudar nele?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Encontrei isto na kodobase https://www.mql5.com/ru/code/12654

- Perdi seu alvo, o que você queria mudar nele?

Que adições eu queria fazer:

1. Para isso, a abertura de um negócio e a verificação de todas as condições do indicador(atravessando um rápido (5) duas lentas (75) (85) e a abertura da barra MACD na mesma direção com um rápido (5) ) foi realizada apenas ao preço de abertura de uma vela nova (o primeiro tique de cada vela de 30 minutos);
  1. Criar condições para a "zeragem" dos indicadores. Por exemplo, para um movimento rápido (5) Se for mais alto do que lento - então é um sinal para comprar. Se depois for para baixo e tocar em um deles, ou estiver entre os lentos (75) e (85)- então o sinal do indicador de movimento rápido" zeros out" por assim dizer, e permanecerá nesta posição" zero" enquanto tocar ou permanecer entre os lentos. Se, depois disso, o rápido cruzar os dois lentos para um lado(inclusive se voltar para o lado, do qual veio antes de tocar os lentos)- então será um sinal deste indicador. Com MACD a situação é semelhante- Somente o MACD=0 será considerado como "zerando"(se na primeira vela o MACD, por exemplo, abriu com 0,0043, e na segunda vela com -0,0010, significa que o MACD na segunda vela" zerou" e deu um novo sinal). Entretanto, há um tempo em que o rápido (5) e o MACD devem estar "em de igualdade" - se (5) não mudar sua posição em relação ao lento, e o MACD abriu na vela anterior na zona errada (sem entrada), e na próxima - na mesma zona do rápido, então todas as condições convergiram e uma entrada para a ordem deve ser feita. Note que tudo isso deve ser apenas sobre os preços de abertura das velas - apenas sobre este tick;
  1. E o último, para fazer o Expert Advisor esperar por 4 velas abertas consecutivamente:

    1. 1. 1º preço aberto - (5) acima (75) e (85) + barra MACD aberta acima de 0- 1 em 4 confirmações;
    2.O preço de abertura da 2ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 2 de 4 confirmações é;
    3. O preço de abertura da 3ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 3 de 4 confirmações é;
    4.Preço de abertura da 4ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 4 de 4 confirmações sim- Comércio de compra aberta sobre a mesma vela (4ª).
A mesma situação com pedidos para vender, somente nos outros indicadores de direção deve se abrir. E há um ponto importante- se, digamos, em qualquer estágio da 1ª vela à 4ª, os indicadores mudam de posição(por exemplo, na 3ª vela de abertura, a barra MACD abre abaixo de 0, ou = 0)- então tudo é reinicializado, porque os sinais não foram verificados na abertura da 4ª vela em uma fila.
Razão: