Experts: Arbitragem triangular

 

Arbitragem triangular:

Esse Expert Advisor (EA) implementa uma estratégia de arbitragem triangular entre três pares de moedas: EURUSD, USDJPY e EURJPY

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

 
hola qusiera saber en que simbolo se coloca el EA para que trabaje o toca colocarlo en los tres simbolos que mencionas
 
Edward Garnica colocado para funcionar ou é necessário colocá-lo nos três símbolos que você mencionou.
Qualquer símbolo pode ser usado, mesmo um símbolo diferente dos três mencionados, pois todos eles estão definidos no código.
 
Funciona bem com dados históricos (meta de lucro definida em 0,1$). Configurei o atraso (ping) no nível de 60 ms.

Também experimentei com dados reais em uma conta de demonstração:
Abre e fecha negociações, mas em desvantagem. Provavelmente por causa do longo tempo de ping (eu tinha cerca de 60 ms).
Quero tentar via VPS.
 
sfhomebiz #:
Funciona bem com dados históricos(meta de lucro definida em 0,1$). Defino o atraso (ping) em 60 ms.
O motivo é o seguinte.
void CloseArbitragePositions()
{
   double totalProfit = 0;
  
   // Calcule o lucro cumulativo das posições com o Magic Number
   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.");
      
      // Altere as posições, alternando para o interior, para garantir a segurança
      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.");
            }
         }
      }
   }
}
Todos os EAs com essa condição mostrarão algo bom.
 
fxsaber #:
O motivo é o seguinte. Todos os EAs com essa condição mostrarão algo bom.
Então, ele não imprime resultados negativos?
 
xery #:
Então, ele não exibe resultados negativos?

Somente quando a passagem do testador é interrompida.

 
// 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; se (diff > Threshold) retornar 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; se (diff > Threshold) retornar 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; }
Por que você decidiu usar a oferta dos dois primeiros símbolos para calcular a oferta do preço direto e vice-versa?