Ошибки, баги, вопросы - страница 284

 
alexvd:

А как выставляются стопы и тейки?

Вы сначала открываете позицию и только потом модифицируете ее или сразу указываете надлежащий СЛ и ТП? 

сначала открывается позиция и потом модифицируется...
 
Voodoo_King:

билд 384. похоже еще один баг нашел... при просмотре истории, ордера - не выводятся установленные уровни Stop Loss и Take Profit что называется сАвсЭм...


Выводятся при установке ордера. Отсутствуют, когда позиция закрывается сервером по стопу, что естественно, т.к. сервер не устанавливает стопы при закрытии позиции.
















































































































 

Обнаружил такую вещь. Не знаю, ошибка, или нет, но похоже на то. Следующий код:

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

выводит в журнале тестера (при депозите в 1000$):

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

Разве функция (NormalizeDouble) не должна удалить все ненулевые цифры после 7?

Думал, что решение нашел в виде: lot=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100)/100,

но тоже выскакивают подобные результаты. Как быть - насколько это критично в торговых запросах?

 

Доброго времени суток!

В тело цикла вставил функцию Comment, дабы та показывала процент состояния выполнения цикла и еще пару значений. Не сложный алгоритм в теле цикла выполнялся минут 5 (если не больше), а всего то навсего пересчитывал 32000 значений баров (Close,High,Low,Open). Я сетовал на то, что массив динамически увеличивается в процессе выполнения цикла, но это не так. После отладки алгоритма, Comment был убран - расчет стал осуществляться дай бог за секунду.

Не уж то функция Comment настолько притормаживает выполнение программ??? Откровенно удивлен.

Сиситема: Windows XP, Терминал 5.00.384.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

Доброго времени суток!

В тело цикла вставил функцию Comment, дабы та показывала процент состояния выполнения цикла и еще пару значений. Не сложный алгоритм в теле цикла выполнялся минут 5 (если не больше), а всего то навсего пересчитывал 32000 значений баров (Close,High,Low,Open). Я сетовал на то, что массив динамически увеличивается в процессе выполнения цикла, но это не так. После отладки алгоритма, Comment был убран - расчет стал осуществляться дай бог за секунду.

Не уж то функция Comment настолько притормаживает выполнение программ??? Откровенно удивлен.

Сиситема: Windows XP, Терминал 5.00.384.

Тоже замечал такой эффект.
 

Прогоняя эксперта на истории используя только цены открытия, позиции Sell открываются не по ценам открытия, а по High, и закрываются по ценам Low.

 Почему так происходит?

В эксперте сигнал для открытия  и закрытия позиции ищется используя только цены Open[0]. Используется EventSetTimer(1);

 

 

 

 
Valmars:

Выводятся при установке ордера. Отсутствуют, когда позиция закрывается сервером по стопу, что естественно, т.к. сервер не устанавливает стопы при закрытии позиции.

чего-чего :) ? куда выводятся при установке ордера ?

я говорю про отчёт "История", и не вижу ничего в колонках Stop Loss и Take Profit, хотя эти значения у позиций есть.

как понять-то по отчёту был установлен стоп или нет ? понятно, что если он сработал - это видно, а если нет ???

 

У меня - следующий вопрос.

Задача - записать в определенный файл значения Equity на этапе тестирования, стерев предыдущие значения.

Но тут происходит следующее:

1. В случае, когда  FileDelete() в OnInit() отсутствует, запись происходит в добавление к существующим.

2. Но тогда, когда  FileDelete() в OnInit() есть, несмотря на те же самые записи Equity в OnCalculatde(), результирующий файл оказывается пустым.

Почему так происходит и как этого избежать? 

Код привожу ниже:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
int OnCalculate(const int        rates_total,
                const int        prev_calculated,
                const datetime&  time[],
                const double&    open[],
                const double&    high[],
                const double&    low[],
                const double&    close[],
                const long&      tick_volume[],
                const long&      volume[],
                const int&       spread[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

чего-чего :) ? куда выводятся при установке ордера ?

я говорю про отчёт "История", и не вижу ничего в колонках Stop Loss и Take Profit, хотя эти значения у позиций есть.

как понять-то по отчёту был установлен стоп или нет ? понятно, что если он сработал - это видно, а если нет ???

Выводится на вкладку 'История/Ордера', А как Вы думаете, чему равны стоп-лосс и тэйк-профит в ордере, которым сервер закрывает позицию при срабатывании стопов ? Вы ведь рассматриваете именно параметры ордеров.в истории.
 
DV2010:

У меня - следующий вопрос.

Задача - записать в определенный файл значения Equity на этапе тестирования, стерев предыдущие значения.

Но тут происходит следующее:

1. В случае, когда  FileDelete() в OnInit() отсутствует, запись происходит в добавление к существующим.

2. Но тогда, когда  FileDelete() в OnInit() есть, несмотря на те же самые записи Equity в OnCalculatde(), результирующий файл оказывается пустым.

Почему так происходит и как этого избежать? 

Код привожу ниже:

Решение по распознаванию тестового режима придумал, правда, есть в этом некая смущающая меня эмпирика

(пробовал найти возможность программного получения времени запуска тестера, чтобы задать от него отступ в глубину истории и отсечь т.о. время реала,

но не нашел, к сожалению):

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
Но тут возникла проблема совсем другого свойства, которая состоит в том, что после изменения периода тестирования индикаторы по результатам тестирования почему-то пропадают, однако если после этого уже для нового периода сделать компиляцию, то запуск тестера их выводит.

Баг?

Причина обращения: