Edward Garnica posizionato l'EA per funzionare o è necessario posizionarlo nei tre simboli che menzionate.
Si può usare qualsiasi simbolo, anche un simbolo diverso dai tre citati, in quanto sono tutti definiti nel codice.
Funziona bene sui dati storici (obiettivo di profitto fissato a 0,1$). Ho impostato il ritardo (ping) al livello di 60 ms.
L'ho provato anche su dati reali su un conto demo:
Apre e chiude i trade, ma con uno svantaggio. Probabilmente a causa del lungo tempo di ping (avevo circa 60 ms).
Voglio provare via VPS.
L'ho provato anche su dati reali su un conto demo:
Apre e chiude i trade, ma con uno svantaggio. Probabilmente a causa del lungo tempo di ping (avevo circa 60 ms).
Voglio provare via VPS.
sfhomebiz #:
Funziona bene sui dati storici(obiettivo di profitto impostato a 0,1$). Ho impostato il ritardo (ping) a 60 ms.
Il motivo è questo. Funziona bene sui dati storici(obiettivo di profitto impostato a 0,1$). Ho impostato il ritardo (ping) a 60 ms.
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."); // Chiude le posizioni 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."); } } } } }
// Questo è più potente, più alto trashold utilizzabile 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; }
Perché avete deciso di utilizzare il bid dei primi due simboli per calcolare l'ask del directPrice e viceversa?
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Triangular Arbitrage:
Questo Expert Advisor (EA) implementa una strategia di arbitraggio triangolare tra tre coppie di valute: EURUSD, USDJPY ed EURJPY
Autore: Джованни Орсани