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

 
Andrei Sokolov #:

Привет. Подскажите, как сделать чтоб при новом окне графика, торговая история была отключена?

А никак. Эта кнопка почему то не сохраняется в шаблонах. Хоть как делай, торговая история всё равно будет показана на новом графике. 

Это баг такой или фича, я хз. 

 
Aleksandr Slavskii #:

А никак. Эта кнопка почему то не сохраняется в шаблонах. Хоть как делай, торговая история всё равно будет показана на новом графике. 

Это баг такой или фича, я хз. 

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

В настройках есть способ скрыть\отобразить торговую историю:


Скрываем, закрываем график, где она есть. Открываем новый. Убеждаемся, что он чист, создаём дефолтный шаблон...

 
Denis Kirichenko и остальным, кто пытался, спасиб.
 
Denis Kirichenko #:

В настройках есть способ скрыть\отобразить торговую историю:

Скрываем, закрываем график, где она есть. Открываем новый. Убеждаемся, что он чист, создаём дефолтный шаблон...

 

 

Наверное снимка совсем недостаточно, но всё-же попробую спросить. Вдруг кто поймёт и скажет что так и должно быть…

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


И что самое непонятное, trans.type == TRADE_TRANSACTION_ORDER_UPDATE не бывает…

 

Вот подготовил короткий код.

Открываются два ордера. И вот код функции

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  Print(EnumToString(trans.type));
  if(trans.type == TRADE_TRANSACTION_ORDER_UPDATE)
    Print("УРА¡¡¡ Победа ", EnumToString(trans.type));
  if(trans.type == TRADE_TRANSACTION_ORDER_ADD)
   {
    if(OrderSelect(trans.order))
     {
      ulong opdMagic=OrderGetInteger(ORDER_MAGIC);
     printf("ORDER_MAGIC %d ——— request.magic %d",opdMagic,request.magic);
     }
   }
 }/******************************************************************/

Казалось бы должен печатать все типы транзакций… Ан нет. Только два типа. Это видимо сделано для повышения скорости обработки, но это кажется перебор… 

Результат отладки на исторических данных

2024.11.27 20:14:39.967 2024.11.11 00:00:57   GBPUSD 11 ***** 
2024.11.27 20:14:39.967 2024.11.11 00:00:57   buy limit 0.1 GBPUSD at 1.28878 tp: 1.29078 (1.29078 / 1.29201)
2024.11.27 20:14:39.969 2024.11.11 00:00:57   GBPUSD 11 ***** 
2024.11.27 20:14:39.969 2024.11.11 00:00:57   sell limit 0.1 GBPUSD at 1.29278 tp: 1.29078 (1.29078 / 1.29201)
2024.11.27 20:14:46.847 2024.11.11 00:00:57   TRADE_TRANSACTION_ORDER_ADD
2024.11.27 20:14:48.915 2024.11.11 00:00:57   ORDER_MAGIC 11 ——— request.magic 0
2024.11.27 20:14:49.566 2024.11.11 00:00:57   TRADE_TRANSACTION_REQUEST
2024.11.27 20:14:50.698 2024.11.11 00:00:57   TRADE_TRANSACTION_ORDER_ADD
2024.11.27 20:14:52.000 2024.11.11 00:00:57   ORDER_MAGIC 11 ——— request.magic 0
2024.11.27 20:14:52.525 2024.11.11 00:00:57   TRADE_TRANSACTION_REQUEST

А где тип TRADE_TRANSACTION_ORDER_UPDATE ведь он кажется должен быть…

Файлы:
TestBug.mq5  10 kb
 
vector x = {10,34,23,54,9};               
vector y = {4,5,11,15,20};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print("Ковариация рассчиталась по выборке");
   Print(x.Cov(y));
   
   Print("\nДисперсия рассчиталась по совокупности");
   Print(x.Var());

}
2024.11.28 13:50:24.694 Ковариация рассчиталась по выборке
2024.11.28 13:50:24.694 [[350.5,5.750000000000007]
2024.11.28 13:50:24.694  [5.750000000000007,45.5]]
2024.11.28 13:50:24.694 
2024.11.28 13:50:24.694 Дисперсия рассчиталась по совокупности
2024.11.28 13:50:24.694 280.4

Калькулятор ковариации
cov

Калькулятор дисперсии

var


Очевидно, что дисперсия должна так-же рассчитываться по выборке, т.е. (size-1)

//------------------------------------------------
double Mean(const double &arr[], int size) 
{
   double sum = 0.0;
   
   for(int i=0; i<size; i++)
      sum += arr[i];
   
   return(sum / size);
}

//-----------------------------------------------
double Var(const double &arr[], int size) 
{
   double avg = Mean(arr, size); 
   double sum = 0.0;
   
   for(int i=0; i<size; i++) 
      sum += (arr[i] - avg) * (arr[i] - avg); 
      
   sum /= (size-1);
      
   return(sum); 
}
2024.11.28 14:35:24.284 Дисперсия рассчиталась по выборке
2024.11.28 14:35:24.284 350.5
 

Не читается дата записанная в файл. Что не так?

//+------------------------------------------------------------------+
//|                                                   TestScript.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

string FileName="TestFile.txt";
int H_File;

datetime Date1=D'2024.11.28 09:22';
datetime Date2,Date3;
string Str;
string StrStr[3];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
Print("-----");

H_File=FileOpen(FileName,FILE_WRITE|FILE_TXT);
FileWriteString(H_File,IntegerToString(Date1)+" "+TimeToString(Date1));
FileClose(H_File);

Print("Date1=",Date1);

H_File=FileOpen(FileName,FILE_READ|FILE_TXT);
FileSeek(H_File,0,SEEK_SET);
Str=FileReadString(H_File);
FileClose(H_File);

Print("Str=",Str);
Date2=(datetime)StringToInteger(Str);
Print("Date2=",Date2);

StringSplit(Str,32,StrStr);
Print("StrStr[0]=",StrStr[0]," StrStr[1]=",StrStr[1]," StrStr[2]=",StrStr[2]);
Date3=(datetime)StringToInteger(StrStr[0]);
Print("Date3=",Date3);


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

Вывод:

LJ 0 12:44:54.122 TestScript (EURUSD,H4) -----

NS 0 12:44:54.122 TestScript (EURUSD,H4) Date1=2024.11.28 09:22:00

QS 0 12:44:54.122 TestScript (EURUSD,H4) Str= 1732785720 2024.11.28 09:22

QQ 0 12:44:54.122 TestScript (EURUSD,H4) Date2=1970.01.01 00:00:00

CL 0 12:44:54.122 TestScript (EURUSD,H4) StrStr[0]= 1732785720 StrStr[1]=2024.11.28 StrStr[2]=09:22

DJ 0 12:44:54.122 TestScript (EURUSD,H4) Date3=1970.01.01 00:00:00

 
Roman #:

Калькулятор ковариации

Калькулятор дисперсии


Очевидно, что дисперсия должна так-же рассчитываться по выборке, т.е. (size-1)

Это - неочевидно.

В статистике есть понятия "полная выборка" и "подвыборка".

Для полной выборки считается size. Для подвыборки (например, в скользящем окне) считается size-1