Erros, bugs, perguntas - página 2226

 
Andrey Khatimlianskii:

À espera no KB ;)

A solução acabou por ser muito mais simples do que eu pensava.

Um exemplo de indicador, no qual se pode descobrir o estado do temporizador. Basta adicionar uma linha #include <Timer.mqh> e OnTimer() sob controlo.

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#include  <Timer.mqh>

int OnInit()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventSetMillisecondTimer(2201);
   return(INIT_SUCCEEDED);
  }
////////////////////////////////////////////  
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
///////////////////////////////////////////// 
void OnTimer()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventKillTimer();
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
  }

E aqui está a própria classe:

//+------------------------------------------------------------------+
//|                                                        Timer.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property link      "SemkoNV@bk.ru"  

///////////////////////////////////////////////////////////////////////////
class CTimer
  {
public:
                     CTimer() {curPer=0; On=false;}
                    ~CTimer() {}
   bool              On;
   int               curPer;
   void              AddNewProgTimerSec(int per){EventSetTimer(per); curPer=per*1000; On=true;}
   void              AddNewProgTimerMilliSec(int per) {EventSetMillisecondTimer(per); curPer=per; On=true;}
   void              KillProgTimer() {EventKillTimer(); curPer=0; On=false;}
  };
///////////////////////////////////////////////////////////////////////////
static CTimer iTimer;

#define EventSetMillisecondTimer iTimer.AddNewProgTimerMilliSec
#define EventSetTimer iTimer.AddNewProgTimerSec
#define EventKillTimer iTimer.KillProgTimer
Resultado:
2018.07.12 21:10:37.177	TestСTimer (EURUSD.m,M5)	Таймер выключен
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер включен, период таймера = 2201 миллисеккунд
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер выключен
Arquivos anexados:
Timer.mqh  3 kb
 
Nikolai Semko:

A solução era muito mais simples do que eu pensava.
...


Queria escrever sobre o nível de codificação na comunidade em geral, mas vamos omitir para evitar problemas...
Na minha opinião, uma boa maneira de resolver o problema é implementar uma classe de um único botão ou estática, que implemente o controlo do temporizador e forneça a capacidade de "subscrever" um evento temporizador,
A "assinatura" é implementada passando um ponteiro para uma função a ser chamada em certos intervalos.

 

Os resultados comerciais são diferentes do teste em todas as carraças. Pode dizer-me onde escavar - as aspas estão a descoberto ou o quê?

Todos os testes de carraças - dão sempre o mesmo resultado. Comércio real - dá-nos comércio extra no mesmo período.

O Expert Advisor não desligou durante 2 semanas. O teste também está a decorrer há 2 semanas. Já a executei 50 vezes.

 
Anton Ohmat:

Os resultados comerciais são diferentes do teste em todas as carraças. Pode dizer-me onde devo procurar - as citações estão a descoberto ou o quê?

Todos os testes de carraças - dão sempre o mesmo resultado. Comércio real - dá comércio extra no mesmo período.

O Expert Advisor não pára há 2 semanas. O teste também está a decorrer há 2 semanas. Fi-lo 50 vezes - foi sempre o mesmo

O teste é realizado usando "todas as carraças" ou "carraças reais"?

 
Para todas as carraças, o parâmetro mais alto
 
Anton Ohmat:
Para todas as carraças - parâmetro mais alto

No modo "Todas as carraças", as carraças são modeladas pelo testador a partir de barras de minutos. Aqui está um artigo sobre os diferentes modos de teste. https://www.mql5.com/ru/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
acabou de correr - obteve o mesmo resultado
 
Sergey Dzyublik:


Queria escrever sobre o nível de codificação na comunidade em geral, mas vamos omitir para evitar problemas...
Na minha opinião, uma boa maneira de resolver o problema é implementar uma classe de um só botão ou estática, que implemente o controlo do temporizador e forneça a capacidade de "subscrever" o evento do temporizador,
A "assinatura" é implementada passando um ponteiro para uma função a ser chamada em certos intervalos.

Deve ser um programador muito bom se diz coisas tão sensatas. E obrigado pelo politicamente correcto :))).
Tenho certamente uma visão de como criar um politímero útil. A vossa visão expandiu ainda mais a minha visão. Obrigado.

 
Sergey Dzyublik:

o problema é resolvido através da implementação de um singleton

Como se pode implementar um singleton na MQL5?
 
fxsaber:

Erro em FileLoad. Se dois agentes locais com a bandeira FILE_COMMON tentarem ler dados através do FileLoad, um dos agentes falha.

É possível colocar bandeiras apropriadas em FileOpen, mas não em FileLoad. Portanto, por favor permitir o acesso ao ficheiro através do FileLoad se outro FileLoad o ler.

Como é que estas bandeiras o podem ajudar? Aqui está um exemplohttps://www.mql5.com/ru/forum/1111/page1628#comment_2702870

Dois Conselheiros Especialistas tentam ler dadosatravés de FileOpen (com a bandeira FILE_SHARE_READ ). Resultado:Um dos Conselheiros Peritos cai


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы