PositionID сохраняется в tst-файле. Возможно, имеет смысл преобразование tst->Virtual, тогда с tst можно работать в MT4-style. Пример такого преобразования.
Еще можно вычленить историю бэктеста из объектов. Там библиотека попроще в понимании.
ЗЫ Не подписан на эту ветку, поэтому могу не увидеть.
Торговые отчеты MetaTrader 5 довольно тяжелы для восприятия. По этой причине с определенного момента разработчики добавили в Терминал более понятный режим просмотра закрытых позиций. Однако, это не
Времени катастрофически не хватает на то, чтобы заниматься написание кода. С учётом подсказок от участников форума, за что им большое СПАСИБО, получился вот такой вариант скрипта:
//+------------------------------------------------------------------+//| 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));
}
//+------------------------------------------------------------------+
Владимир, всё работает
Много делений без проверки делителя на ноль. Взрывоопасно.
Много делений без проверки делителя на ноль. Взрывоопасно.
Спасибо, Артём, за подсказку! Обязательно добавлю проверку.
С уважением, Владимир.
Взрывоопасно.
Справедливо.
fxsaber если читаешь, ответь пожалуйста.
PositionID сохраняется в tst-файле. Возможно, имеет смысл преобразование tst->Virtual, тогда с tst можно работать в MT4-style. Пример такого преобразования.
Еще можно вычленить историю бэктеста из объектов. Там библиотека попроще в понимании.
ЗЫ Не подписан на эту ветку, поэтому могу не увидеть.
Обязательно надо учесть стоимость одного тика.
Всем доброго утра и хорошего настроения!
Времени катастрофически не хватает на то, чтобы заниматься написание кода. С учётом подсказок от участников форума, за что им большое СПАСИБО, получился вот такой вариант скрипта:
С уважением, Владимир.
Добрый день!
Не могли бы вы подсказать, как доработать моего робота, чтобы он мог функционировать только на одном компьютере?
(чтобы защититься от его копирования)
С уважением, Александр
Добрый день!
Не могли бы вы подсказать, как доработать моего робота, чтобы он мог функционировать только на одном компьютере?
(чтобы защититься от его копирования)
С уважением, Александр
Самый простой вариант.
Вставить в функцию OnInit две строки кода.
Вместо, Номер счёта, указать счёт того кому вы даёте советник, скомпилировать и давать только ex5 файл.
Самый простой вариант.
Вставить в функцию OnInit две строки кода.
Вместо, Номер счёта, указать счёт того кому вы даёте советник, скомпилировать и давать только ex5 файл.
Большое спасибо!
Самый простой вариант.
Вставить в функцию OnInit две строки кода.
Вместо, Номер счёта, указать счёт того кому вы даёте советник, скомпилировать и давать только ex5 файл.
клиент включает терминал и советник у него вываливается :-)
потому что есть ситуации когда ACCOUNT_LOGIN=0