MQL4 Расчет свопов вручную

 

Всем привет!

Написал функцию для расчета количества переходов через ночь для расчета свопа по ордеру. Сразу оговорюсь, ордера виртуальные (мультивалютный советник, поэтому никакими OrderSwap пользоваться не могу). Но по идее надо написать реализацию свою типа этой же функции.  Написал функцию, но не уверен в полной ее точности. И еще... В нее надо бы дописать учет обработки дня тройного свопа. Но тут всю голову уже изломал. Вышло что-то огромное на переборы всех вариантов, так что пока функцию даже без этого куска приведу.

int OverNight(datetime st, datetime end, int tripleSwapDay)
{
    int res=0;
    MqlDateTime s, e;
    TimeToStruct(st, s);
    TimeToStruct(end, e);
    if(s.year < e.year)         //Если поменялся год
    {
        res = s.year%4 == 0 ? 366-s.day_of_year : 365-s.day_of_year;
        int curYear = s.year+1;
        while(curYear != e.year)
        {
            res += curYear%4 == 0 ? 366 : 365;
            curYear++;
        }
        res += e.day_of_year;
    }
    else                        //Если год не поменялся
    {
        res = e.day_of_year - s.day_of_year;
    }
    return res;
}

 Вопросов собственно два:

1. Правильно ли я тут все учел? Может можно как-то проще?

2. Как все таки толково прописать учет тройного свопа в конце этой функции (используя уже полученную разницу в днях)

 
Что ни у кого нет опыта разработки аналогичной функции?
 
gammaray:
Что ни у кого нет опыта разработки аналогичной функции?
Зачем оно?
 
Alexey Oreshkin:
Зачем оно?
Ответ на этот вопрос написал в шапке в скобках. Мультивалютный советник. Ордера виртуальные. Отслеживаются через файл
 
gammaray:

Всем привет!

Написал функцию для расчета количества переходов через ночь для расчета свопа по ордеру. Сразу оговорюсь, ордера виртуальные (мультивалютный советник, поэтому никакими OrderSwap пользоваться не могу). Но по идее надо написать реализацию свою типа этой же функции.  Написал функцию, но не уверен в полной ее точности. И еще... В нее надо бы дописать учет обработки дня тройного свопа. Но тут всю голову уже изломал. Вышло что-то огромное на переборы всех вариантов, так что пока функцию даже без этого куска приведу.

 Вопросов собственно два:

1. Правильно ли я тут все учел? Может можно как-то проще?

2. Как все таки толково прописать учет тройного свопа в конце этой функции (используя уже полученную разницу в днях)

Привет.

Для определения дня тройного свопа есть идентификатор SYMBOL_SWAP_ROLLOVER3DAYS https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Andrey Khatimlianskii:

1. Свопы меняются, поэтому для долгосрока такой способ не подойдет. Ну, или историю свопов нужно собирать.

2. Разницы в днях не достаточно, нужно кол-во переходов со среды на четверг и кол-во остальных переходов. 

1. Ну этим пренебречь придется всяко. Своп могу через настройки задать типа средний за период тестирования.

2. Так а про что изначально написал?) У меня учет тройного свопа вышел очень громоздкий. Думал может кто какую более простую реализацию подскажет. P.S. Не у всех брокеров тройной своп взимается со среды на четверг 

 
Alexey Kozitsyn:

Привет.

Для определения дня тройного свопа есть идентификатор SYMBOL_SWAP_ROLLOVER3DAYS https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Я своп считать хочу в ручную. День тройного свопа передается третьим параметром в функцию
Причина обращения: