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.
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. Funciona bem com dados históricos(meta de lucro definida em 0,1$). Defino o atraso (ping) em 60 ms.
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."); } } } } }
// 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?
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Arbitragem triangular:
Esse Expert Advisor (EA) implementa uma estratégia de arbitragem triangular entre três pares de moedas: EURUSD, USDJPY e EURJPY
Author: Джованни Орсани