А можно кусок кода с примером, как это делать?
вопрос не ко мне, но я свой кусок приведу, который всё равно с просторов инет выдран и применен к своей ситуации.
мне нужно было, чтобы логи писались не нагружая комп во время торговый операций, поэтому такая специфика.
в глобальных переменных
string comm="";
затем в переменную comm добавляются по ходу нужности комментарии
например в protected override void OnStart()
PHP:
lg=DateTime.Now;
comm = lg.ToString("d/M H:mm:ss:FFF") + " ========================================================================================================================================"+"\r\n";
comm = comm + lg.ToString("d/M H:mm:ss:FFF") + " start"+"\r\n";
а после Trade.Send(request);
PHP:
lg=DateTime.Now;
comm = comm + lg.ToString("d/M H:mm:ss:FFF") + " BUY от старта функции до исполнения " + delta +"\r\n";
где delta (тип TimeSpan) это разница между временем перед отправкой запроса на открытие ордера и после открытия ордера
PHP:
start_proverka_code = DateTime.Now;
....
....
Trade.Send(request);
fin = DateTime.Now;
delta = fin - start_proverka_code ;
ну и чтобы время открытия ордера было корректным, то в protected override void OnPositionOpened(Position openedPosition)
(то есть чтобы меряли не просто время запроса на открытие, которое обычно равно 1-3мс, а именно скорость открытия ордера)
start переменная фактически должна быть равна start_proverka_code переменной
PHP:
protected override void OnPositionOpened(Position openedPosition)
{
// assign the open positions attributes to the field position.
DateTime finish = DateTime.Now;
TimeSpan delta = finish - start;
double ticks = delta.TotalMilliseconds;
if (ticks>=0) Print("open order={0}",ticks);
lg=DateTime.Now;
comm = comm + lg.ToString("d/M H:mm:ss:FFF") + " open order=" + ticks.ToString("0") +"\r\n";
_position = openedPosition;
sym = _position.SymbolCode;
Print("EntryPrice={0} EntryTime={1}", _position.EntryPrice.ToString("0.00000"), _position.EntryTime.ToString("d/M H:mm:ss:FFF") );
lg=DateTime.Now;
comm = comm + lg.ToString("d/M H:mm:ss:FFF") + " EntryPrice=" + _position.EntryPrice.ToString("0.00000") + " EntryTime=" + _position.EntryTime.ToString("d/M H:mm:ss:FFF") +"\r\n";
}
ну а функцию logs(), которая занимается сбросом логов, можно вызывать в OnTick(), если comm переменная заполнена, а ордеров нет, то содержимое переменной сбросится в лог.
PHP:
// ========================================================================================================================================
// ========================================================================================================================================
void logs()
{
// comm="";
if (Account.Positions.Count==0 && comm!="")
{
if(FileWriter == null)
{
var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//getting location of user's Desktop folder
var filePath = Path.Combine(desktopFolder, (namelog+"_"+Symbol.Code +"_log.txt"));
FileWriter = File.AppendText(filePath);
FileWriter.AutoFlush = true;
}
FileWriter.WriteLine(sym);
FileWriter.WriteLine(comm);
comm="";
}
}
Последнее редактирование модератором: