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

 
Stanislav Korotky #:

Присвоить можно, но будет копирование объекта. Тут я упустил, что виртуализация перестанет работать.

Для узко специализированных вещей можно поделку по мотивам std::variant (реализация мелгомягких, если с gcc не путаю, через union) изобразить. В общем же виде, до появления variadic templates and move semantic, то есть никогда, даже пробовать не стоит, хотя, если есть любовь к рукоблудию…
 
Vladimir Simakov #:
Для узко специализированных вещей можно поделку по мотивам std::variant (реализация мелгомягких, если с gcc не путаю, через union) изобразить. В общем же виде, до появления variadic templates and move semantic, то есть никогда, даже пробовать не стоит, хотя, если есть любовь к рукоблудию…

Вот же работающее преобразование. Видится, что проще допилить язык.

 

Есть торговый эксперт. Нужно, чтобы он выводил в режиме тестора на графике стрелочки на покупку или продажу. При включенном флажке «визуальный режиме» стрелочки появляются. При отключенном флажке "визуальный режим" в тестере стрелочки не появляются.

Как сделать, чтобы стрелочки появлялись в тестере при отключенном флажке «визуальный режим»?

P.S. Заглушка на открытие и закрытие ордера сделана, чтобы появлялся график в режиме тестирования. Собственно весь эксперт сделан для того, чтобы визуально оценивать на графике сигналы. Индикатор не прокатывает, т.к. тут использую таймфрейм отличный от текущего.


#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;
CPositionInfo info;

int Handle_h4_MAFast;
int Handle_h4_MASlow;

int Handle_Current_MAFast;
int Handle_Current_MASlow;

bool TradePlug;
// Прочие общие переменные


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {

Handle_h4_MAFast = iMA(_Symbol,PERIOD_H4,5,0,MODE_EMA,PRICE_CLOSE);
Handle_h4_MASlow = iMA(_Symbol,PERIOD_H4,10,0,MODE_EMA,PRICE_CLOSE);

Handle_Current_MAFast = iMA(_Symbol,PERIOD_CURRENT,5,0,MODE_EMA,PRICE_CLOSE);
Handle_Current_MASlow= iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_EMA,PRICE_CLOSE);


