корректный код для расчета свопов

 

добрый день!

есть ли готовый код для корректного учета свопов разных типов?

поиском нашлись только отдельные фрагменты  

 
//------------------------------------------------------------------ GetSwap
double GetSwap(int dir, string smb)
{
        double lotsize=MarketInfo(smb, MODE_LOTSIZE);
        double ticksize=MarketInfo(smb, MODE_TICKSIZE);
        double tickval=MarketInfo(smb, MODE_TICKVALUE);
        int swapType=MarketInfo(smb, MODE_SWAPTYPE); 
        string smbL=StringSubstr(smb, 0, 3);
        string smbR=StringSubstr(smb, 3, 3);
        double swap=Swap(dir, smb)*tickval;
        if (swapType==0) if (smbL=="USD" && smbR!="JPY") swap=swap*MarketInfo(smb, MODE_BID);
        if (swapType==1) { if (smbL!="USD")     swap=swap*MarketInfo(smb, MODE_BID); swap=swap/(ticksize*lotsize); }
        if (swapType==3) { swap=swap*MarketInfo(smb, MODE_BID); swap=swap/(ticksize*lotsize); }
//      Print(smb+"  swap="+DTS(swap, 3)+" | Type="+swapType+" VALUE="+DTS(tickval, 2)+" TICK="+DTS(ticksize, 5)+" LOT="+DTS(lotsize, 2)+" *** "+DTS(ticksize*lotsize, 2));
        return(swap);
}
//---------------------------------------------------------------   Swap
double Swap(int dir, string smb)
{
        if (dir==OP_BUY) return(MarketInfo(smb, MODE_SWAPLONG));
        if (dir==OP_SELL) return(MarketInfo(smb, MODE_SWAPSHORT));
}


но нужно проверить в тестере. запустите какой то эксп чтоб ордер открывал и не закрывал. и сранивайте то что выдает OrderSwap и функция GetSwap.

все тестировал пару лет назад. может что и поменялось

 
sergeev:


но нужно проверить в тестере. запустите какой то эксп чтоб ордер открывал и не закрывал. и сранивайте то что выдает OrderSwap и функция GetSwap.

все тестировал пару лет назад. может что и поменялось


спасибо!
 

sergeev, большое спасибо за код!


.... вопросик однако один имеется - там где у вас проверки на "USD" не надо ли ето поменять на AccountCurrency()? Мне так кажется что ваш код вроде написан подразумевая что AccountCurrency() == USD?

 
4x4ever:

sergeev, большое спасибо за код!


.... вопросик однако один имеется - там где у вас проверки на "USD" не надо ли ето поменять на AccountCurrency()? Мне так кажется что ваш код вроде написан подразумевая что AccountCurrency() == USD?

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

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