Новая версия MetaTrader 4 Client Terminal build 432 - страница 15

 

И все таки проблема с модификацией sell (12 стр) не найдена. Разработчики помогите найти в чем проблема! в моем коде или все таки причина в вашем билде. Сам уже запарился искать, и честно не вижу ошибки (плюс ко всему раньше все работало без проблем)

Проблема возникает в разделе "Расчет и проведение частичного закрытия". Если отключить блок, то есть PartClose=false, то все работает нормально.

//------ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (часть) --------------------------------------
extern int    StopLoss=300;               // Stop-Loss
extern int    TakeProfit=1200;            // Тake-Profit
extern bool   PartClose=true;            // Вкл/выкл частичного закрытия
extern int    Rast=450;                   // Расстояние частичного закрытия от цены открытия
extern double PercentClose=50;            // Процент частичного закрытия
extern int    Slippage=30;


int      New_bar;                         // Наличие нового бара 0 или 1(истина)
string   Symb;                            // Название инструмента


int start()
  {
   int    Tip=-1, Ticket, tick, Stop, KS, OstLoss, K1, K2, LotsDigit;
   double Lot, Price, SL, TP, NSL, StepSize, Mod, stopLoss, takeProfit, LotPC;
   datetime prov, metka, time2, prov2, metka2, TimeO;
   bool PClose;

//---Учет ордеров и модификация -------------------------------------------------------
   Symb=Symbol();  
   for(int i=1; i<=OrdersTotal(); i++) 
     {
      if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true) 
        {
         RefreshRates();
         int RealSL=MarketInfo(Symb,MODE_STOPLEVEL);
         if (StopLoss<RealSL) StopLoss=RealSL;
         if (TakeProfit<RealSL) TakeProfit=RealSL;
         int TS=LevelNoLoss;
         if (TS<RealSL) TS=RealSL;
         if (OrderSymbol()!=Symb)continue;
         Ticket=OrderTicket();
         Tip   =OrderType();
         Price =OrderOpenPrice();
         SL    =OrderStopLoss();
         TP    =OrderTakeProfit();
         Lot   =OrderLots();
         TimeO =OrderOpenTime();

       //--- Расчет и проведение частичного закрытия ------------------------------------------------------------
         double LotsStep=NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP),2);
         if (PartClose==true)
            {
             PClose=true;
             int total=OrdersHistoryTotal();                                  //определяется количество ордеров в истории
             for (int c=total-1; c>=0; c--)                                   //цикл перебора ордеров
               {
               OrderSelect(c, SELECT_BY_POS, MODE_HISTORY);                   //выбор ордеров по позиции
               if (OrderSymbol()==Symbol())                                   //фильтруется
                  {
                  datetime TimePC=OrderOpenTime();
                  if (TimePC==TimeO)                                          //выбирается по времени частично закрытый ордер
                  {PClose=false; break;}                                      //запрещается частичное закрытие и выход из цикла for
                  }    
               } 
             if (PClose==true)
               {
                double LotsMin=NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT),2);
                double LotsMax=NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT),2);
                if (LotsStep==0.01) LotsDigit=2; else LotsDigit=1;
                LotPC=Lot-NormalizeDouble(Lot*PercentClose/100,LotsDigit);
                if (LotPC>LotsMax) LotPC=LotsMax;
                if (LotPC<LotsMin) LotPC=LotsMin;
                RefreshRates();
                if (Tip==0 && Bid-Price>=Rast*Point) OrderClose(Ticket,LotPC,Bid,Slippage);
                if (Tip==1 && Price-Ask>=Rast*Point) OrderClose(Ticket,LotPC,Ask,Slippage);
               }
            }

//---раздел модификации---
         if (SL==0 && Tip==1)
            {
            stopLoss=Price+StopLoss*Point;               // Вычисление SL откр.
            takeProfit=Price-TakeProfit*Point;             // Вычисление TP откр.
            OrderModify(Ticket,Price,stopLoss,takeProfit,0);
            }