return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {

   
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {

//TradePlug = true;
if (!TradePlug) {
   TradePlugFunction();
   TradePlug = true;
   }

int TradeSignal = 0; //  0 - нет сигнала
                     //  1 - покупка
                     // -1 - продажа

// ============== тренд по ТФ H4
double h4_MAFast_Array[];
ArraySetAsSeries(h4_MAFast_Array,true);
CopyBuffer(Handle_h4_MAFast,0,0,3,h4_MAFast_Array);

double h4_MASlow_Array[];
ArraySetAsSeries(h4_MASlow_Array,true);
CopyBuffer(Handle_h4_MASlow,0,0,3,h4_MASlow_Array);

if (h4_MAFast_Array[1] > h4_MASlow_Array[1]) TradeSignal = 1;
else if (h4_MAFast_Array[1] < h4_MASlow_Array[1]) TradeSignal = -1;


// ============== ФИЛЬТР 1. тренд по текущему ТФ

double Current_MAFast_Array[];
ArraySetAsSeries(Current_MAFast_Array,true);
CopyBuffer(Handle_Current_MAFast,0,0,3,Current_MAFast_Array);

double Current_MASlow_Array[];
ArraySetAsSeries(Current_MASlow_Array,true);
CopyBuffer(Handle_Current_MASlow,0,0,3,Current_MASlow_Array);

if (TradeSignal == 1) {
   TradeSignal = 0;
   if (Current_MAFast_Array[1] > Current_MASlow_Array[1]) TradeSignal = 1;
   }
   
else if (TradeSignal == -1) {
   TradeSignal = 0;
   if (Current_MAFast_Array[1] < Current_MASlow_Array[1]) TradeSignal = -1;
   }
 

int BarsTotal=Bars(Symbol(),PERIOD_CURRENT); // Подпись к картинке
if (TradeSignal == 1) ObjectCreate(0,(string)BarsTotal,OBJ_ARROW_BUY,0,TimeCurrent(),SymbolInfoDouble(_Symbol,SYMBOL_ASK));
else if (TradeSignal == -1) ObjectCreate(0,(string)BarsTotal,OBJ_ARROW_SELL,0,TimeCurrent(),SymbolInfoDouble(_Symbol,SYMBOL_BID));

        
} //+------------------------------------------------------------------+


void TradePlugFunction () { // Ctrade // CPositionInfo info;   
   trade.Buy(0.1,_Symbol,0,0,0,"");
   trade.PositionClose(_Symbol,100000000);
   }
 
taramortom #:

Есть торговый эксперт. Нужно, чтобы он выводил в режиме тестора на графике стрелочки на покупку или продажу. При включенном флажке «визуальный режиме» стрелочки появляются. При отключенном флажке "визуальный режим" в тестере стрелочки не появляются.

Как сделать, чтобы стрелочки появлялись в тестере при отключенном флажке «визуальный режим»?

Наверное, никак нельзя. Хотите стрелочки - включайте "визуальный режим". Хотите более быстрое тестирование, пожертвовав любыми взаимодействиями советника с объектами на графике, - выключаете "визуальный режим". Выбор за вами.

Возможно, вам стоит рассмотреть возможность переделки и запуска советника не в режиме тестирования, а в обычном, то есть через перетаскивание на график. В настройках советника вы можете добавить параметр необходимой глубины истории. При запуске советник в OnInit (или OnStart, если сделать его как скрипт) будет проходить по истории на заданную глубину, рассчитывать необходимые значения по историческим ценам и в нужные моменты времени расставлять стрелочки на графике. Таким образом вы сразу после запуска сможете увидеть все расставленные стрелочки без необходимости запускать визуальное тестирование.

Но это потребует дополнительных усилий. Проще, как мне кажется, запускать уже имеющийся готовый советник в режиме визуального тестирования, а чтобы сократить время ожидания окончания прохода, можно нажать на кнопку "Пропустить до", указав текущую дату. После завершения прохода на графике визуального тестирования вы сможете увидеть все добавленные советником стрелочки.

 
taramortom #:
Как сделать, чтобы стрелочки появлялись в тестере при отключенном флажке «визуальный режим»?

Сделать индикатор визуализирующий сделки, а из советника обращаться к нему. В этом случае по окончании тестирования откроется окно графика с индикатором, который отобразит сделки.
Как-то так.
 

Привет! 

Столкнулся с проблемой, что после обновления терминала на билды, начиная с 4435 и старше (включая текущий 4472) в отладчике не обновляются значения переменных в окне Watch. Например, в цикле

  for(int i=0;i<ArraySize(rates);i++) 
    AddBar(rates[i]);

на каждой итерации в окне Watch значение "i" всегда остается 0. Тоже самое с другими переменными.

На билде 4424 все работает нормально.


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

Теперь еще на 4424 откатиться не могу, потому что не сохранил ее.


Может есть какие-то способы починить?

 
Denis Kislicyn #:

Привет! 

Столкнулся с проблемой, что после обновления терминала на билды, начиная с 4435 и старше (включая текущий 4472) в отладчике не обновляются значения переменных в окне Watch. Например, в цикле

на каждой итерации в окне Watch значение "i" всегда остается 0. Тоже самое с другими переменными.

На билде 4424 все работает нормально.


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

Теперь еще на 4424 откатиться не могу, потому что не сохранил ее.


Может есть какие-то способы починить?

Это уже давно и несколько раз было об этом сказано

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Robert Sadamon, 2024.07.20 08:56

Спасибо, что проверили. Это не я решил, что в коде ошибка. В режиме отладки, я вижу что тикет берется с "потолка". Соответственно до расчетов профита дело не доходит. Терминал у меня глючит получается? Или компилятор?

вот в отладке прошли строку получения тикета. Выдал не понятно что?! По истории смотрю закрыто было всего не более 20 сделок.

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


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Alexey Viktorov, 2024.07.24 13:56

Очевидно, что отладчик поломали совсем.

Этот цикл

  int i, c, l;
  for(i=2; i < rates_total; i++)
   {
    c=i-1;
    l=i-2;
    if(i == 5)
      printf("%d %d %d", l, c, i);
    DebugBreak();
   }

в режиме отладки всегда показывает, что i всегда 2; с всегда 0 и l всегда 0;

Только когда выполнено условие if(i == 5) печатает правильные значения, но в дебагере по прежнему никаких изменений.

Как быстро человек привыкает к хорошему и как болезненно от этого отвыкать. Что случилось с командой MQ???


 
Alexey Viktorov #:

Это уже давно и несколько раз было об этом сказано



Да отладчик поломали. 
Вчера потерял кучу времени, пока не понял с помощью распринтовки, что в отладчике в переменных показываются отфонарные значения. Реально принтуется 0, а в отладчике, например,  235642667. Жесть!
 
Alexey Viktorov #:

Это уже давно и несколько раз было об этом сказано

А у MQ есть какой-то багтрекер? Потому что баг старый и критичный, и не исправляется.
 
Denis Kislicyn #:
А у MQ есть какой-то багтрекер? Потому что баг старый и критичный, и не исправляется.

Господин Sergey Golubev сказал, писать о багах во всех темах новой версии терминала.

Если тема начинается так - "Новая версия платформы MetaTrader 5 build..."  вот в ней и писайте.

Sergey Golubev
Sergey Golubev
  • www.mql5.com
Профиль трейдера