Edward Garnica размещается советник для работы или необходимо размещать его на трех символах, которые вы упомянули.
Можно использовать любой символ, даже отличный от трех указанных, так как все они определены в коде.
Отлично работает на исторических данных (целевой профит установил на 0,1$). Устанавливал задержку (пинг) на уровне 60 мс.
Также пробовал на реальных данных на демо-счёте:
Открывает и закрывает сделки, но в минус. Возможно, из-за большого времени пинга (у меня был около 60 мс).
Хочу попробовать через VPS.
Также пробовал на реальных данных на демо-счёте:
Открывает и закрывает сделки, но в минус. Возможно, из-за большого времени пинга (у меня был около 60 мс).
Хочу попробовать через VPS.
sfhomebiz #:
Отлично работает на исторических данных (целевой профит установил на 0,1$). Устанавливал задержку (пинг) на уровне 60 мс.
Причина в этом. Отлично работает на исторических данных (целевой профит установил на 0,1$). Устанавливал задержку (пинг) на уровне 60 мс.
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."); } } } } }
// Это более мощный, более высокий порог использования 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; }
Почему вы решили использовать бид первых двух символов для расчета аск директпрайса и наоборот...?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Треугольный арбитраж:
Данный советник реализует треугольную арбитражную стратегию между тремя валютными парами: EURUSD, USDJPY и EURJPY.
Author: Джованни Орсани