Funciona bien en los datos históricos (objetivo de beneficio fijado en 0,1 $). Establecí el retraso (ping) en el nivel de 60 ms.
También lo probé en datos reales en una cuenta demo:
Abre y cierra operaciones, pero en desventaja. Probablemente debido al largo tiempo de ping (tuve alrededor de 60 ms).
Quiero probar a través de VPS.
También lo probé en datos reales en una cuenta demo:
Abre y cierra operaciones, pero en desventaja. Probablemente debido al largo tiempo de ping (tuve alrededor de 60 ms).
Quiero probar a través de VPS.
sfhomebiz #:
Funciona bien con datos históricos(objetivo de beneficio fijado en 0,1 $). He establecido el retraso (ping) a 60 ms.
La razón es la siguiente. Funciona bien con datos históricos(objetivo de beneficio fijado en 0,1 $). He establecido el retraso (ping) a 60 ms.
void CloseArbitragePositions() { double totalProfit = 0; // Calcular el beneficio acumulado de las posiciones con 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."); // Cambia las posiciones iterando all'indietro per sicurezza 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."); } } } } }
// Esto es más potente, mayor trashold utilizable 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; }
¿Por qué ha decidido utilizar la oferta de los dos primeros símbolos para calcular la demanda del precio directo y viceversa?
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Arbitraje triangular:
Este Asesor Experto (EA) implementa una estrategia de arbitraje triangular entre tres pares de divisas: EURUSD, USDJPY y EURJPY
Author: Джованни Орсани