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

 
Sergey Dzyublik #:

У вас "b" ранее был создан как глобальный указатель, а не как инициализация статического члена класса.

Да, ошибся я с тем примером - исправляюсь:

class A {
    static class B {} *b;
};
A::B* A::b; //нормально
A::B*    b; //нормально ???
 
A100 #:

Ещё раз, более подробно, о том , что я написал в своём сообщении выше.

Цена, которую мы видим на графике - это BID, она же Close текущей свечи. Таким образом, ВСЕГДА должно выполняться равенство BID == Close[0]. 

В тестере стратегий, так и есть, это равенство всегда выполняется, а вот на реале это происходит не всегда, зависит от брокера и типа счёта. На ECN почти всегда выполняется равенство, на Standart почти всегда не выполняется.

Прикрепите утилиту к любому чарту в рабочее время и проверьте. 

void OnTick()

  {

MqlRates rates_hl[];

ZeroMemory(rates_hl);

ArraySetAsSeries(rates_hl,true); 

int copied=CopyRates(_Symbol,PERIOD_M1,0,2,rates_hl); 

double jiBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);

double mClose[];

ArraySetAsSeries(mClose,true);

CopyClose(_Symbol,PERIOD_M1,0,2,mClose);

if(jiBid != rates_hl[0].close){Print("jiBid != rates_hl[0].close " + jiBid + " != " + rates_hl[0].close);}

if(jiBid != mClose[0]){Print("jiBid != mClose[0] " + jiBid + " != " + mClose[0]);}

if(rates_hl[0].close != mClose[0]){Print("rates_hl[0].close != mClose[0] " + rates_hl[0].close + " != " + mClose[0]);} 

  }
Файлы:
simple.mq5  3 kb
 
Konstantin Kulikov #:

ВСЕГДА должно выполняться равенство BID == Close[0].

Бары в терминале не строятся из поступающих тиков. Это два разных потока данных.

Если ECN и Standart счета находятся на одном и том же торговом сервере и имеют абсолютно одинаковые названия символов, то тиковая и баровая история едины на оба типа счета. При этом отличия в Marketwatch.

 
fxsaber #:

Бары в терминале не строятся из поступающих тиков. Это два разных потока данных.

Если ECN и Standart счета находятся на одном и том же торговом сервере и имеют абсолютно одинаковые названия символов, то тиковая и баровая история едины на оба типа счета. При этом отличия в Marketwatch.

Бары строятся из тиков. Только на этапе подкачки идет синхронизация готовых исторических M1 баров.

Bid и Close[0] могут отличаться:

  1. Пришел новый тик и Close[0] обновился
  2. На биржевых счетах Close[0] часто равен Close цене, а не Bid, так как чарты строятся по проторгованным ценам, а не по индикативному Bid

 
Renat Fatkhullin #:

Бары строятся из тиков.

Вы, видимо, не в курсе, что SymbolInfoTick и последний тик из CopyTicks могут отличаться на КАЖДОМ тике в реале и даже в Тестере.
 
fxsaber #:
Вы, видимо, не в курсе, что SymbolInfoTick и последний тик из CopyTicks могут отличаться на КАЖДОМ тике в реале и даже в Тестере.

В курсе, поэтому и написал "Bid и Close[0] могут отличаться".

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

 
Renat Fatkhullin #:

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

SymbolInfoTick VS CopyTicks:

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

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы

fxsaber, 2022.11.20 23:44

2022.11.18 23:54:59   Tester (CopyTicks): TESTER_BUG055_EURUSD_7509
2022.11.18 23:54:59                    [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2022.11.18 23:54:59   [0] 2022.11.18 23:54:59 1.03191 1.03208 0.0000        0 1668815699424       6       0.00000
2022.11.18 23:54:59   [1] 2022.11.18 23:54:59 1.03191 1.03210 0.0000        0 1668815699523       4       0.00000
2022.11.18 23:54:59   [2] 2022.11.18 23:54:59 1.03191 1.03208 0.0000        0 1668815699624       4       0.00000
2022.11.18 23:54:59   [3] 2022.11.18 23:54:59 1.03191 1.03209 0.0000        0 1668815699723       4       0.00000
2022.11.18 23:54:59   [4] 2022.11.18 23:54:59 1.03190 1.03209 0.0000        0 1668815699824       2       0.00000
2022.11.18 23:54:59   
2022.11.18 23:54:59   Tester (SymbolInfoTick): TESTER_BUG055_EURUSD_7509
2022.11.18 23:54:59                    [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2022.11.18 23:54:59   [0] 2022.11.18 23:54:59 1.03197 1.03202 0.0000        0 1668815699424       6       0.00000
2022.11.18 23:54:59   [1] 2022.11.18 23:54:59 1.03197 1.03204 0.0000        0 1668815699523       4       0.00000
2022.11.18 23:54:59   [2] 2022.11.18 23:54:59 1.03197 1.03202 0.0000        0 1668815699624       4       0.00000
2022.11.18 23:54:59   [3] 2022.11.18 23:54:59 1.03197 1.03203 0.0000        0 1668815699723       4       0.00000
2022.11.18 23:54:59   [4] 2022.11.18 23:54:59 1.03196 1.03203 0.0000        0 1668815699824       2       0.00000

Каждый SymbolInfoTick и CopyTicks совпадают во всех полях (включая миллисекунды), кроме bid/ask. Между соответствующими ценами постоянный маркап. Такая ситуация в Live/Tester-режимах.

 
Ошибка при выполнении:
int i1 = 0; int f1( int i ) { i1++; return 0; }
int i2 = 0; int f2( int i ) { i2++; return i; }
void OnStart()
{
    int i = 3;
    do
        while(f1(i--));
    while(f2(i--));
    printf("%d:%d",i1,i2);
}
Результат:    1:3
Ожидалось:  2:2
 
A100 #:
Ошибка при выполнении:
Результат:    1:3
Ожидалось:  2:2

Вроде, правильно с результатом.

 
fxsaber #:

Вроде, правильно с результатом.

Да?! А почему тогда в C\С++ другой результат? Уже простейший пример не можете разобрать. Заменил Print на printf для желающих проверить

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