Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1492

 
Artyom Trishkin #:

Опять не понятно для чего всё вот это нагорожено с чёрными квадратами и разными графиками, но ещё раз повторю: время в тестере эмулируется. Час тестерного времени не равен часу реального времени. Он равен часу сэмулированного тестерного времени.

Кто мешает из советника накрывать (зачем то) график чёрной занавеской при открытии нового часового бара - не понятно...

Эмуляция времени обычно не всем понятна.)))

Лучше всегда подробней, это всего лишь значит что тестер за секунду или быстрее пройдет все события часа.)))

 

Доброе время суток. 

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

Оптимизировал за последние пол года по одной валютной паре параметры, записал в эксель. Взял период за последний год, и хочу прогнать получение параметры. Как мне их запихнуть обратно в тестер или оптимизатор. 
Проверить, что пройдет, что не пройдет, записать в эксель. Может потом еще прогнать к примеру за 2 последних года.

 
Maksim Burov #:

Доброе время суток. 

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

Оптимизировал за последние пол года по одной валютной паре параметры, записал в эксель. Взял период за последний год, и хочу прогнать получение параметры. Как мне их запихнуть обратно в тестер или оптимизатор. 
Проверить, что пройдет, что не пройдет, записать в эксель. Может потом еще прогнать к примеру за 2 последних года.

Выберите период на котором хотите прогнать свои данные. А потом на вкладке полученных параметров, щёлкните на нужном правой кнопкой и выбирите одиночный тест. 
 
Roman Kutemov #:
Выберите период на котором хотите прогнать свои данные. А потом на вкладке полученных параметров, щёлкните на нужном правой кнопкой и выбирите одиночный тест. 

Спс.
А как все сделать в скопе, и не тыкать на каждый параметр?

 

Подскажите, пожалуйста, с расчётами. 


Мне нужно, чтобы тейк был в 3 раза больше стопа. У меня вроде как получается, но что-то не то)). Робот торгует на золоте и индексах, а на валюте отказывается торговать (хотя всё считает правильно). 

Сначала я устанавливаю стоп на лой свечи 1:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

После чего считаю расстояния от ASK до стопа в пунктах, и присваиваю это значение перtменной points:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

После этого рассчитываю стоп тоже в пунктах:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


Дальше у меня сделка открывается, и я к аску прибавляю ТР:

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


И в тестере все расчёты верные, в 5-значных пунктах, стоп тоже стоит на Low1, размер стопа тоже верный по 5-знаку. Но с тейком что-то не то, от улетает не на 507 пунктов, а на 5070 пунктов



 

Здравствуйте, Сергей.

При вычислении стопа вы переходите от расстояния по цене к расстоянию в пунктах. Затем, умножая на 3, у вас получается расстояние до тейка тоже в пунктах. А потом вы к цене ask прибавляете количество пунктов.

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

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

Или так

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

Здравствуйте, Сергей.


Большое спасибо! Действительно, заплутал в ценах/пунктах. Сейчас попробую))

 
Теперь всё считается и ставится верно, но только на USDJPY, XAUUSD и любом индексе. А вот на валюте типа USDCAD, EURUSD сова не торгует и шлёт ошибку 4756. Значение я посмотрел в справке, но это ничего не дало)
 
Sergey Izhutov #:
Теперь всё считается и ставится верно, но только на USDJPY, XAUUSD и любом индексе. А вот на валюте типа USDCAD, EURUSD сова не торгует и шлёт ошибку 4756. Значение я посмотрел в справке, но это ничего не дало)

Сделайте как в прошлом сообщении: приведите код, который у вас открывает позиции. Тогда, возможно, получится что-то посоветовать. Принципиальной разницы между USDJPY и USDCAD быть не должно, скорее всего имеет место какая-то банальная ошибка.

 
Yuriy Bykov #:

Сделайте как в прошлом сообщении: 

Вот код

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }