Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
Тут написано что нет. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer
Возможно, на то есть какие-то веские причины. С моей колокольни это видится совсем неправильным.
Хотя раньше было написано что да, и Position ID менялся.
Просьба разработчиков прояснить ситуацию. Когда PositionID меняется, то после пяти переворотов во вкладке Истории торгов в режиме показа "Позиции" будут показаны пять позиций.
Сейчас же (PositionID при перевороте не изменяется) всегда показывается только одна позиция. Мягко говоря, странное решение.
в режиме "по реальным тикам" Тестер формирует бары самостоятельно - по приходу тиков. По этой причине баровая история кастомного символа в Терминале и в Тестере могут быть совершенно разными.
Часто происходит ситуация, когда после компиляции советника сбрасываются настройки Тестера, если этот советник был в нем ранее выбран. Это, мягко говоря, раздражает. Т.к. после каждой компиляции нужно лезть в древо советников и выискивать свой. Если кто не знает, есть рецепт, чтобы Тестер не сбрасывался. Нужно один раз запустить советник в дебаг-режиме на истории - CTRL+F5. После этого любые перекомпиляции не будут влиять на настройки Тестера.
fxsaber: Часто происходит ситуация, когда после компиляции советника сбрасываются настройки Тестера, если этот советник был в нем ранее выбран. Это, мягко говоря, раздражает. Т.к. после каждой компиляции нужно лезть в древо советников и выискивать свой. Если кто не знает, есть рецепт, чтобы Тестер не сбрасывался. Нужно один раз запустить советник в дебаг-режиме на истории - CTRL+F5. После этого любые перекомпиляции не будут влиять на настройки Тестера.
Такая же штука, вчера обратил внимание!
вылечил так: После того, как скомпилировал новую версию (Новое имя файла) надо перегрузить терминал. - Возможно он не обновляет mqlcache
После этого тестер не сбрасывает на предыдущий файл при компиляции.
Эта проблема появлялась несколько раз ранее, потом пропала. Потом опять появилась....
З.Ы. Не вчитался в смысл Ваших слов. а Вы советовали, а не спрашивали...
Ребят есть кто? Проверьте плиз скрипт на закачку истории ...
Только у меня все намертво зависает ? Скрипт взят из справки...
//+------------------------------------------------------------------+ //| TestLoadHistory.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright"2009, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.02"#property script_show_inputs//--- input parameters //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart()
{
int all_symbols=SymbolsTotal(false); string sym_name="";
Print("Load symbols ",all_symbols);
for(int k=0;k<all_symbols;k++)
if((sym_name=SymbolName(k,false))!="")
{
SymbolSelect(sym_name,true);
Print(k," Symbol name ",sym_name);
int res=CheckLoadHistory(sym_name,PERIOD_M1,(TimeCurrent()-60*60*24*5));
switch(res)
{
case -1 : Print("Unknown symbol ",sym_name); break;
case -2 : Print("Requested bars more than max bars in chart ",sym_name); break;
case -3 : Print("Program was stopped ",sym_name); break;
case -4 : Print("Indicator shouldn't load its own data ",sym_name); break;
case -5 : Print("Load failed ",sym_name); break;
case0 : Print("Loaded OK ",sym_name); break;
case1 : Print("Loaded previously ",sym_name); break;
case2 : Print("Loaded previously and built ",sym_name); break;
default : Print("Unknown result ",sym_name);
}
datetime first_date;
SeriesInfoInteger(sym_name,PERIOD_M1,SERIES_FIRSTDATE,first_date);
int bars=Bars(sym_name,PERIOD_M1);
Print("First date ",first_date," - ",bars," bars");
}
//--- //---
}
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
{
datetime first_date=0;
datetime times[100];
//--- check symbol & period if(symbol==NULL || symbol=="") symbol=Symbol();
if(period==PERIOD_CURRENT) period=Period();
//--- check if symbol is selected in the MarketWatch if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
{
if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);
SymbolSelect(symbol,true);
}
//--- check if data is present SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
if(first_date>0 && first_date<=start_date) return(1);
//--- don't ask for load of its own data if it is an indicator if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
return(-4);
//--- second attempt if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
{
//--- there is loaded data to build timeseries if(first_date>0)
{
//--- force timeseries build CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
//--- check date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
if(first_date>0 && first_date<=start_date) return(2);
}
}
//--- max bars in chart from terminal options int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info datetime first_server_date=0;
while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
Sleep(5);
//--- fix start date for loading if(first_server_date>start_date) start_date=first_server_date;
if(first_date>0 && first_date<first_server_date)
Print("Warning: first server date ",first_server_date," for ",symbol,
" does not match to first series date ",first_date);
//--- load data step by step int fail_cnt=0;
while(!IsStopped())
{
//--- wait for timeseries build while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
Sleep(5);
//--- ask for built bars int bars=Bars(symbol,period);
if(bars>0)
{
if(bars>=max_bars) return(-2);
//--- ask for first date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
if(first_date>0 && first_date<=start_date) return(0);
}
//--- copying of next part forces data loading int copied=CopyTime(symbol,period,bars,100,times);
if(copied>0)
{
//--- check for data if(times[0]<=start_date) return(0);
if(bars+copied>=max_bars) return(-2);
fail_cnt=0;
}
else
{
//--- no more than 100 failed attempts
fail_cnt++;
if(fail_cnt>=100) return(-5);
Sleep(10);
}
}
//--- stopped return(-3);
}
//+------------------------------------------------------------------+ //| Возвращает строкое значение периода | //+------------------------------------------------------------------+ string GetPeriodName(ENUM_TIMEFRAMES period)
{
if(period==PERIOD_CURRENT) period=Period();
//--- switch(period)
{
casePERIOD_M1: return("M1");
casePERIOD_M2: return("M2");
casePERIOD_M3: return("M3");
casePERIOD_M4: return("M4");
casePERIOD_M5: return("M5");
casePERIOD_M6: return("M6");
casePERIOD_M10: return("M10");
casePERIOD_M12: return("M12");
casePERIOD_M15: return("M15");
casePERIOD_M20: return("M20");
casePERIOD_M30: return("M30");
casePERIOD_H1: return("H1");
casePERIOD_H2: return("H2");
casePERIOD_H3: return("H3");
casePERIOD_H4: return("H4");
casePERIOD_H6: return("H6");
casePERIOD_H8: return("H8");
casePERIOD_H12: return("H12");
casePERIOD_D1: return("Daily");
casePERIOD_W1: return("Weekly");
casePERIOD_MN1: return("Monthly");
}
//--- return("unknown period");
}
//+------------------------------------------------------------------+
Выставили открывающий позицию маркет-ордер и OrdersTotal увеличился на единицу.
Он исполнился и OrdersTotal уменьшился на единицу, но при этом PositionsTotal не увеличился на единицу. Т.е. существует позиция, но Терминал о ней не знает.
Например, нет ни позиций, ни ордеров - PositionsTotal = 0, OrdersTotal = 0.
Выставляете маркет-ордер. При этом PositionsTotal = 0, OrdersTotal = 1.
Маркет-ордер исполнился - OrdersTotal = 0. Но PositionsTotal = 0!
логично жеж - это переворот
Написал информацию без оценки логичности. Если же ее затрагивать, то PositionID должен был бы смениться аналогично.
Сейчас он не сменяется. Если это баг, то было бы замечательно!
Поэтому вопрос. Должна ли DEAL_ENTRY_INOUT-сделка менять PositionID на DEAL_ORDER?
Сам считаю, что должна менять. Такое поведение было бы очень удобным/правильным.Написал информацию без оценки логичности. Если же ее затрагивать, то PositionID должен был бы смениться аналогично.
Сейчас он не сменяется. Если это баг, то было бы замечательно!
Поэтому вопрос. Должна ли DEAL_ENTRY_INOUT-сделка менять PositionID на DEAL_ORDER?
Тут написано что нет. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer
Хотя раньше было написано что да, и Position ID менялся.
Тут написано что нет. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer
Возможно, на то есть какие-то веские причины. С моей колокольни это видится совсем неправильным.
Хотя раньше было написано что да, и Position ID менялся.
Просьба разработчиков прояснить ситуацию. Когда PositionID меняется, то после пяти переворотов во вкладке Истории торгов в режиме показа "Позиции" будут показаны пять позиций.
Сейчас же (PositionID при перевороте не изменяется) всегда показывается только одна позиция. Мягко говоря, странное решение.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
fxsaber, 2018.11.09 16:19
в режиме "по реальным тикам" Тестер формирует бары самостоятельно - по приходу тиков. По этой причине баровая история кастомного символа в Терминале и в Тестере могут быть совершенно разными.
Часто происходит ситуация, когда после компиляции советника сбрасываются настройки Тестера, если этот советник был в нем ранее выбран. Это, мягко говоря, раздражает. Т.к. после каждой компиляции нужно лезть в древо советников и выискивать свой. Если кто не знает, есть рецепт, чтобы Тестер не сбрасывался. Нужно один раз запустить советник в дебаг-режиме на истории - CTRL+F5. После этого любые перекомпиляции не будут влиять на настройки Тестера.
Такая же штука, вчера обратил внимание!
вылечил так: После того, как скомпилировал новую версию (Новое имя файла) надо перегрузить терминал. - Возможно он не обновляет mqlcache
После этого тестер не сбрасывает на предыдущий файл при компиляции.
Эта проблема появлялась несколько раз ранее, потом пропала. Потом опять появилась....
З.Ы. Не вчитался в смысл Ваших слов. а Вы советовали, а не спрашивали...
Ребят есть кто? Проверьте плиз скрипт на закачку истории ...
Только у меня все намертво зависает ? Скрипт взят из справки...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Непонятная ситуация при срабатывании отложенных ордеров.
fxsaber, 2018.11.26 13:37
Еще бывает такая ситуация:
Например, нет ни позиций, ни ордеров - PositionsTotal = 0, OrdersTotal = 0.
Выставляете маркет-ордер. При этом PositionsTotal = 0, OrdersTotal = 1.
Маркет-ордер исполнился - OrdersTotal = 0. Но PositionsTotal = 0!
такая, что может (не сложно воспроизвести) измениться PositionsTotal.
Например, PositionsTotal возвращает ноль прямо перед PositionsSelectBytTicket, который возвращает true.