三币对冲非平衡套利原理概述

 

三币对冲非平衡套利是在三角套利的基础上的拓展与延续。三角套利作为一种比较常见的套利方式,不少投资人在外汇交易中都有用到过。三角套利是基于交叉汇率实现的,它是三角套利的基础,所谓交叉汇率,是指用一种非美元的货币表示另一种非美元货币的价格。如某个外汇市场上美元/日元=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++;    
          }
 
buy1_request.volume   =NormalizeDouble(px_big*mylots/Ask_EUR_USD,2); //交易量

交易量的调整,可以实现三币种的非平衡型

 
Kai Wei Luo #:

交易量的调整,可以实现三币种的非平衡型

快接近完整的算法了 

 
测试很牛逼,实盘很沮丧。
 
Hung Wen Lin #:

快接近完整的算法了 

这只是原理,要成为EA,还有很大的工作量

 
Kai Wei Luo #:
测试很牛逼,实盘很沮丧。

必须严格真实测试才行