Советники: Trade-Arbitrage - страница 30

 

Изменяем код для учитывания  "spreadx+spready", добавления:

double AsksReal[MAX_REALSYMBOLS]; // Ask-цены реальных символов (это то что было)
int spread[MAX_REALSYMBOLS]; // spread (это добавил)

И так далее:

AsksReal[i] = MarketInfo(REALSymbols[i], MODE_ASK);

spread[i]=MarketInfo(REALSymbols[i],MODE_SPREAD) * 0.01;//вот только 

// spread[i] нулю равный   выдается почемуто(может вручную задать, но тогда пары типа USD/JPY будет малюсенький спрэд                   //и все равно количество знаков  после запятой надо задавать).  Как добавить знаки после запятой     не помню, да                                         //еще и  везде, где это учавствует,придется добавлять как то..

........

spread[i]=MarketInfo(REALSymbols[i],MODE_SPREAD) * 0.01; 
   .........
MinPipsD[i] = MinPips * 0.0001;
  spread[i]=MarketInfo(REALSymbols[i],MODE_SPREAD) * 0.0001;

..........

Дальше самое интересное(в смысле все ясно), показывать не хочу

 
getch:

Совсем было бы правильно заменить MinPips на относительную величину. Например, если относительную величину взять 0.006%, то для EURUSD (1.5000) это соответствовало бы примерно 0.0001 (одному "старому" пункту), а для JPYEUR (0.00752) - 0.0000005.

Это классно было бы, тока надо задавать число знаков после запятой, да еще и во всех операциях с MinPips.. Как задать ?

 

  Если роботы, проверенные, уже продаются за деньги, к чему это все приведет в скором времени..?

может купить пока халаява не закрылась

 

Код для условия SpreadX + SpreadY:

// extern double MinPips = 0.5; // Минимальная учитываемая разница арбитража в "старых" пунктах
extern double SpreadKoef = 1;
void TradeArbitrage()
{
  int i, j, k;
  double Bid1, Bid2, Ask1, Ask2;
  double Tmp, Spread1, Spread2, Max;
  int MaxJ, MaxK;
  GetRealBidAsk();
 
  for (i = 0; i < AmountAllSymbols; i++)
  {
    for (j = 0; j < Count[i]; j++)
      GetBidAsk(i, j);
      
    Max = SpreadKoef;
 
    for (j = 0; j < Count[i] - 1; j++)
    {
      Bid1 = Bids[i][j];
      Ask1 = Asks[i][j];
      
      Spread1 = Ask1 - Bid1;
  
      for (k = j + 1; k < Count[i]; k++)
      {
        Bid2 = Bids[i][k];
        Ask2 = Asks[i][k];
        
        Spread2 = Ask2 - Bid2 + Spread1;
        
        Tmp = (Bid1 - Ask2) / Spread2; // Первый вариант
        
        if (Tmp > Max)
        {
          Max = Tmp;
          MaxJ = j;
          MaxK = k;
        }
        else
        {
          Tmp = (Bid2 - Ask1) / Spread2; // Второй вариант
        
          if (Tmp > Max)
          {
            Max = Tmp;
            MaxJ = k;
            MaxK = j;
          }
        }
      }
    }
    
    if (Max > SpreadKoef)
      OpenArbitragePosition(i, MaxJ, MaxK, Lots);
  }
//  RefreshPositions(); // Сначала открыть арбитражные позиции. Закрыть всегда успеем.
  CloseSomePositions();
  RefreshPositions();
  return;
}
 

Понятно, у Вас все правильно, только при компиляции функция CloseSomePositions(); не определена. Это у Вас там она наверное в коде.. А я в функцию void GetBidAsk думал spread[] добавить:

.........

Bids[i][j] = 1 / AsksReal[Symb];
Asks[i][j] = 1 / (BidsReal[Symb]-spread[Symb]);
}
else if (Mth == -1) // -1 - "S"
{
Bids[i][j] = BidsReal[Symb]-spread[Symb];
Asks[i][j] = AsksReal[Symb];
}
else
{
S1 = Symb / AmountRealSymbols;
S2 = Symb % AmountRealSymbols;

Bid1 = BidsReal[S1]-spread[S1];
Bid2 = BidsReal[S2]-spread[S2];
Ask1 = AsksReal[S1]+spread[S1];
Ask2 = AsksReal[S2]+spread[S2];

 
Sashulya:

я написал так потому что у меня "spread1" получается равным(например в случае case 1, когда Bids[i][j] = Bid1 * Bid2;Asks[i][j] = Ask1 * Ask2;):

(AsksReal[S1]+spread[S1])*(AsksReal[S2]+spread[S2])-(BidsReal[S1]-spread[S1])*(BidsReal[S2]-spread[S2]), а это не равно вашему spread1 в том же случае-case 1, равному AsksReal[S1]*AsksReal[S2]-BidsReal[S1]*BidsReal[S2]

(для любых i,j)

то есть (A1+s1)*(A2+s2)-(B1-s1)*(B2-s2) > A1*A2-B1*B2

 

Модификация функции GetBidAsk не требуется.

 
getch:

Модификация функции GetBidAsk не требуется.

   а у меня спрэд  больше получается..4 ордера открываются на 1 случвй(максимум), - значит 4 спрэда

 

Вы просто не разобрались.

 
getch

Почему вы считаете, что "Для арбитража совершенно не имеет значение размер спреда"?

По моему чем меньше спред, тем лучше