EA: 三角套利

 

三角套利:

该智能交易系统 (EA) 在欧元兑美元、美元兑日元和欧元兑日元这三种货币对之间实施三角套利策略。

Author: Джованни Орсани

 
您好,请问您是 EA 安装在哪个模拟器上,还是安装在所提到的三个模拟器上?
 
Edward Garnica 放在 哪个符号中工作的,还是必须放在您提到的三个符号中。
任何符号都可以使用,甚至是上述三种符号以外的符号,因为它们都在代码中定义好了。
 
在历史数据上运行良好(目标利润设定为 0.1 美元)。我将延迟(ping)设置为 60 毫秒。

我还在模拟账户的真实数据上进行了尝试:
它可以打开和关闭交易,但处于劣势。可能是因为 ping 时间太长(我的 ping 时间约为 60 毫秒)。
我想通过 VPS 试试。
 
sfhomebiz #:
在历史数据上运行良好(目标利润 设置为 0.1 美元)。我将延迟(ping)设置为 60 毫秒。
原因是这样的。
void CloseArbitragePositions()
{
   double totalProfit = 0;
  
   // 用 "神奇数字 "计算位置累积利润
   for(int i = 0; i < PositionsTotal(); i++)
   {
      ulong ticket = PositionGetTicket(i);
      if(PositionSelectByTicket(ticket))
      {
         if(PositionGetInteger(POSITION_MAGIC) == MagicNumber)
            totalProfit += PositionGetDouble(POSITION_PROFIT);
      }
   }
  
   if(totalProfit >= ProfitTarget)
   {
      Print("Profit target raggiunto: ", totalProfit, ". Procedo alla chiusura delle posizioni.");
      
      // 为安全起见,反复调整位置
      for(int i = PositionsTotal() - 1; i >= 0; i--)
      {
         ulong ticket = PositionGetTicket(i);
         if(PositionSelectByTicket(ticket))
         {
            if(PositionGetInteger(POSITION_MAGIC) == MagicNumber)
            {
               string sym = PositionGetString(POSITION_SYMBOL);
               if(!trade.PositionClose(sym))
                  Print("Errore nella chiusura della posizione su ", sym, " - ", GetLastError());
               else
                  Print("Posizione su ", sym, " chiusa con successo.");
            }
         }
      }
   }
}
所有具有此条件的 EA 都会显示出良好的效果。
 
fxsaber #:
原因就在于此。所有具有此条件的 EA 都会显示好的结果。
所以它不会打印出负面结果?
 
xery #:
所以它不会显示阴性结果?

只有在停止测试通过时才会显示。

 
// 此功能更强大,可使用更高的垃圾值 int CheckArbitrageOpportunity(double &diff, double &impliedPrice, double &directPrice) { double price1 = SymbolInfoDouble(symbol1,SYMBOL_BID); double price2 = SymbolInfoDouble(symbol2, SYMBOL_BID); directPrice = SymbolInfoDouble(symbol3, SYMBOL_ASK); impliedPrice = price1 * price2;diff = (impliedPrice - directPrice) / directPrice; if(diff > Threshold) return 1; price1 = SymbolInfoDouble(symbol1, SYMBOL_ASK); price2 = SymbolInfoDouble(symbol2, SYMBOL_ASK);directPrice = SymbolInfoDouble(symbol3, SYMBOL_BID); impliedPrice = price1 * price2; diff = (impliedPrice - directPrice) / directPrice; if(diff < -Threshold) return -1; return 0; }
 
michal_ SYMBOL_BID); double price2 = SymbolInfoDouble(symbol2, SYMBOL_BID); directPrice = SymbolInfoDouble(symbol3, SYMBOL_ASK); impliedPrice = price1 * price2;diff = (impliedPrice - directPrice) / directPrice; if(diff > Threshold) return 1; price1 = SymbolInfoDouble(symbol1, SYMBOL_ASK); price2 = SymbolInfoDouble(symbol2, SYMBOL_ASK);directPrice = SymbolInfoDouble(symbol3, SYMBOL_BID); impliedPrice = price1 * price2; diff = (impliedPrice - directPrice) / directPrice; if(diff < -Threshold) return -1; return 0; }
为什么您决定使用前两个符号的买价来计算直接价格的卖价,反之亦然?