Ошибки, баги, вопросы - страница 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);
   }   
Но тут возникла проблема совсем другого свойства, которая состоит в том, что после изменения периода тестирования индикаторы по результатам тестирования почему-то пропадают, однако если после этого уже для нового периода сделать компиляцию, то запуск тестера их выводит.

Баг?