Discusión sobre el artículo "Trading de arbitraje en Forex: Un bot market-maker simple de sintéticos para comenzar"

 

Artículo publicado Trading de arbitraje en Forex: Un bot market-maker simple de sintéticos para comenzar:

Hoy vamos a desmontar mi primer robot de arbitraje: un proveedor de liquidez (si lo podemos llamar así) en activos sintéticos. Hoy en día este bot está funcionando con éxito como un módulo en un gran sistema de aprendizaje automático, pero he puesto en marcha un viejo robot de arbitraje de divisas de la nube, así que le propongo echarle un vistazo, y pensar en lo que podemos hacer con él hoy.

En 2017 se produjo una revolución en mi mente cuando, tras una serie de dolorosas pérdidas, comencé a estudiar cómo operan realmente los grandes jugadores. No los que pregonan sus "ganancias millonarias" en YouTube, sino los realmente institucionalizados: bancos, fondos de cobertura y empresas de trading por cuenta propia.

Y esto es lo que descubrí: no usan elaboradas estrategias de indicadores. Aplican principios matemáticos como la gestión de riesgos, el arbitraje, la creación de mercado y otros enfoques basados en una comprensión fundamental de los mecanismos del mercado. Fue entonces cuando tomé la decisión: hay que negociar como un gran jugador o no negociar en absoluto.

Pasé los tres años siguientes estudiando métodos de negociación institucionales. Me sumergí en el mundo de las correlaciones entre mercados, el arbitraje estadístico y el trading algorítmico. Experimenté con Python y MQL, creando prototipos de sistemas que imitaban los planteamientos de los grandes participantes en el mercado, pero adaptados a los tráders minoristas con sus limitaciones de capital y tecnología.

Así, en enero de 2020, en vísperas de uno de los periodos más turbulentos de la historia de los mercados financieros, nació Tris_Optimised, mi respuesta a la pregunta: "¿Cómo aplica un tráder minorista las estrategias institucionales?"

Este asesor experto no intenta predecir los movimientos del mercado, no se basa en indicadores de análisis técnico y no requiere la "intuición" del tráder. En su lugar, calcula matemáticamente los posibles desequilibrios entre tres pares de divisas relacionados y coloca una cuadrícula de órdenes listas para captar esos desequilibrios cuando se produzcan.

En cinco años de funcionamiento continuo en condiciones reales de mercado, Tris_Optimised ha mostrado su viabilidad. Ha sobrevivido a pandemias, picos inflacionistas, cambios en los tipos de interés y crisis geopolíticas, y sigue produciendo beneficios constantes (durante esos raros periodos en los que negocio, en lugar de pasarme la noche en vela buscando ideas y códigos directamente). No es un sistema milagroso que promete beneficios exorbitantes, sino una herramienta de trabajo fiable basada en los principios fundamentales del trading institucional.


Autor: Yevgeniy Koshtenko

 

Un enfoque interesante. Empezó tal cual, sin optimización. Mantiene el equilibrio, hay un aumento en pequeños pasos.

Si lo desea, puede mover el cierre de la parrilla al final del día, antes de la formación de swap. Actualmente, la parrilla se cierra al inicio de la negociación. O no utilizar el cierre diario en absoluto.

Definitivamente hay espacio para el desarrollo y la aplicación en soluciones complejas.

¡Adelante!

 

El artículo apareció en la traducción inglesa, y me pregunté qué me había perdido en el original ruso de marzo.

Resultó ser una basura fabulosa. ;-)

 
Evgen Khenkin #:
Empezó tal cual sin optimización. Mantiene el equilibrio, hay un pequeño aumento.
¿Qué tan rápido bajó?)
 


"Al añadir exposición después de la entrada inicial, ¿escala siempre simétricamente todo el triángulo de tres pares, o añade alguna vez posiciones sólo en el par específico que muestra el mayor desequilibrio?".


 
Sigo escuchando
 
Ali Munene #:
Sigo escuchando.
¡Un aplauso!
 

¿Podría esto funcionar en una Cuenta Real? o es uno de los Bots que sólo funciona en Cuentas Demo?

 

aquí está el código corregido si tienes errores de llenado

Archivos adjuntos:
 
Stanislav Korotky #:
Resultó ser una tontería de cuento de hadas

Stanislav, te pregunto sin rodeos: ¿dónde se encuentra esta tontería de cuento de hadas? Sinceramente, ¡me gustaría profundizar en ello y comprender plenamente lo que está mal en este artículo!

Con todo respeto, Vladimir.

 
MrBrooklin #:

Stanislav, te pregunto sin tonterías ni burlas: ¿dónde se encuentra esta fabulosa tontería? Sinceramente, ¡me gustaría entrar en él y comprender plenamente lo que está mal en este artículo!

