背景:
- 使用mt5
- "掉期"(展期(价格以点数(0.00001/0.001(-5位数的经纪人为单位
- 账户货币:美元
问题是:如何计算"掉期价值"的acc货币在mt5。换句话说,我将为一天的展期支付多少美分?
目前有这个"mql5"脚本:
#include <TradeSymbolInfo.mqh>
void OnStart() {
CSymbolInfo sym; // symbol informations object
sym.Name( ChartSymbol() ); // get the object for the current chart symbol
if( sym.SwapMode() == SYMBOL_SWAP_MODE_POINTS) {
double lot = 0.1;
double swapUSD_long = sym.SwapLong() * 0; // need help here
double swapUSD_short = sym.SwapShort() * 0; // need help here
PrintFormat(
"symbol: %s swap_long: %.2f swap_short: %.2f swapUSD_long: %.2f swapUSD_short: %.2f",
sym.Name(),
sym.SwapLong(),
sym.SwapShort(),
swapUSD_long,
swapUSD_short
);
}
}
当将脚本附加到EURAUD时,它将打印到终端:
符号:欧元兑澳元swap_long:-10.80 swap_short:6.80 swapUSD_long:0.00掉期USD_short:0.00
因此:空头头寸的展期价格为6.8点。如何用当前汇率兑换成美元?为此需要:
- 找到acc货币对(在这种情况下需要找到AUDUSD(
- 得到AUDUSD符号的速率。Bid((或符号。Ask((
- 而且
只是需要一些帮助;(
如果我理解你的问题,你可以使用TickValueProfit
和TickValueLoss
。如果向某个方向的掉期为负(您将支付(,则使用TickvalueLoss,当为正时使用TickValueProfit。
你可以为此制作一个函数,如下所示:
double swap_value_currency(double value_point, double tickprofit, double tickloss)
{
if( value_point == 0.0 ) { return(0.0); }
if( value_point < 0.0 ) {
return( val * tickloss );
}
return( value_point * tickprofit);
}
swap_value_currency
根据一个标准批次的输赢返回交换值。
所以你的代码片段可以是:
if( sym.SwapMode() == SYMBOL_SWAP_MODE_POINTS)
{
double swval_long = swap_value_currency(sym.SwapLong(), sym.TickValueProfit(), sym.TickValueLoss());
double swval_short= swap_vallue_currency(sym.SwapShort(), sym.TickValueProfit(), sym.TickValueLoss() );
}
因为这是一个标准批次,你需要乘以你的批次大小。。。