Expert Advisors: Dreieckige Arbitrage

 

Dreieckige Arbitrage:

Dieser Expert Advisor (EA) implementiert eine dreieckige Arbitrage-Strategie zwischen drei Währungspaaren: EURUSD, USDJPY und 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 platziert wird, um zu arbeiten oder ist es notwendig, es in den drei Symbolen zu platzieren, die Sie erwähnen.
Jedes Symbol kann verwendet werden, auch ein anderes Symbol als die drei genannten, da sie alle im Code definiert sind.
 
Funktioniert gut auf historischen Daten (Zielgewinn auf 0,1 $ eingestellt). Ich habe die Verzögerung (ping) auf dem Niveau von 60 ms.

Ich habe es auch auf realen Daten auf einem Demo-Konto versucht:
Es öffnet und schließt Trades, aber mit einem Nachteil. Wahrscheinlich wegen der langen Ping-Zeit (ich hatte etwa 60 ms).
Ich möchte es über VPS versuchen.
 
sfhomebiz #:
Funktioniert gut auf historischen Daten(Ziel Gewinn auf 0,1 $ gesetzt). Ich habe die Verzögerung (ping) auf 60 ms eingestellt.
Der Grund ist dieser.
void CloseArbitragePositions()
{
   double totalProfit = 0;
  
   // Calcola il profitto cumulativo delle posizioni col 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.");
      
      // Die Positionen werden aus Sicherheitsgründen immer wieder neu festgelegt.
      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.");
            }
         }
      }
   }
}
Alle EAs mit dieser Bedingung wird etwas Gutes zeigen.
 
fxsaber #:
Der Grund dafür ist folgender. Alle EAs mit dieser Bedingung zeigen etwas Gutes.
Also druckt es keine Ergebnisse, die negativ waren?
 
xery #:
Es werden also keine negativen Ergebnisse angezeigt?

Nur wenn der Testdurchlauf gestoppt wird.

 
// Dies ist leistungsfähiger, höherer Trashold nutzbar 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; }
Warum haben Sie sich entschieden, das Gebot der ersten beiden Symbole zu verwenden, um den Briefkurs des Direktpreises zu berechnen und umgekehrt ...?