Empecemos con el hecho de que MT5 soporta cuentas con contabilidad de compensación y cobertura en igualdad de derechos. El sistema propuesto es estrictamente de cobertura, pero no se menciona. En netting, las posiciones contrarias de órdenes contrarias rápidamente empiezan a colapsar en una pérdida.

En segundo lugar, la idea de capturar una diferencia exitosa a corto plazo de las cotizaciones en los cruces no es nueva (se puede empezar, por ejemplo, con los trabajos de hrenfx o getch - ellos, aunque para MT4, pero la esencia no cambia y dan una buena idea de la imagen del mercado en dinámica). No tiene sentido hacerlo con la ayuda de órdenes pendientes abiertas sin control en línea del spread sintético momentáneo. Tales órdenes comienzan inmediatamente con un signo menos en la cantidad de la suma de los diferenciales en todos los pares, y el autor de este artículo sugiere a continuación, para mantener posiciones en la esperanza de que algún día a esperar de la ineficiencia corredor de cotizaciones aún más que este diferencial. La red de órdenes no cambia la situación, pero sólo le permite sentarse pérdidas un poco más, cerrando sólo el beneficio y la acumulación de flotante menos.

En tercer lugar, el artículo omite por completo la cuestión del margen, e incluso si imaginamos un depósito enorme, ¿cuál sería el % de beneficio, si, digamos, logramos esperar a que la rejilla se cierre en el plus?

Y ahora sobre la realización real con muchos errores. Por ejemplo,

// Ajuste para pares con JPY y otras divisas exóticas
string quoteCurrency = StringSubstr(symbol, 3, 3);
if(quoteCurrency == "JPY" || quoteCurrency == "XAU" || quoteCurrency == "XAG")
   pointCost *= 100.0;

Esto es basura. MT5 devuelve el valor correcto del pip independientemente de la divisa. El único matiz es que para forex el valor del pip se devuelve en la divisa de la cuenta, pero para los instrumentos de cambio - en la divisa de cotización y por lo tanto allí se requiere el recálculo manual a la divisa de la cuenta. Pero no es importante para este artículo.

Siguiente.

   // Factor de ajuste basado en el balance actual
   double equityRatio = accountBalance / BaseEquity;

Si queremos asignar sólo una parte del dinero al Asesor Experto y no toda la cuenta, esta relación debe escribirse en la dirección opuesta. Ahora resulta que si la cuenta es de 10000 y hemos asignado 1000 para la base, el Asesor Experto se abrirá con lotes 10 veces mayores de lo que la cuenta permitiría para una carga completa.

Lo cambié así para mis pruebas (si no el error de falta de margen sale rápido):

   // Factor de ajuste basado en el balance actual
   double equityRatio = BaseEquity ? BaseEquity / accountBalance : 1.0;

He dejado esta parte tal cual, pero aquí hay muchos misterios:

   // Cálculo del lote óptimo ajustado al riesgo
   double riskAmount = accountBalance * (RiskPercentage / 100.0);
   double calculatedLot = (riskAmount / 100.0) * equityRatio / (pointCost * basePrice);

RiskPercentage es exactamente un porcentaje, así que RiskPercentage/100 da una fracción del dinero en especie en la variable riskAmount.

Pero, ¿qué es ese 100 mágico por el que se divide la cantidad de dinero? ¿Es un apalancamiento?

¿Y por qué dividimos el dinero por el coste por punto * precio? El riesgo se suele tomar como la distancia del stop loss, pero como tenemos una rejilla, lo lógico sería tomar la distancia de la rejilla como medida de riesgo, pero no es el caso aquí. Y 100 no es igual al paso de la rejilla por defecto, y se supone que el paso de la rejilla es personalizable. En Forex, la fórmula para calcular el margen (si es que es esta) es diferente, y en principio es mejor solicitarla a través de la API de MT5, que intentar calcularla por tu cuenta utilizando fórmulas del techo.

Además, tuve que hacer una edición de este tipo en el cálculo de la comisión - fue (dio 0):

            double commission = PositionGetDouble(POSITION_COMMISSION);

Se convirtió (la historia se filtra por la posición al inicio del ciclo):

            double commission = 0; // PositionGetDouble(POSITION_COMMISSION);
            for(int j = 0; j < HistoryDealsTotal(); j++)
            {
               commission += // multiplique por 2 porque las tasas de salida aún no se han cobrado y pueden ser iguales a las de entrada
                 2 * (HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_COMMISSION)
                 + HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_FEE));
            }

Sin detalles me gustaría señalar que para trabajar con diferentes corredores tuve que añadir entradas Prefijo/Sufijo para los símbolos y añadirlos a las expresiones en todas partes.

Después de ediciones y experimentos conseguimos un drenaje estable y esperado.

Trade-Arbitrage
Trade-Arbitrage
  • 2009.11.27
  • www.mql5.com
Несливающая система2 - использование неэффективности рынка (котирования) для 100%-го извлечения прибыли - арбитраж.