Edward Garnica placé pour fonctionner ou faut-il le placer dans les trois symboles que vous mentionnez.
N'importe quel symbole peut être utilisé, même un symbole autre que les trois mentionnés, car ils sont tous définis dans le code.
Fonctionne bien sur les données historiques (objectif de profit fixé à 0,1$). J'ai réglé le délai (ping) au niveau de 60 ms.
Je l'ai également essayé sur des données réelles sur un compte de démonstration :
Il ouvre et ferme des transactions, mais à un désavantage. Probablement à cause du long temps de ping (j'ai eu environ 60 ms).
Je veux essayer via VPS.
Je l'ai également essayé sur des données réelles sur un compte de démonstration :
Il ouvre et ferme des transactions, mais à un désavantage. Probablement à cause du long temps de ping (j'ai eu environ 60 ms).
Je veux essayer via VPS.
sfhomebiz #:
Fonctionne bien sur les données historiques(objectif de profit fixé à 0,1$). J'ai fixé le délai (ping) à 60 ms.
La raison est la suivante. Fonctionne bien sur les données historiques(objectif de profit fixé à 0,1$). J'ai fixé le délai (ping) à 60 ms.
void CloseArbitragePositions() { double totalProfit = 0; // Calculer le bénéfice cumulé des positions avec le 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."); // Modifie les positions en procédant par itération à l'intérieur pour plus de sécurité 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."); } } } } }
// C'est plus puissant, plus utilisable 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 = (prix implicite - prix direct) / prix direct ; 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 = (prix implicite - prix direct) / prix direct ; 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 ; }
Pourquoi avez-vous décidé d'utiliser le bid des deux premiers symboles pour calculer le ask du directprice et vice-versa ?
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Arbitrage triangulaire:
Cet Expert Advisor (EA) met en œuvre une stratégie d'arbitrage triangulaire entre trois paires de devises : EURUSD, USDJPY et EURJPY.
Author: Джованни Орсани