O PositionID é armazenado no arquivo tst. Talvez faça sentido converter tst->Virtual, assim você poderá trabalhar com tst no estilo MT4. Aqui está um exemplo dessa conversão.
Você também pode extrair o histórico de backtest dos objetos. A biblioteca é mais fácil de entender nesse caso.
ZЫ Não estou inscrito neste tópico, portanto, talvez eu não o veja.
Торговые отчеты MetaTrader 5 довольно тяжелы для восприятия. По этой причине с определенного момента разработчики добавили в Терминал более понятный режим просмотра закрытых позиций. Однако, это не
Não tenho tempo para escrever código. Levando em conta as dicas dos membros do fórum, pelas quais sou muito OBRIGADO, obtivemos esta versão do script:
//+------------------------------------------------------------------+//| Lot_Size_Depending_On_Risk_And_SL.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property script_show_inputsinputuint Risk=6; // Размер риска (> 0, но не более 100 %)inputuint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double Lot_Size_Depending_On_Risk_And_SL()
{
//--- блок проверки входных параметров на корректностьif(Risk==0 || Risk>100 || Stop_Loss==0)
{
Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
return(0.0);
}
//--- блок определения размера лотаdouble trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
double lot=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/(Stop_Loss*trading_account_currency);
//--- блок проверки размера лота на минимум и максимум от возможногоdouble min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lot<min_volume)
lot=min_volume;
if(lot>max_volume)
lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделкиdouble step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(lot/step_volume);
if(MathAbs(ratio*step_volume-lot)>0.0000001)
lot=ratio*step_volume;
return(lot);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
}
//+------------------------------------------------------------------+
Estranho. Eu defini o máximo de 5000 barras no terminal em "Settings -> Charts" (Configurações -> Gráficos). Recarreguei o terminal e, ao passar o mouse sobre a guia com o símbolo, ele mostra 5000 barras.
Muitas divisões sem verificar se o divisor é zero. Explosivo.
Obrigado, Artyom, pela dica! Com certeza adicionarei a verificação.
Saudações, Vladimir.
Explosivo.
É justo.
fxsaber, se estiver lendo, responda.
O PositionID é armazenado no arquivo tst. Talvez faça sentido converter tst->Virtual, assim você poderá trabalhar com tst no estilo MT4. Aqui está um exemplo dessa conversão.
Você também pode extrair o histórico de backtest dos objetos. A biblioteca é mais fácil de entender nesse caso.
ZЫ Não estou inscrito neste tópico, portanto, talvez eu não o veja.
Não deixe de considerar o custo por tique.
Bom dia e bom humor a todos!
Não tenho tempo para escrever código. Levando em conta as dicas dos membros do fórum, pelas quais sou muito OBRIGADO, obtivemos esta versão do script:
Saudações, Vladimir.
Boa tarde!
Você poderia sugerir como refinar meu robô para que ele funcione somente em um computador?
(para protegê-lo de cópias)
Atenciosamente, Alexander
Boa tarde!
Você poderia me informar como posso refinar meu robô para que ele funcione apenas em um computador?
(para protegê-lo de ser copiado)
Atenciosamente, Alexander
A variante mais simples.
Insira duas linhas de código na função OnInit.
Em vez do número da conta, especifique a conta da pessoa a quem você fornecerá o Expert Advisor, compile e forneça somente o arquivo ex5.
A opção mais fácil.
Insira duas linhas de código na função OnInit.
Em vez do número da conta, especifique a conta da pessoa a quem você está fornecendo o Expert Advisor, compile e forneça apenas o arquivo ex5.
Muito obrigado!
A opção mais fácil.
Insira duas linhas de código na função OnInit.
Em vez do número da conta, especifique a conta da pessoa a quem você está fornecendo o Expert Advisor, compile e forneça apenas o arquivo ex5.
o cliente liga o terminal e o Expert Advisor trava :-))
porque há situações em que ACCOUNT_LOGIN=0
o cliente liga o terminal e o Expert Advisor trava :-)
porque há situações em que ACCOUNT_LOGIN=0
Se você precisa de um serviço confiável e de alta qualidade, é um freelancer.
Estranho. Eu defini o máximo de 5000 barras no terminal em "Settings -> Charts" (Configurações -> Gráficos). Recarreguei o terminal e, ao passar o mouse sobre a guia com o símbolo, ele mostra 5000 barras.
Mas esse código:
exibe informações sobre 6201 barras.
Isso está correto? Eu também esperava que em rates_total fosse 5000.