Se houver 1440 pedidos por dia, deve haver um cheque no início do minuto, ou mais simplesmente na aparência da barra de minutos. E neste ponto, para abrir. Você não a tem, então a EA abre uma posição a cada tic, o que é uma condição estrita em si, de acordo com a condição em nosso símbolo na citação atual. Esta condição pode não ser cumprida, e os carrapatos não serão cumpridos. E em algum momento, um erro crítico ocorrerá.
Além disso, o tipo de execução da ordem (ordem para realizar uma negociação para criar uma posição) tudo ou nada.
Eu entendo. Obrigado pela ajuda.
Eu também achei difícil para minha EA abrir tantas encomendas. Eu tentei limitar o número de pedidos com este código
Ou seja, abrir um pedido somente às 10:00 horas. Mas o resultado é o mesmo.
2020.10.27 10:25:17.548 Core 1 272 Mb de memória utilizada incluindo 36 Mb de dados históricos, 64 Mb de dados de tick
inputint StopLoss=30; // Stop Lossinputint TakeProfit=100; // Take Profitinputdouble Lot=0.1; // Количество лотов для торговлиint A; ////+------------------------------------------------------------------+voidOnTick()
{
//Print( "====================================================", TimeCurrent() ) ;//--- Объявляем структуры, которые будут использоваться для торговлиMqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlDateTime time_now;// Будет использоваться дляTimeCurrent(time_now); if(!SymbolInfoTick(_Symbol,latest_price))
if(time_now.hour==10&&time_now.min==0)
{
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid
mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.type= ORDER_TYPE_SELL; // ордер на продажу
mrequest.type_filling = ORDER_FILLING_RETURN; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
}
return;
}
O que eu estou fazendo de errado?
Eu colori o código que adicionei e mudei
Isto é o que diz no arquivo de registro
FD 0 10:57:05.453 Processo do agente Core 1 iniciado em 127.0.0.0.1:3000
CS 0 10:57:05.453 Core 1 conectando a 127.0.0.0.1:3000
JD 0 10:57:05.953 Core 1 conectado
OD 0 10:57:05.975 Core 1 autorizado (agente build 2650)
JL 0 10:57:05.980 Testador EURUSD,M1 (Alpari-MT5-Demo): teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.10 00:00
ON 0 10:57:05.997 Core 1 sincronização comum concluída
CJ 0 10:57:06.223 Testador a qualidade da história analisada é 100%
LM 0 10:57:06.248 Core 1 MetaTester 5 iniciado em 127.0.0.1:3000
EJ 0 10:57:06.248 Core 1 inicialização concluída
LS 0 10:57:06.248 Core 1 login (build 2650)
KO 0 10:57:06.248 Core 1 4372 bytes de informação de conta carregada
LI 0 10:57:06.248 Core 1 1482 bytes de parâmetros de teste carregados
FN 0 10:57:06.248 Core 1 1724 bytes de parâmetros de entrada carregados
OK 0 10:57:06.248 Core 1 423 bytes de lista de símbolos carregados (72 símbolos)
HO 0 10:57:06.248 Core 1 arquivo de especialista adicionado: Experts\GRAAL.ex5 13680 bytes carregados
CP 0 10:57:06.248 Core 1 4077 Mb disponível, conjunto de 50 blocos para geração de carrapatos
DI 0 10:57:06.248 Core 1 calcular lucro em pips, depósito inicial 10000, alavancagem 1:100
LP 0 10:57:06.248 Core 1 inicializado com sucesso
RI 0 10:57:06.248 Core 1 15 Kb de dados totais de inicialização recebidos
IG 0 10:57:06.248 Core 1 EURUSD: símbolo a ser sincronizado
RS 0 10:57:06.248 Core 1 EURUSD: símbolo sincronizado, 3720 bytes de informações do símbolo recebido
OL 0 10:57:06.248 Core 1 EURUSD: carregar 27 bytes de dados históricos para sincronizar em 0:00:00.003
EK 0 10:57:06.248 Core 1 EURUSD: história sincronizada de 2019.01.02 a 2020.10.23
LK 0 10:57:06.248 Core 1 EURUSD,M1: cache histórico alocado para 628432 barras e contém 619175 barras de 2019.01.02 06:00 a 2020.08.31 23:59
LH 0 10:57:06.248 Core 1 EURUSD,M1: a história começa a partir de 2019.01.02 06:00
LN 0 10:57:06.248 Core 1 EURUSD,M1 (Alpari-MT5-Demo): OHLC bar states generating. OnTick execução na barra começa apenas
JM 0 10:57:06.248 Core 1 EURUSD,M1: teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.10 00:00 começou com insumos:
LS 0 10:57:06.248 Core 1 StopLoss=30
PL 0 10:57:06.248 Core 1 TakeProfit=100
FJ 0 10:57:06.248 Core 1 Lote=0,1
DP 0 10:57:06.248 Core 1 balanço final 10000.00 pips
EE 0 10:57:06.248 Core 1 EURUSD,M1: 39553 carrapatos, 10068 barras geradas. Ambiente sincronizado às 0:00:00.031. Teste aprovado em 0:00:00.247 (incluindo pré-processamento de carrapatos 0:00:00.016).
DE 0 10:57:06.248 Core 1 EURUSD,M1: tempo total desde o login até a interrupção dos testes 0:00:00.278 (incluindo 0:00:00.031 para sincronização dos dados do histórico)
NQ 0 10:57:06.248 Core 1 272 Mb de memória utilizada incluindo 36 Mb de dados históricos, 64 Mb de dados de tick
KE 0 10:57:06.248 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" escrito
Por que o tempo do servidor não é atualizado quando novos tiquetaques chegam?
No momento em que a EA começa, tudo funciona como deveria, mas depois o tempo passa, mas o novo valor do minuto atual não entra na variável.
Ou seja, o Expert Advisor trabalha dependendo do número obtido na variável int M = TimeMinute(TimeCurrent());
Na verdade, esta linha de código é da referência e não funciona.
Por exemplo, eu o inicio às 12-o tempoatual retornado pelo servidor corresponde ao tempo na variável, mas então a variável permanece às 12, embora já esteja de 15-20 minutos no relógio
O código é completamente melhor, mais precisamente onde você cria a função e em qual função (OnInit, OnTick, OnTime) obtém o valor dos minutos e chama a função de impressão. Se no OnInit ou fora dos campos de função do terminal, é assim que deve ser. Se no OnTick, ele imprimirá em cada tick e atualizará o valor com um novo minuto.
O código é completamente melhor, ou melhor, onde você cria a função e em qual função (OnInit, OnTick, OnTime) você obtém o valor dos minutos e chama a função de impressão. Se no OnInit ou fora dos campos de função do terminal, é assim que deve ser. Se no OnTick, ele imprimirá em cada tick e atualizará o valor com um novo minuto.
int M = TimeMinute(TimeCurrent());
bool TimeServer()
{
Print(M, " - Tекущее время сервера");
if((M > 55 || M == 55) && (M < 59 || M == 59))
{
return(true);
}
else
{
return(false);
}
}
Bem, aqui está o código completo. Na função OnTick() vazia é acionada logo no início pela primeira linha a ser executada.
Ele é acionado somente no momento da recompilação ou anexado ao campo de programação/apagamento/apagamento. Durante o restante do tempo, a variável M detém o valor do minuto obtido durante a primeira execução da EA.
Bem, há todo um código aqui, é tudo o que há para isso. O OnTick() vazio é acionado logo no início pela primeira linha a ser executada.
Ele é acionado somente no momento da recompilação ou da junção ao campo gráfico/deleção/ . Durante o restante do tempo, a variável M detém o valor do minuto obtido durante a primeira execução da EA.
//--------------------------------------------------------------------////--------------------------------------------------------------------int m1,m2;
voidOnTick() // Спец. функция start
{
// int M = TimeMinute(TimeCurrent());//if(m1!=M)
TimeServer();
//--------------------------------------------------------------------
m1=m2;
return; // Выход из start()
}
//--------------------------------------------------------------------bool TimeServer()
{
int M = TimeMinute(TimeCurrent());
m2=M;
if(m1!=M)
Alert (M, " - Tекущее время сервера");
Print(M, " - Tекущее время сервера");
if((M >= 55) && (M <= 59))
{
return(true);
}
else
{
return(false);
}
}
ângulo é sempre 0. Independentemente do uso de métodos de biblioteca padrão ou funções incorporadas. Ao mesmo tempo, a linha é traçada. O que está errado? Como obter o ângulo?
Boa tarde. Tentando obter o ângulo da linha de tendência a partir do ângulo. Aqui está o código:
ângulo é sempre 0. Independentemente do uso de métodos de biblioteca padrão ou funções incorporadas. Ao mesmo tempo, a linha é traçada. O que está errado? Como faço para obter o ângulo?
Você não deve ter medo da velocidade. É apenas uma condicionalidade para a conversão do tipo. Como uma variante da função de definição de ângulos:
struct PointPriceTime
{
double price;
datetime time;
PointPriceTime(double p, datetime t) { price=p; time=t; };
void Set(double p, datetime t){ price=p; time=t;};
PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
PointPriceTime() { price=0.0; time=0; };
};
double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X
{ // расстояние между x1 и x2 = N*_Point, где N - количество минутных баров во временном промежутке отрезка. staticint tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
int i=0;
while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
i++;
if(i==9)
{
Print("Время левой границы вне диапазона исторических данных");
returnDBL_MAX;
}
int bar1 = iBarShift(_Symbol,tf[i],p1.time);
int bar2 = iBarShift(_Symbol,tf[i],p2.time);
if(bar1==bar2)
return0.0;
returnatan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
}
Depois do MT5, a sensação do MT4 é simplesmente horrível. O acesso ao histórico é de alguma forma emasculado. Não estou nem mesmo falando dos carrapatos.
Se houver 1440 pedidos por dia, deve haver um cheque no início do minuto, ou mais simplesmente na aparência da barra de minutos. E neste ponto, para abrir. Você não a tem, então a EA abre uma posição a cada tic, o que é uma condição estrita em si, de acordo com a condição em nosso símbolo na citação atual. Esta condição pode não ser cumprida, e os carrapatos não serão cumpridos. E em algum momento, um erro crítico ocorrerá.
Além disso, o tipo de execução da ordem (ordem para realizar uma negociação para criar uma posição) tudo ou nada.
Eu entendo. Obrigado pela ajuda.
Eu também achei difícil para minha EA abrir tantas encomendas. Eu tentei limitar o número de pedidos com este código
Ou seja, abrir um pedido somente às 10:00 horas. Mas o resultado é o mesmo.
2020.10.27 10:25:17.548 Core 1 272 Mb de memória utilizada incluindo 36 Mb de dados históricos, 64 Mb de dados de tick
O que eu estou fazendo de errado?
Eu colori o código que adicionei e mudei
Isto é o que diz no arquivo de registro
FD 0 10:57:05.453 Processo do agente Core 1 iniciado em 127.0.0.0.1:3000
CS 0 10:57:05.453 Core 1 conectando a 127.0.0.0.1:3000
JD 0 10:57:05.953 Core 1 conectado
OD 0 10:57:05.975 Core 1 autorizado (agente build 2650)
JL 0 10:57:05.980 Testador EURUSD,M1 (Alpari-MT5-Demo): teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.10 00:00
ON 0 10:57:05.997 Core 1 sincronização comum concluída
CJ 0 10:57:06.223 Testador a qualidade da história analisada é 100%
LM 0 10:57:06.248 Core 1 MetaTester 5 iniciado em 127.0.0.1:3000
EJ 0 10:57:06.248 Core 1 inicialização concluída
LS 0 10:57:06.248 Core 1 login (build 2650)
KO 0 10:57:06.248 Core 1 4372 bytes de informação de conta carregada
LI 0 10:57:06.248 Core 1 1482 bytes de parâmetros de teste carregados
FN 0 10:57:06.248 Core 1 1724 bytes de parâmetros de entrada carregados
OK 0 10:57:06.248 Core 1 423 bytes de lista de símbolos carregados (72 símbolos)
HO 0 10:57:06.248 Core 1 arquivo de especialista adicionado: Experts\GRAAL.ex5 13680 bytes carregados
CP 0 10:57:06.248 Core 1 4077 Mb disponível, conjunto de 50 blocos para geração de carrapatos
DI 0 10:57:06.248 Core 1 calcular lucro em pips, depósito inicial 10000, alavancagem 1:100
LP 0 10:57:06.248 Core 1 inicializado com sucesso
RI 0 10:57:06.248 Core 1 15 Kb de dados totais de inicialização recebidos
DN 0 10:57:06.248 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB
IG 0 10:57:06.248 Core 1 EURUSD: símbolo a ser sincronizado
RS 0 10:57:06.248 Core 1 EURUSD: símbolo sincronizado, 3720 bytes de informações do símbolo recebido
OL 0 10:57:06.248 Core 1 EURUSD: carregar 27 bytes de dados históricos para sincronizar em 0:00:00.003
EK 0 10:57:06.248 Core 1 EURUSD: história sincronizada de 2019.01.02 a 2020.10.23
LK 0 10:57:06.248 Core 1 EURUSD,M1: cache histórico alocado para 628432 barras e contém 619175 barras de 2019.01.02 06:00 a 2020.08.31 23:59
LH 0 10:57:06.248 Core 1 EURUSD,M1: a história começa a partir de 2019.01.02 06:00
LN 0 10:57:06.248 Core 1 EURUSD,M1 (Alpari-MT5-Demo): OHLC bar states generating. OnTick execução na barra começa apenas
JM 0 10:57:06.248 Core 1 EURUSD,M1: teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.10 00:00 começou com insumos:
LS 0 10:57:06.248 Core 1 StopLoss=30
PL 0 10:57:06.248 Core 1 TakeProfit=100
FJ 0 10:57:06.248 Core 1 Lote=0,1
DP 0 10:57:06.248 Core 1 balanço final 10000.00 pips
EE 0 10:57:06.248 Core 1 EURUSD,M1: 39553 carrapatos, 10068 barras geradas. Ambiente sincronizado às 0:00:00.031. Teste aprovado em 0:00:00.247 (incluindo pré-processamento de carrapatos 0:00:00.016).
DE 0 10:57:06.248 Core 1 EURUSD,M1: tempo total desde o login até a interrupção dos testes 0:00:00.278 (incluindo 0:00:00.031 para sincronização dos dados do histórico)
NQ 0 10:57:06.248 Core 1 272 Mb de memória utilizada incluindo 36 Mb de dados históricos, 64 Mb de dados de tick
KE 0 10:57:06.248 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" escrito
OS 0 10:57:06.260 Núcleo 1 conexão fechada
Por favor, avise!
Por que o tempo do servidor não é atualizado quando novos tiquetaques chegam?
No momento em que a EA começa, tudo funciona como deveria, mas depois o tempo passa, mas o novo valor do minuto atual não entra na variável.
Ou seja, o Expert Advisor trabalha dependendo do número obtido na variável int M = TimeMinute(TimeCurrent());
Na verdade, esta linha de código é da referência e não funciona.
Por exemplo, eu o inicio às 12-o tempoatual retornado pelo servidor corresponde ao tempo na variável, mas então a variável permanece às 12, embora já esteja de 15-20 minutos no relógio
O código é completamente melhor, mais precisamente onde você cria a função e em qual função (OnInit, OnTick, OnTime) obtém o valor dos minutos e chama a função de impressão. Se no OnInit ou fora dos campos de função do terminal, é assim que deve ser. Se no OnTick, ele imprimirá em cada tick e atualizará o valor com um novo minuto.
Valeriy Yastremskiy:
O código é completamente melhor, ou melhor, onde você cria a função e em qual função (OnInit, OnTick, OnTime) você obtém o valor dos minutos e chama a função de impressão. Se no OnInit ou fora dos campos de função do terminal, é assim que deve ser. Se no OnTick, ele imprimirá em cada tick e atualizará o valor com um novo minuto.
Bem, aqui está o código completo. Na função OnTick() vazia é acionada logo no início pela primeira linha a ser executada.
Ele é acionado somente no momento da recompilação ou anexado ao campo de programação/apagamento/apagamento. Durante o restante do tempo, a variável M detém o valor do minuto obtido durante a primeira execução da EA.
Bem, há todo um código aqui, é tudo o que há para isso. O OnTick() vazio é acionado logo no início pela primeira linha a ser executada.
Ele é acionado somente no momento da recompilação ou da junção ao campo gráfico/deleção/ . Durante o restante do tempo, a variável M detém o valor do minuto obtido durante a primeira execução da EA.
Entendi, obrigado!
Eu deveria ter
colocá-lo no corpo da função, e não na frente dele, atribuindo-lhe o valor M
Entendi, obrigado!
Eu deveria ter
colocá-lo no corpo da função, em vez de atribuir o valor M antes dele.
Você pode fazer isso de diferentes maneiras. Leia as variáveis globais e locais e sua visibilidade.
Boa tarde. Tentando obter o ângulo da linha de tendência a partir do ângulo. Aqui está o código:
ângulo é sempre 0. Independentemente do uso de métodos de biblioteca padrão ou funções incorporadas. Ao mesmo tempo, a linha é traçada. O que está errado? Como obter o ângulo?
Boa tarde. Tentando obter o ângulo da linha de tendência a partir do ângulo. Aqui está o código:
ângulo é sempre 0. Independentemente do uso de métodos de biblioteca padrão ou funções incorporadas. Ao mesmo tempo, a linha é traçada. O que está errado? Como faço para obter o ângulo?
https://www.mql5.com/ru/forum/103591
Estou vendo, mas como você calcula o ângulo?
https://www.mql5.com/ru/forum/103591
Estou vendo, mas como você calcula o ângulo?
Você é um comediante.
Quem eu estou enganando?
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Qualquer pergunta de novatos sobre MQL4 e MQL5, qualquer ajuda e discussão de algoritmos e códigos
Nikolai Semko, 2020.10.26 00:34
Você não deve ter medo da velocidade. É apenas uma condicionalidade para a conversão do tipo.
Como uma variante da função de definição de ângulos:
Depois do MT5, a sensação do MT4 é simplesmente horrível. O acesso ao histórico é de alguma forma emasculado. Não estou nem mesmo falando dos carrapatos.
Você pode me dizer se esta seleção de fonte é possível no indicador?