三币对冲非平衡套利是在三角套利的基础上的拓展与延续。三角套利作为一种比较常见的套利方式,不少投资人在外汇交易中都有用到过。三角套利是基于交叉汇率实现的,它是三角套利的基础,所谓交叉汇率,是指用一种非美元的货币表示另一种非美元货币的价格。如某个外汇市场上美元/日元=142.840,欧元/美元=1.00435,欧元/日元=143.375,当(美元/日元)×(欧元/美元)不等于(欧元/日元)时,这就为三角套利提供了可能。
然而,严格的三角套利由于点差、滑点、隔夜利息、手续费等原因,并不能获利。如果在以上的三个货币对上增加不平衡系数,打破这种对称性,便有了获利的可能性。
如:同时下单1、sellA手eurusd,2、sellB手usdjpy,3、buy C手eurjpy,4、A、B、C系数通过计算获得。
如果Ask_EURUSD * Ask_USDJPY - Bid_EURJPY < - 300, 同时交易三个订单 Ask_EURUSD,Ask_USDJPY , Bid_EURJPY;
如果 Bid _EURUSD * Bid _USDJPY - Ask _EURJPY > +300, 同时交易三个订单 Bid _EURUSD, Bid _USDJPY , Ask _EURJPY;
当以上三个订单总体盈利时,平仓。从而获利。
以下源代码为 Ask_EURUSD * Ask_USDJPY - Bid_EURJPY < - 300, 同时交易三个订单 Ask_EURUSD,Ask_USDJPY , Bid_EURJPY;
- //--- 获取选定对象的市值
- MqlTick current2_price;
-
- if ( SymbolInfoTick(symbol_group[0],current2_price) )
- {
- Ask_EUR_USD=current2_price.ask;
- Bid_EUR_USD=current2_price.bid;
- }
- if ( SymbolInfoTick(symbol_group[1],current2_price) )
- {
- Ask_USD_JPY=current2_price.ask;
- Bid_USD_JPY=current2_price.bid;
- }
- if ( SymbolInfoTick(symbol_group[2],current2_price) )
- {
- Ask_EUR_JPY=current2_price.ask;
- Bid_EUR_JPY=current2_price.bid;
- }
-
- if( BBS_open == 1 && (BBS_total[0]+BBS_total[1]+BBS_total[2]) < BBS_number_lots )
- {
- if( (Ask_EUR_USD * Ask_USD_JPY - Bid_EUR_JPY)*10000 <= p_low )
- {
- bool buycheck1=false;
- bool buycheck2=false;
- bool sellcheck3=false;
- ulong buy1_ticket=0;
- ulong buy2_ticket=0;
- ulong sell3_ticket=0;
- int check_total=0;
- while( (buycheck1==false || buycheck2==false || sellcheck3==false) && check_total<2000 )
- {
- if( buycheck1==false )
- {
- //买1EUR_USD
- ///////////////////////////////////////////////////////////////////////////
- //--- 声明并初始化交易请求和交易请求结果
- MqlTradeRequest buy1_request={1};
- MqlTradeResult buy1_result={1};
- //--- 请求参数
- buy1_request.action =TRADE_ACTION_DEAL; // 交易操作类型
- buy1_request.symbol =symbol_group[0]; // 交易品种
- buy1_request.volume =NormalizeDouble(px_big*mylots/Ask_EUR_USD,2); //交易量
- buy1_request.type =ORDER_TYPE_BUY; // 订单类型
- // buy1_request.type_filling=ORDER_FILLING_IOC; // 订单执行类型
- buy1_request.price =SymbolInfoDouble(buy1_request.symbol,SYMBOL_ASK); // 持仓价格
- ppoint =SymbolInfoDouble(buy1_request.symbol,SYMBOL_POINT); // 持仓point
- ddigits =(int)SymbolInfoInteger(buy1_request.symbol,SYMBOL_DIGITS); // 持仓digits
- buy1_request.sl =0;
- buy1_request.tp =0;
- buy1_request.comment =IntegerToString(SanJiaoGroup_comment);
- buy1_request.deviation=5; // 允许价格偏差
- buy1_request.magic =888001;
-
- if(buycheck1=OrderSend(buy1_request,buy1_result))
- {
- buy1_ticket=buy1_result.order;
- Print(buy1_request.symbol,"BBS-1同步即时买ok,订单号:",buy1_result.order);
- }
- else
- {
- PrintFormat("BBS-1同步即时OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
- }
- }
- // Sleep(1*0.0001*1000);
- if( buycheck2==false )
- {
- //买2USD_JPY
- ///////////////////////////////////////////////////////////////////////////
- //--- 声明并初始化交易请求和交易请求结果
- MqlTradeRequest buy2_request={1};
- MqlTradeResult buy2_result={1};
- //--- 请求参数
- buy2_request.action =TRADE_ACTION_DEAL; // 交易操作类型
- buy2_request.symbol =symbol_group[1]; // 交易品种
- buy2_request.volume =NormalizeDouble(px_small*mylots,2); //交易量
- buy2_request.type =ORDER_TYPE_BUY; // 订单类型
- // buy2_request.type_filling=ORDER_FILLING_IOC; // 订单执行类型
- buy2_request.price =SymbolInfoDouble(buy2_request.symbol,SYMBOL_ASK); // 持仓价格
- ppoint =SymbolInfoDouble(buy2_request.symbol,SYMBOL_POINT); // 持仓point
- ddigits =(int)SymbolInfoInteger(buy2_request.symbol,SYMBOL_DIGITS); // 持仓digits
- buy2_request.sl =0;
- buy2_request.tp =0;
- buy2_request.comment =IntegerToString(SanJiaoGroup_comment);
- buy2_request.deviation=5; // 允许价格偏差
- buy2_request.magic =888001; // 订单幻数
-
- if(buycheck2=OrderSend(buy2_request,buy2_result))
- {
- buy2_ticket=buy2_result.order;
- Print(buy2_request.symbol,"BBS-2同步即时买ok,订单号:",buy2_result.order);
- }
- else
- {
- PrintFormat("BBS-2同步即时OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
- }
- }
- // Sleep(1*0.001*1000);
-
- if( sellcheck3==false )
- {
- //卖3EUR_JPY
- ///////////////////////////////////////////////////////////////////////////
- //--- 声明并初始化交易请求和交易请求结果
- MqlTradeRequest sell3_request={1};
- MqlTradeResult sell3_result={1};
- //--- 请求参数
- sell3_request.action =TRADE_ACTION_DEAL; // 交易操作类型
- sell3_request.symbol =symbol_group[2]; // 交易品种
- sell3_request.volume =NormalizeDouble(px_middle*mylots/Bid_EUR_USD,2); //交易量
- sell3_request.type =ORDER_TYPE_SELL; // 订单类型
- // sell3_request.type_filling=ORDER_FILLING_IOC; // 订单执行类型
- sell3_request.price =SymbolInfoDouble(sell3_request.symbol,SYMBOL_BID); // 持仓价格
- ppoint =SymbolInfoDouble(sell3_request.symbol,SYMBOL_POINT); // 持仓point
- ddigits =(int)SymbolInfoInteger(sell3_request.symbol,SYMBOL_DIGITS); // 持仓digits
- sell3_request.sl =0;
- sell3_request.tp =0;
- sell3_request.comment =IntegerToString(SanJiaoGroup_comment);
- sell3_request.deviation=5; // 允许价格偏差
- sell3_request.magic =888001; // 订单幻数
-
- if(sellcheck3=OrderSend(sell3_request,sell3_result))
- {
- sell3_ticket=sell3_result.order;
- Print(sell3_request.symbol,"BBS-3同步即时卖ok,订单号:",sell3_result.order);
- }
- else
- {
- PrintFormat("BBS-3同步即时OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
- }
- }
- // Sleep(1*0.001*1000);
-
- check_total++;
- }
复制代码
|