// далее идут различные функции.....
 
Mislaid:
Я не понимаю. Ну, почему, программисты должны заботиться о нормализации цен, лотов. К тому же, если это неформализованное требование. Почему столько лет это не решается со стороны платформы?

Это, чтобы ларчик сходу не открывался... :-) Спасибо скажите, что объёмы выставляемых Вами контрактов - автоматом нормализуются...

 

Доброе время суток! Не сходятся показания в отчете.

Максимальная серия прибыльных и убыточных сделок в отчете 8 прибыльных и 36 убыточных, отчет с реала

А скрипт показывает другой результат

Скрипт прилагаю, пробовал разные варианты не сходится с вашим отчетом, в чем может быть проблема

Добавлю средний непрерывный выигрыш-проигрыш последняя строка в отчете 2 к 3

У меня другой результат, скрипт прилагаю Test-orders2


P.S/ История ордеров вся загружена, проверялось несколько раз, количество сделок совпадает. А вот максимальная непрерывная прибыль работает правильно, по крайней мере в моих отчетах, может я что то неправильно делаю. Пробовал и на втором счете результат такой же не совпадение. Еще пробовал создал искусственный массив с данными там все работает правильно.

Файлы:
 
Renat:

Все использует.

Но не надо это делать на границе апгрейда с непонятно какого билда. Не забывайте про разницу версий, большой объем изменений и постоянно добавляемых проверок в новых билдах.

Скачал и установил МТ4 версии 432, никаких старых версий, никаких апгрейдов,
все с нуля. Запустил оптимизацию, через некоторое время остановил ее и ничего не изменяя запустил еще раз.
МТ4 не видит результатов предыдущей оптимизации и начинает оптимизацию с самого начала.
- Почему?

 
chief2000:

Скачал и установил МТ4 версии 432, никаких старых версий, никаких апгрейдов,
все с нуля. Запустил оптимизацию, через некоторое время остановил ее и ничего не изменяя запустил еще раз.
МТ4 не видит результатов предыдущей оптимизации и начинает оптимизацию с самого начала.
- Почему?

Жестко зафиксируйте конечную дату, чтобы она не менялась. Например, на вчерашний день.
 
Renat:
Жестко зафиксируйте конечную дату, чтобы она не менялась. Например, на вчерашний день.

База исторических данных за период 2001-2012 (31 Мая).
Оптимизировал начиная с 2009 года. Конечная дата установлена (два независимых теста):
- в одном случае на 2011 - не работает.
- в другой проверке установил на вчерашнем дне - тоже не помогло.
 
chief2000:
База исторических данных за период 2001-2012 (31 Мая).
Оптимизировал начиная с 2009 года. Конечная дата установлена (два независимых теста):
- в одном случае на 2011 - не работает.
- в другой проверке установил на вчерашнем дне - тоже не помогло.

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

Оказалось, что значение уровня минимальных стопов = 0 считалось ошибочным. Это условие осталось с очень старых времен (лет 6-7 лет назад), когда минимальные стопы всегда присутствовали. Ошибку уже исправили, будет доступно в следующем билде.

Спасибо за поднятый вопрос!

 
Renat:

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

Оказалось, что значение уровня минимальных стопов = 0 считалось ошибочным. Это условие осталось с очень старых времен (лет 6-7 лет назад), когда минимальные стопы всегда присутствовали. Ошибку уже исправили, будет доступно в следующем билде.

Спасибо за поднятый вопрос!

У брокера, в платформе которого я провожу оптимизации, уровень стопов действительно 0, а когда-то был 3.
 

Явная ошибка компиляции :


 
FAQ:

Явная ошибка компиляции :



Не вижу ошибки, с точки зрения компилятора. Переменная=Значение Функции.

Возможно, правая скобка бесконечного цикла не на месте.

Иду байки.

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