Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2197

 
(total)
 
lynxntech #:

Это объявленная ранее переменная, поменял на totalpos, что бы не вызывала предупреждение.

В остальном, как понимаю норм?

Буду завтра пробовать на открытом рынке.

 
Alexandr Vetrov #:

Это объявленная ранее переменная, поменял на totalpos, что бы не вызывала предупреждение.

В остальном, как понимаю норм?

Буду завтра пробовать на открытом рынке.

хороший совет, есть так сказать давно определенные названия, их стоит придерживаться, особенно если нужна помощь

 
lynxntech #:
особенно если нужна помощь

благодарю!

 

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

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Vitaly Muzichenko, 2023.05.20 20:25

Ранее работал этот код, сейчас не работает

--

//#property script_show_inputs
#import "user32.dll"
  int SetWindowLongA(uint hWnd,int nIndex, int dwNewLong);
  uint GetWindowLongA(int hWnd,int nIndex);
  int SetWindowPos(int hWnd, int hWndInsertAfter,int X, int Y, int cx, int cy, int uFlags);
  int GetParent(int hWnd);
  int GetTopWindow(int hWnd);
  int GetWindow(int hWnd, int wCmd);
#import

#define GWL_STYLE         -16 
#define WS_CAPTION        0x00C00000 
#define WS_BORDER         0x00800000
#define WS_SIZEBOX        0x00040000
#define WS_DLGFRAME       0x00400000
#define SWP_NOSIZE        0x0001
#define SWP_NOMOVE        0x0002
#define SWP_NOZORDER      0x0004
#define SWP_NOACTIVATE    0x0010
#define SWP_FRAMECHANGED  0x0020
#define GW_CHILD          0x0005
#define GW_HWNDNEXT       0x0002

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int OnStart() 
{
   int hChartParent = GetParent((int)ChartGetInteger(ChartID(), CHART_WINDOW_HANDLE));    
   int hMDIClient = GetParent(hChartParent); 
   int hChildWindow = GetTopWindow(hMDIClient);
   while (hChildWindow > 0)
   {
      RemoveBorderByWindowHandle(hChildWindow);
      hChildWindow = GetWindow(hChildWindow, GW_HWNDNEXT);
   }
 
   
   return(0);
}
void RemoveBorderByWindowHandle(int hWindow)
{
   uint iNewStyle = GetWindowLongA(hWindow, GWL_STYLE) & (~(WS_BORDER | WS_DLGFRAME | WS_SIZEBOX));    
   if (hWindow>0 && iNewStyle>0) 
   {
      SetWindowLongA(hWindow, GWL_STYLE, iNewStyle);
      SetWindowPos(hWindow,0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
   }
}


 

Всем доброго времени суток! Я изучаю тему ТЕСТИРОВАНИЕ СОВЕТНАКА В MQL5 НА РЕАЛЬНЫХ ТИКАХ(применительно к Альпари).  Как написано в Справке по МТ5 , реальные тики - это тики от поставщика ликвидности, накопленные Альпари.

В настройках тестера в поле МОДЕЛИРОВАНИЕ есть опция КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ.  В то же время  техподдержка Альпари скинула мне историю реальных тиков, которая выложена на сайте Альпари и  которые как я понял мне нужно загрузить в  тестер. Как я понял, при выборе в тестере опции  КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ загружать в  тестер ничего не нужно.

ВОПРОС  В чем отличие  между тестированием с выбором опции  КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ и тестированием на исторических данных(с загрузкой их в тестер) которые мне скинуло Альпари?

Какой из этих 2 вариантов тестирования  максимально близок к реальной торговле?.
Спасибо за помощь.

 
ANDREY #:

Всем доброго времени суток! Я изучаю тему ТЕСТИРОВАНИЕ СОВЕТНАКА В MQL5 НА РЕАЛЬНЫХ ТИКАХ(применительно к Альпари).  Как написано в Справке по МТ5 , реальные тики - это тики от поставщика ликвидности, накопленные Альпари.

В настройках тестера в поле МОДЕЛИРОВАНИЕ есть опция КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ.  В то же время  техподдержка Альпари скинула мне историю реальных тиков, которая выложена на сайте Альпари и  которые как я понял мне нужно загрузить в  тестер. Как я понял, при выборе в тестере опции  КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ загружать в  тестер ничего не нужно.

ВОПРОС  В чем отличие  между тестированием с выбором опции  КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ и тестированием на исторических данных(с загрузкой их в тестер) которые мне скинуло Альпари?

Какой из этих 2 вариантов тестирования  максимально близок к реальной торговле?.
Спасибо за помощь.

Вам скинули огрызок тиков.

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

 

Всем добра!


Так и не могу разобраться, этот советник видит "Чужие" позиции даже с других символов.

 В коммент прописывает 1970.01.01. Ниже весь код. Помогите плиз разобраться. В  мт4 такая штука работала, а здесь как то нет.

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>


CPositionInfo      o_position;
CTrade             o_trade;
CSymbolInfo        o_symbol;
COrderInfo         o_order;




input int    Lot              = 10;

input int    Slippage         = 20;
input string coment           = "Тренд";
input int    Magic            = 888;


datetime     timopen;
int          kolpos, totalpos;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   o_trade.SetExpertMagicNumber(Magic);
   
   if (IsFillingTypeAllowed(o_symbol.Name(),SYMBOL_FILLING_FOK))
     {
       o_trade.SetTypeFilling (ORDER_FILLING_FOK);
     }
   else if (IsFillingTypeAllowed(o_symbol.Name(),SYMBOL_FILLING_IOC))
          {
           o_trade.SetTypeFilling (ORDER_FILLING_IOC);
          }
       else 
       {
          o_trade.SetTypeFilling (ORDER_FILLING_RETURN);
       }

   o_trade.SetDeviationInPoints(Slippage);
   

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{


     for (kolpos = 0; kolpos < PositionsTotal(); kolpos++)
        {
         if(o_position.SelectByIndex(totalpos))
           {
            if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == Magic)
               {
                 kolpos++;
               }
           }
           else kolpos = 0;
         }    

    if(kolpos == 0)
      {        

                if(o_trade.Buy(Lot,o_symbol.Name(),0,0,0,coment))
                  {
                    timopen = TimeCurrent();
                  }
      }

   if(kolpos != 0)  
   {
   Comment(timopen);
   }


}
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(string symbol, int fill_type)
{
  long filling = SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
  
  return((filling && fill_type) == fill_type);
}
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

Вам скинули огрызок тиков.

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

Большое спасибо за ценную информацию.  Теперь мне нужно понять еще один момент... При реальной торговле всегда присутствует СПРЕД , который может быть не фиксированным, а иногда плавающим. При реальной торговле так же всегда присутствуют проскальзывания и реквоты и  возможно какие то еще технические недоразумения о которых я пока не знаю.

ВОПРОС  Если я выберу в тестере опцию  КАЖДЫЙ ТИК НА ОСНОВЕ РЕАЛЬНЫХ ТИКОВ будет ли тестер открывать позиции со спредом который реально был в момент открытия ордера? И особенно если в этот момент спред  поплыл в какую то сторон? Как тестер узнает, что спред в момент открытия позиции,  был  , например не 2пп., а 10 пп.? 

А будет ли при открытии и закрытии ордера в тестере  учитываться проскальзывания которые были в реале  на момент открытия ордера или его закрытия по СЛ или ТП? 

Спасибо

 
Alexandr Vetrov #:
if(o_position.SelectByIndex(totalpos))

Что опять за totalpos? Вы в цикле перебираете позиции, где итератором является kolpos. Эта kolpos и хранит в себе индекс позиции, которую надо захватить на текущей итерации.

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