Experts: 삼각 차익거래

 

삼각 차익거래:

이 전문가 어드바이저(EA)는 EURUSD, USDJPY, EURJPY 세 가지 통화쌍 간의 삼각 차익거래 전략을 실행합니다.

Author: Джованни Орсани

 
안녕하세요, 어떤 심볼로 EA가 작동하는지 또는 언급 한 세 가지 심볼에 배치하는지 알고 싶습니다.
 
Edward Garnica 배치해야 하는지 또는 언급하신 세 가지 기호에 배치해야 하는지 알고 싶습니다.
언급된 세 가지 기호 이외의 기호도 모두 코드에 정의되어 있으므로 어떤 기호라도 사용할 수 있습니다.
 
과거 데이터에서 잘 작동합니다 (목표 수익은 0.1 $로 설정). 지연(핑)을 60ms 수준으로 설정했습니다.

데모 계좌의 실제 데이터에서도 시도해 보았습니다:
거래를 열고 닫을 수 있지만 단점이 있습니다. 아마도 핑 시간이 길기 때문일 것입니다 (약 60ms).
VPS를 통해 시도하고 싶습니다.
 
sfhomebiz #:
과거 데이터에서 잘 작동합니다(목표 수익은 0.1$로 설정). 지연(핑)을 60ms로 설정했습니다.
그 이유는 이것 때문입니다.
void CloseArbitragePositions()
{
   double totalProfit = 0;
  
   // 매직넘버로 포지션의 누적 수익 계산하기
   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.");
      
      // 안전을 위해 위치를 안쪽으로 반복하여 변경합니다.
      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.");
            }
         }
      }
   }
}
이 조건의 모든 EA는 좋은 결과를 보여줄 것입니다.
 
fxsaber #:
그 이유는 바로 이것입니다. 이 조건의 모든 EA는 좋은 결과를 표시합니다.
그럼 음성이라는 결과가 출력되지 않나요?
 
xery #:
음성이라는 결과가 표시되지 않나요?

테스터 패스가 중지된 경우에만 표시됩니다.

 
// 더 강력하고, 더 높은 쓰레쉬홀드 사용 가능 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 = (implied가격 - 직접가격) / 직접가격; 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 = (implied가격 - 직접가격) / 직접가격; 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; }
왜 처음 두 심볼의 입찰가를 사용하여 직접 가격의 요청을 계산하고 그 반대의 경우도 계산하기로 결정 했습니까?